/*
 * 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;

/**
 * Represents the properties of a mention. Next ID: 13
 *
 * <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 AttentionalEntitiesMentionProperties extends com.google.api.client.json.GenericJson {

  /**
   * The unique device on which the mention occurred. For example, if the user has two Google Home
   * devices, this indicates which of the two was used.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiCoreTypesDeviceId deviceId;

  /**
   * ID of the event that resulted in this entity mention. For user and system turn AEs, this is
   * taken from the ConversationSnapshotId of the snapshot containing this mention. For client AEs,
   * this is empty. This can be used to join back this particular mention to the specific "turn" in
   * which this mention took place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private EventIdMessage eventId;

  /**
   * If this mention corresponds to a WebAnswer, then this defines the score associated with that
   * answer.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float factoidScore;

  /**
   * If present, this entity was mentioned as part of a larger list.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AttentionalEntitiesMentionPropertiesListEntryInfo listEntryInfo;

  /**
   * Estimates the recency of the mention. This is internally computed at runtime on a turn-by-turn
   * basis.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String recency;

  /**
   * The semantic role that the entity was used in.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AttentionalEntitiesSemanticRoleId role;

  /**
   * How salient this mention is. This field will only be set if the mention is derived from a
   * SearchAnswerValue. See go/webresultsdata-as-aes for more details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String salience;

  /**
   * Contains metadata about the source of the mention.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AttentionalEntitiesMentionPropertiesSource source;

  /**
   * If present, properties of visual mentions (e.g., how they are displayed to the user,
   * visibility, etc.).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AttentionalEntitiesSpatialProperties spatialProperties;

  /**
   * Details about how this mention was presented.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AttentionalEntitiesSurfaceForm surfaceForm;

  /**
   * Unix timestamp noting (approximately) when this mention occurred. We do not guarantee that the
   * time will correspond precisely to when the user uttered/heard a response. If mentions within a
   * single turn have *different* timestamps, they should accurately reflect the order in which the
   * mentions occurred. If that order is unknown, they should all have the same timestamp.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String timestamp;

  /**
   * The unique device on which the mention occurred. For example, if the user has two Google Home
   * devices, this indicates which of the two was used.
   * @return value or {@code null} for none
   */
  public AssistantApiCoreTypesDeviceId getDeviceId() {
    return deviceId;
  }

  /**
   * The unique device on which the mention occurred. For example, if the user has two Google Home
   * devices, this indicates which of the two was used.
   * @param deviceId deviceId or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setDeviceId(AssistantApiCoreTypesDeviceId deviceId) {
    this.deviceId = deviceId;
    return this;
  }

  /**
   * ID of the event that resulted in this entity mention. For user and system turn AEs, this is
   * taken from the ConversationSnapshotId of the snapshot containing this mention. For client AEs,
   * this is empty. This can be used to join back this particular mention to the specific "turn" in
   * which this mention took place.
   * @return value or {@code null} for none
   */
  public EventIdMessage getEventId() {
    return eventId;
  }

  /**
   * ID of the event that resulted in this entity mention. For user and system turn AEs, this is
   * taken from the ConversationSnapshotId of the snapshot containing this mention. For client AEs,
   * this is empty. This can be used to join back this particular mention to the specific "turn" in
   * which this mention took place.
   * @param eventId eventId or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setEventId(EventIdMessage eventId) {
    this.eventId = eventId;
    return this;
  }

  /**
   * If this mention corresponds to a WebAnswer, then this defines the score associated with that
   * answer.
   * @return value or {@code null} for none
   */
  public java.lang.Float getFactoidScore() {
    return factoidScore;
  }

  /**
   * If this mention corresponds to a WebAnswer, then this defines the score associated with that
   * answer.
   * @param factoidScore factoidScore or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setFactoidScore(java.lang.Float factoidScore) {
    this.factoidScore = factoidScore;
    return this;
  }

  /**
   * If present, this entity was mentioned as part of a larger list.
   * @return value or {@code null} for none
   */
  public AttentionalEntitiesMentionPropertiesListEntryInfo getListEntryInfo() {
    return listEntryInfo;
  }

  /**
   * If present, this entity was mentioned as part of a larger list.
   * @param listEntryInfo listEntryInfo or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setListEntryInfo(AttentionalEntitiesMentionPropertiesListEntryInfo listEntryInfo) {
    this.listEntryInfo = listEntryInfo;
    return this;
  }

  /**
   * Estimates the recency of the mention. This is internally computed at runtime on a turn-by-turn
   * basis.
   * @return value or {@code null} for none
   */
  public java.lang.String getRecency() {
    return recency;
  }

  /**
   * Estimates the recency of the mention. This is internally computed at runtime on a turn-by-turn
   * basis.
   * @param recency recency or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setRecency(java.lang.String recency) {
    this.recency = recency;
    return this;
  }

  /**
   * The semantic role that the entity was used in.
   * @return value or {@code null} for none
   */
  public AttentionalEntitiesSemanticRoleId getRole() {
    return role;
  }

  /**
   * The semantic role that the entity was used in.
   * @param role role or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setRole(AttentionalEntitiesSemanticRoleId role) {
    this.role = role;
    return this;
  }

  /**
   * How salient this mention is. This field will only be set if the mention is derived from a
   * SearchAnswerValue. See go/webresultsdata-as-aes for more details.
   * @return value or {@code null} for none
   */
  public java.lang.String getSalience() {
    return salience;
  }

  /**
   * How salient this mention is. This field will only be set if the mention is derived from a
   * SearchAnswerValue. See go/webresultsdata-as-aes for more details.
   * @param salience salience or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setSalience(java.lang.String salience) {
    this.salience = salience;
    return this;
  }

  /**
   * Contains metadata about the source of the mention.
   * @return value or {@code null} for none
   */
  public AttentionalEntitiesMentionPropertiesSource getSource() {
    return source;
  }

  /**
   * Contains metadata about the source of the mention.
   * @param source source or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setSource(AttentionalEntitiesMentionPropertiesSource source) {
    this.source = source;
    return this;
  }

  /**
   * If present, properties of visual mentions (e.g., how they are displayed to the user,
   * visibility, etc.).
   * @return value or {@code null} for none
   */
  public AttentionalEntitiesSpatialProperties getSpatialProperties() {
    return spatialProperties;
  }

  /**
   * If present, properties of visual mentions (e.g., how they are displayed to the user,
   * visibility, etc.).
   * @param spatialProperties spatialProperties or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setSpatialProperties(AttentionalEntitiesSpatialProperties spatialProperties) {
    this.spatialProperties = spatialProperties;
    return this;
  }

  /**
   * Details about how this mention was presented.
   * @return value or {@code null} for none
   */
  public AttentionalEntitiesSurfaceForm getSurfaceForm() {
    return surfaceForm;
  }

  /**
   * Details about how this mention was presented.
   * @param surfaceForm surfaceForm or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setSurfaceForm(AttentionalEntitiesSurfaceForm surfaceForm) {
    this.surfaceForm = surfaceForm;
    return this;
  }

  /**
   * Unix timestamp noting (approximately) when this mention occurred. We do not guarantee that the
   * time will correspond precisely to when the user uttered/heard a response. If mentions within a
   * single turn have *different* timestamps, they should accurately reflect the order in which the
   * mentions occurred. If that order is unknown, they should all have the same timestamp.
   * @return value or {@code null} for none
   */
  public String getTimestamp() {
    return timestamp;
  }

  /**
   * Unix timestamp noting (approximately) when this mention occurred. We do not guarantee that the
   * time will correspond precisely to when the user uttered/heard a response. If mentions within a
   * single turn have *different* timestamps, they should accurately reflect the order in which the
   * mentions occurred. If that order is unknown, they should all have the same timestamp.
   * @param timestamp timestamp or {@code null} for none
   */
  public AttentionalEntitiesMentionProperties setTimestamp(String timestamp) {
    this.timestamp = timestamp;
    return this;
  }

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

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

}
