/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.contentwarehouse.v1.model;

/**
 * Raw device contact information.
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Document AI Warehouse API. For a detailed explanation
 * see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo extends com.google.api.client.json.GenericJson {

  /**
   * Account name of raw contact, e.g. "google@gmail.com".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String accountName;

  /**
   * Account type of raw contact, e.g. "com.google" or "com.linkedin.android".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String accountType;

  /**
   * The detailed app-specific endpoint data available for the given RawDeviceContactInfo instance.
   * This proto should be used to obtain the list of actions and mimetypes supported by the third-
   * party app. Design: go/3p-contact-upload
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<SocialGraphApiAppContactData> appContactData;

  /**
   * The app-specific endpoint data needed for app action fulfillment. Usage of this field should be
   * avoided on the server-side, and should use the more detailed |full_app_info| field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AppsPeopleOzExternalMergedpeopleapiAppUniqueInfo appInfo;

  /**
   * If true, this raw contact can be used on other devices than the one it originated from.
   * Assigned by the server.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean crossDeviceAllowed;

  /**
   * Extra metadata for this raw contact.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata deviceContactMetadata;

  /**
   * The focus contact id for Google contacts.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long googleContactId;

  /**
   * The base64 serialized social.graph.peopleapi.proto.internal.RawDeviceContactId. This id should
   * be used to correlate to field.metadata.encoded_container_id when the
   * field.metadata.container_type is RAW_DEVICE_CONTACT The id also correlates to
   * person.metadata.identity_info.source_id.id.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String id;

  /**
   * The type of photo from the device (if any).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String photoType;

  /**
   * The id of the raw contact on the device.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long rawContactId;

  /**
   * Only to be used by Romanesco team specifically for analytics.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AppsPeopleOzExternalMergedpeopleapiRawDeviceContactAnalyticalInfo rawDeviceContactAnalyticalInfo;

  /**
   * Account name of raw contact, e.g. "google@gmail.com".
   * @return value or {@code null} for none
   */
  public java.lang.String getAccountName() {
    return accountName;
  }

  /**
   * Account name of raw contact, e.g. "google@gmail.com".
   * @param accountName accountName or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setAccountName(java.lang.String accountName) {
    this.accountName = accountName;
    return this;
  }

  /**
   * Account type of raw contact, e.g. "com.google" or "com.linkedin.android".
   * @return value or {@code null} for none
   */
  public java.lang.String getAccountType() {
    return accountType;
  }

  /**
   * Account type of raw contact, e.g. "com.google" or "com.linkedin.android".
   * @param accountType accountType or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setAccountType(java.lang.String accountType) {
    this.accountType = accountType;
    return this;
  }

  /**
   * The detailed app-specific endpoint data available for the given RawDeviceContactInfo instance.
   * This proto should be used to obtain the list of actions and mimetypes supported by the third-
   * party app. Design: go/3p-contact-upload
   * @return value or {@code null} for none
   */
  public java.util.List<SocialGraphApiAppContactData> getAppContactData() {
    return appContactData;
  }

  /**
   * The detailed app-specific endpoint data available for the given RawDeviceContactInfo instance.
   * This proto should be used to obtain the list of actions and mimetypes supported by the third-
   * party app. Design: go/3p-contact-upload
   * @param appContactData appContactData or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setAppContactData(java.util.List<SocialGraphApiAppContactData> appContactData) {
    this.appContactData = appContactData;
    return this;
  }

  /**
   * The app-specific endpoint data needed for app action fulfillment. Usage of this field should be
   * avoided on the server-side, and should use the more detailed |full_app_info| field.
   * @return value or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiAppUniqueInfo getAppInfo() {
    return appInfo;
  }

  /**
   * The app-specific endpoint data needed for app action fulfillment. Usage of this field should be
   * avoided on the server-side, and should use the more detailed |full_app_info| field.
   * @param appInfo appInfo or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setAppInfo(AppsPeopleOzExternalMergedpeopleapiAppUniqueInfo appInfo) {
    this.appInfo = appInfo;
    return this;
  }

  /**
   * If true, this raw contact can be used on other devices than the one it originated from.
   * Assigned by the server.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getCrossDeviceAllowed() {
    return crossDeviceAllowed;
  }

  /**
   * If true, this raw contact can be used on other devices than the one it originated from.
   * Assigned by the server.
   * @param crossDeviceAllowed crossDeviceAllowed or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setCrossDeviceAllowed(java.lang.Boolean crossDeviceAllowed) {
    this.crossDeviceAllowed = crossDeviceAllowed;
    return this;
  }

  /**
   * Extra metadata for this raw contact.
   * @return value or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata getDeviceContactMetadata() {
    return deviceContactMetadata;
  }

  /**
   * Extra metadata for this raw contact.
   * @param deviceContactMetadata deviceContactMetadata or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setDeviceContactMetadata(AppsPeopleOzExternalMergedpeopleapiDeviceContactExtraMetadata deviceContactMetadata) {
    this.deviceContactMetadata = deviceContactMetadata;
    return this;
  }

  /**
   * The focus contact id for Google contacts.
   * @return value or {@code null} for none
   */
  public java.lang.Long getGoogleContactId() {
    return googleContactId;
  }

  /**
   * The focus contact id for Google contacts.
   * @param googleContactId googleContactId or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setGoogleContactId(java.lang.Long googleContactId) {
    this.googleContactId = googleContactId;
    return this;
  }

  /**
   * The base64 serialized social.graph.peopleapi.proto.internal.RawDeviceContactId. This id should
   * be used to correlate to field.metadata.encoded_container_id when the
   * field.metadata.container_type is RAW_DEVICE_CONTACT The id also correlates to
   * person.metadata.identity_info.source_id.id.
   * @return value or {@code null} for none
   */
  public java.lang.String getId() {
    return id;
  }

  /**
   * The base64 serialized social.graph.peopleapi.proto.internal.RawDeviceContactId. This id should
   * be used to correlate to field.metadata.encoded_container_id when the
   * field.metadata.container_type is RAW_DEVICE_CONTACT The id also correlates to
   * person.metadata.identity_info.source_id.id.
   * @param id id or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setId(java.lang.String id) {
    this.id = id;
    return this;
  }

  /**
   * The type of photo from the device (if any).
   * @return value or {@code null} for none
   */
  public java.lang.String getPhotoType() {
    return photoType;
  }

  /**
   * The type of photo from the device (if any).
   * @param photoType photoType or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setPhotoType(java.lang.String photoType) {
    this.photoType = photoType;
    return this;
  }

  /**
   * The id of the raw contact on the device.
   * @return value or {@code null} for none
   */
  public java.lang.Long getRawContactId() {
    return rawContactId;
  }

  /**
   * The id of the raw contact on the device.
   * @param rawContactId rawContactId or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setRawContactId(java.lang.Long rawContactId) {
    this.rawContactId = rawContactId;
    return this;
  }

  /**
   * Only to be used by Romanesco team specifically for analytics.
   * @return value or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactAnalyticalInfo getRawDeviceContactAnalyticalInfo() {
    return rawDeviceContactAnalyticalInfo;
  }

  /**
   * Only to be used by Romanesco team specifically for analytics.
   * @param rawDeviceContactAnalyticalInfo rawDeviceContactAnalyticalInfo or {@code null} for none
   */
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo setRawDeviceContactAnalyticalInfo(AppsPeopleOzExternalMergedpeopleapiRawDeviceContactAnalyticalInfo rawDeviceContactAnalyticalInfo) {
    this.rawDeviceContactAnalyticalInfo = rawDeviceContactAnalyticalInfo;
    return this;
  }

  @Override
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo set(String fieldName, Object value) {
    return (AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo) super.set(fieldName, value);
  }

  @Override
  public AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo clone() {
    return (AppsPeopleOzExternalMergedpeopleapiRawDeviceContactInfo) super.clone();
  }

}
