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

/**
 * Next available tag: 35. Represents all the information that we have for a given entity.
 *
 * <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 RepositoryWebrefEntityJoin extends com.google.api.client.json.GenericJson {

  /**
   * The id of this entity, prefer accessing through webref-entities-util.h functions.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefWebrefEntityId annotatedEntityId;

  /**
   * This field contains reference pages for this entity. A reference page is a page that is highly
   * topical for this entity, which can be used to mine additional information about this entity.
   * Example reference pages for Apple Inc. would be the composite docs for
   * "http://en.wikipedia.org/wiki/Apple_Inc." and http://www.apple.com. For actors or movies, you
   * can also have the imdb page. Also see: http://go/refx-pages.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefSimplifiedCompositeDoc> cdoc;

  /**
   * The context names (with scores) of this entity. The difference to regular names (aka name_info)
   * is that context names are not used for finding mentions in a document as they consist of names
   * somehow related to the entity (e.g. name "fisherman s wharf" for the entity "Gary Danko"). Used
   * for reconciling freebase and oyster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefGlobalNameInfo> contextNameInfo;

  /**
   * Debug information about the entity.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefEntityDebugInfo> debugInfo;

  static {
    // hack to force ProGuard to consider RepositoryWebrefEntityDebugInfo used, since otherwise it would be stripped out
    // see https://github.com/google/google-api-java-client/issues/543
    com.google.api.client.util.Data.nullOf(RepositoryWebrefEntityDebugInfo.class);
  }

  /**
   * Optional profiling data from the enricher that enriched this entity (and produced this
   * EntityJoin as debug output).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefAnnotatorProfile enricherAnnotatorProfile;

  /**
   * Contains debug data produced by enricher and only used for debug purpose (e.g. demo).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefEnricherDebugData enricherDebugData;

  /**
   * Additional metadata about the entity, that can be derived from the "raw data" (composite doc,
   * domain specific data...), or come from other sources. Despite its name, this field often
   * contains quite important information.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefExtraMetadata extraData;

  /**
   * Human ratings (e.g. ratings from EWOK). This is typically only populated in the evaluation
   * pipelines (e.g. P@5).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefHumanRatings humanRatings;

  /**
   * Contains all links (with scores) that Webref knows for this entity. Links are relationships
   * between entities. The data in this field is very important for the quality of the model.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefGlobalLinkInfo> linkInfo;

  /**
   * Contains all names (with scores) that Webref knows for this entity. The data in this field is
   * very important for the quality of the model.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefGlobalNameInfo> nameInfo;

  /**
   * Contains names and names metadata used by Refcon.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefRefconRefconNameInfo> refconNameInfo;

  /**
   * An entity can have metadata from various data sources. Generally speaking all sources will be /
   * should be reconciled into a single KG Topic entry. However, in some cases we pull in additional
   * chunks of metadata from these sources; these are stored in this field. For example a local
   * business could have a KG entry (topic proto), wikipedia entry (WikiJoin) and a MapFacts entry
   * (Feature proto).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<RepositoryWebrefDomainSpecificRepresentation> representation;

  static {
    // hack to force ProGuard to consider RepositoryWebrefDomainSpecificRepresentation used, since otherwise it would be stripped out
    // see https://github.com/google/google-api-java-client/issues/543
    com.google.api.client.util.Data.nullOf(RepositoryWebrefDomainSpecificRepresentation.class);
  }

  /**
   * The id of this entity, prefer accessing through webref-entities-util.h functions.
   * @return value or {@code null} for none
   */
  public RepositoryWebrefWebrefEntityId getAnnotatedEntityId() {
    return annotatedEntityId;
  }

  /**
   * The id of this entity, prefer accessing through webref-entities-util.h functions.
   * @param annotatedEntityId annotatedEntityId or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setAnnotatedEntityId(RepositoryWebrefWebrefEntityId annotatedEntityId) {
    this.annotatedEntityId = annotatedEntityId;
    return this;
  }

  /**
   * This field contains reference pages for this entity. A reference page is a page that is highly
   * topical for this entity, which can be used to mine additional information about this entity.
   * Example reference pages for Apple Inc. would be the composite docs for
   * "http://en.wikipedia.org/wiki/Apple_Inc." and http://www.apple.com. For actors or movies, you
   * can also have the imdb page. Also see: http://go/refx-pages.
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefSimplifiedCompositeDoc> getCdoc() {
    return cdoc;
  }

  /**
   * This field contains reference pages for this entity. A reference page is a page that is highly
   * topical for this entity, which can be used to mine additional information about this entity.
   * Example reference pages for Apple Inc. would be the composite docs for
   * "http://en.wikipedia.org/wiki/Apple_Inc." and http://www.apple.com. For actors or movies, you
   * can also have the imdb page. Also see: http://go/refx-pages.
   * @param cdoc cdoc or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setCdoc(java.util.List<RepositoryWebrefSimplifiedCompositeDoc> cdoc) {
    this.cdoc = cdoc;
    return this;
  }

  /**
   * The context names (with scores) of this entity. The difference to regular names (aka name_info)
   * is that context names are not used for finding mentions in a document as they consist of names
   * somehow related to the entity (e.g. name "fisherman s wharf" for the entity "Gary Danko"). Used
   * for reconciling freebase and oyster.
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefGlobalNameInfo> getContextNameInfo() {
    return contextNameInfo;
  }

  /**
   * The context names (with scores) of this entity. The difference to regular names (aka name_info)
   * is that context names are not used for finding mentions in a document as they consist of names
   * somehow related to the entity (e.g. name "fisherman s wharf" for the entity "Gary Danko"). Used
   * for reconciling freebase and oyster.
   * @param contextNameInfo contextNameInfo or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setContextNameInfo(java.util.List<RepositoryWebrefGlobalNameInfo> contextNameInfo) {
    this.contextNameInfo = contextNameInfo;
    return this;
  }

  /**
   * Debug information about the entity.
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefEntityDebugInfo> getDebugInfo() {
    return debugInfo;
  }

  /**
   * Debug information about the entity.
   * @param debugInfo debugInfo or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setDebugInfo(java.util.List<RepositoryWebrefEntityDebugInfo> debugInfo) {
    this.debugInfo = debugInfo;
    return this;
  }

  /**
   * Optional profiling data from the enricher that enriched this entity (and produced this
   * EntityJoin as debug output).
   * @return value or {@code null} for none
   */
  public RepositoryWebrefAnnotatorProfile getEnricherAnnotatorProfile() {
    return enricherAnnotatorProfile;
  }

  /**
   * Optional profiling data from the enricher that enriched this entity (and produced this
   * EntityJoin as debug output).
   * @param enricherAnnotatorProfile enricherAnnotatorProfile or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setEnricherAnnotatorProfile(RepositoryWebrefAnnotatorProfile enricherAnnotatorProfile) {
    this.enricherAnnotatorProfile = enricherAnnotatorProfile;
    return this;
  }

  /**
   * Contains debug data produced by enricher and only used for debug purpose (e.g. demo).
   * @return value or {@code null} for none
   */
  public RepositoryWebrefEnricherDebugData getEnricherDebugData() {
    return enricherDebugData;
  }

  /**
   * Contains debug data produced by enricher and only used for debug purpose (e.g. demo).
   * @param enricherDebugData enricherDebugData or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setEnricherDebugData(RepositoryWebrefEnricherDebugData enricherDebugData) {
    this.enricherDebugData = enricherDebugData;
    return this;
  }

  /**
   * Additional metadata about the entity, that can be derived from the "raw data" (composite doc,
   * domain specific data...), or come from other sources. Despite its name, this field often
   * contains quite important information.
   * @return value or {@code null} for none
   */
  public RepositoryWebrefExtraMetadata getExtraData() {
    return extraData;
  }

  /**
   * Additional metadata about the entity, that can be derived from the "raw data" (composite doc,
   * domain specific data...), or come from other sources. Despite its name, this field often
   * contains quite important information.
   * @param extraData extraData or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setExtraData(RepositoryWebrefExtraMetadata extraData) {
    this.extraData = extraData;
    return this;
  }

  /**
   * Human ratings (e.g. ratings from EWOK). This is typically only populated in the evaluation
   * pipelines (e.g. P@5).
   * @return value or {@code null} for none
   */
  public RepositoryWebrefHumanRatings getHumanRatings() {
    return humanRatings;
  }

  /**
   * Human ratings (e.g. ratings from EWOK). This is typically only populated in the evaluation
   * pipelines (e.g. P@5).
   * @param humanRatings humanRatings or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setHumanRatings(RepositoryWebrefHumanRatings humanRatings) {
    this.humanRatings = humanRatings;
    return this;
  }

  /**
   * Contains all links (with scores) that Webref knows for this entity. Links are relationships
   * between entities. The data in this field is very important for the quality of the model.
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefGlobalLinkInfo> getLinkInfo() {
    return linkInfo;
  }

  /**
   * Contains all links (with scores) that Webref knows for this entity. Links are relationships
   * between entities. The data in this field is very important for the quality of the model.
   * @param linkInfo linkInfo or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setLinkInfo(java.util.List<RepositoryWebrefGlobalLinkInfo> linkInfo) {
    this.linkInfo = linkInfo;
    return this;
  }

  /**
   * Contains all names (with scores) that Webref knows for this entity. The data in this field is
   * very important for the quality of the model.
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefGlobalNameInfo> getNameInfo() {
    return nameInfo;
  }

  /**
   * Contains all names (with scores) that Webref knows for this entity. The data in this field is
   * very important for the quality of the model.
   * @param nameInfo nameInfo or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setNameInfo(java.util.List<RepositoryWebrefGlobalNameInfo> nameInfo) {
    this.nameInfo = nameInfo;
    return this;
  }

  /**
   * Contains names and names metadata used by Refcon.
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefRefconRefconNameInfo> getRefconNameInfo() {
    return refconNameInfo;
  }

  /**
   * Contains names and names metadata used by Refcon.
   * @param refconNameInfo refconNameInfo or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setRefconNameInfo(java.util.List<RepositoryWebrefRefconRefconNameInfo> refconNameInfo) {
    this.refconNameInfo = refconNameInfo;
    return this;
  }

  /**
   * An entity can have metadata from various data sources. Generally speaking all sources will be /
   * should be reconciled into a single KG Topic entry. However, in some cases we pull in additional
   * chunks of metadata from these sources; these are stored in this field. For example a local
   * business could have a KG entry (topic proto), wikipedia entry (WikiJoin) and a MapFacts entry
   * (Feature proto).
   * @return value or {@code null} for none
   */
  public java.util.List<RepositoryWebrefDomainSpecificRepresentation> getRepresentation() {
    return representation;
  }

  /**
   * An entity can have metadata from various data sources. Generally speaking all sources will be /
   * should be reconciled into a single KG Topic entry. However, in some cases we pull in additional
   * chunks of metadata from these sources; these are stored in this field. For example a local
   * business could have a KG entry (topic proto), wikipedia entry (WikiJoin) and a MapFacts entry
   * (Feature proto).
   * @param representation representation or {@code null} for none
   */
  public RepositoryWebrefEntityJoin setRepresentation(java.util.List<RepositoryWebrefDomainSpecificRepresentation> representation) {
    this.representation = representation;
    return this;
  }

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

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

}
