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

/**
 * Metadata about a name. There are two metadata protos, whose content is meant to be similar but
 * their usage different: NameEntityMetadata for readability and ConceptNameMetadata for size /
 * decoding speed. NameEntityMetadata is propagated to GlobalNameInfo and EntityJoin tables, while
 * ConceptNameMetadata is propagated from EntityJoins to the name matching tables and later to the
 * Webref's/QRef's output. To add a new metadata field in the Names pipeline, and propagate it to
 * EntityJoins and Names matching tables, it is necessary to: (1) Add the field to
 * NameEntityMetadata, and a corresponding data representation in ConceptNameMetadata. (2) Populate
 * the field in NameVariantSignals.name_metadata, from any source. This can be done in a
 * corresponding NameProcessor. (3) Update the library name-metadata.h/cc to make sure that the
 * metadata field is: a) merged correctly when merging two NameSignals; and b) transformed to the
 * corresponding field in ConceptNameMetadata proto. Next available tag: 22.
 *
 * <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 RepositoryWebrefPreprocessingNameEntityMetadata extends com.google.api.client.json.GenericJson {

  /**
   * There is a limit of entities per name for which we can keep name signals and score. This flag
   * is set to true for names that by-passed per-name-scoring, as there were too many entities for
   * the name.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isBypassedName;

  /**
   * This name is a generated compound name to pass primary pruning.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isCompoundName;

  /**
   * Indicates special compound retrieval keys, like "Compound $mid1 $mid2"
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isCompoundRetrievalKey;

  /**
   * This is set to true if the entity corresponds to a dictionary term.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isDictionaryTerm;

  /**
   * If true, this name is an event retrieval key.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isEventRetrievalKey;

  /**
   * This name is generated from other names.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isGeneratedName;

  /**
   * This name is a generated street name.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isGeneratedStreetname;

  /**
   * This name is added by name propagation in hierarchy.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isHierarchyPropagated;

  /**
   * This name is an ISBN.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isIsbn;

  /**
   * This name comes from recording lyrics content.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isLyricsContent;

  /**
   * This name is a phone number.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isPhoneNumber;

  /**
   * This name is used for refcon.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isRefconName;

  /**
   * This name is a reference name, only for internal usage, this name should not go into matching
   * table without support of other signals.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isReferenceName;

  /**
   * This name is the URL of a reference page.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isRefpageUrl;

  /**
   * This name is generated from a reverse unique property of the entity.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isReverseUniquePropertyName;

  /**
   * This name is a strong identifier for this entity.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isStrongIdentifier;

  /**
   * Set if the name is coming from synonyms.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isSynonymOrFuzzyMatch;

  /**
   * If true, this name is a trusted name if it is in ALLCAPS.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isTrustedAllcapsName;

  /**
   * If true, do not do tokenization when compute fprint hash for this name.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isUnnormalizedName;

  /**
   * This name is clearly not generated(aka. at least one source of this name is not generated).
   * This field is added for simplifying generated name tag while merging. Do not use this metadata
   * directly.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean notGeneratedName;

  /**
   * Original versions of the name (before normalization). Used as query for the entity by Explicit
   * Entity Search.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private RepositoryWebrefPreprocessingOriginalNames originalNames;

  /**
   * Whether or not to suppress tokenization on this name.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean suppressTokenization;

  /**
   * There is a limit of entities per name for which we can keep name signals and score. This flag
   * is set to true for names that by-passed per-name-scoring, as there were too many entities for
   * the name.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsBypassedName() {
    return isBypassedName;
  }

  /**
   * There is a limit of entities per name for which we can keep name signals and score. This flag
   * is set to true for names that by-passed per-name-scoring, as there were too many entities for
   * the name.
   * @param isBypassedName isBypassedName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsBypassedName(java.lang.Boolean isBypassedName) {
    this.isBypassedName = isBypassedName;
    return this;
  }

  /**
   * This name is a generated compound name to pass primary pruning.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsCompoundName() {
    return isCompoundName;
  }

  /**
   * This name is a generated compound name to pass primary pruning.
   * @param isCompoundName isCompoundName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsCompoundName(java.lang.Boolean isCompoundName) {
    this.isCompoundName = isCompoundName;
    return this;
  }

  /**
   * Indicates special compound retrieval keys, like "Compound $mid1 $mid2"
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsCompoundRetrievalKey() {
    return isCompoundRetrievalKey;
  }

  /**
   * Indicates special compound retrieval keys, like "Compound $mid1 $mid2"
   * @param isCompoundRetrievalKey isCompoundRetrievalKey or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsCompoundRetrievalKey(java.lang.Boolean isCompoundRetrievalKey) {
    this.isCompoundRetrievalKey = isCompoundRetrievalKey;
    return this;
  }

  /**
   * This is set to true if the entity corresponds to a dictionary term.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsDictionaryTerm() {
    return isDictionaryTerm;
  }

  /**
   * This is set to true if the entity corresponds to a dictionary term.
   * @param isDictionaryTerm isDictionaryTerm or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsDictionaryTerm(java.lang.Boolean isDictionaryTerm) {
    this.isDictionaryTerm = isDictionaryTerm;
    return this;
  }

  /**
   * If true, this name is an event retrieval key.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsEventRetrievalKey() {
    return isEventRetrievalKey;
  }

  /**
   * If true, this name is an event retrieval key.
   * @param isEventRetrievalKey isEventRetrievalKey or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsEventRetrievalKey(java.lang.Boolean isEventRetrievalKey) {
    this.isEventRetrievalKey = isEventRetrievalKey;
    return this;
  }

  /**
   * This name is generated from other names.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsGeneratedName() {
    return isGeneratedName;
  }

  /**
   * This name is generated from other names.
   * @param isGeneratedName isGeneratedName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsGeneratedName(java.lang.Boolean isGeneratedName) {
    this.isGeneratedName = isGeneratedName;
    return this;
  }

  /**
   * This name is a generated street name.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsGeneratedStreetname() {
    return isGeneratedStreetname;
  }

  /**
   * This name is a generated street name.
   * @param isGeneratedStreetname isGeneratedStreetname or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsGeneratedStreetname(java.lang.Boolean isGeneratedStreetname) {
    this.isGeneratedStreetname = isGeneratedStreetname;
    return this;
  }

  /**
   * This name is added by name propagation in hierarchy.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsHierarchyPropagated() {
    return isHierarchyPropagated;
  }

  /**
   * This name is added by name propagation in hierarchy.
   * @param isHierarchyPropagated isHierarchyPropagated or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsHierarchyPropagated(java.lang.Boolean isHierarchyPropagated) {
    this.isHierarchyPropagated = isHierarchyPropagated;
    return this;
  }

  /**
   * This name is an ISBN.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsIsbn() {
    return isIsbn;
  }

  /**
   * This name is an ISBN.
   * @param isIsbn isIsbn or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsIsbn(java.lang.Boolean isIsbn) {
    this.isIsbn = isIsbn;
    return this;
  }

  /**
   * This name comes from recording lyrics content.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsLyricsContent() {
    return isLyricsContent;
  }

  /**
   * This name comes from recording lyrics content.
   * @param isLyricsContent isLyricsContent or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsLyricsContent(java.lang.Boolean isLyricsContent) {
    this.isLyricsContent = isLyricsContent;
    return this;
  }

  /**
   * This name is a phone number.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsPhoneNumber() {
    return isPhoneNumber;
  }

  /**
   * This name is a phone number.
   * @param isPhoneNumber isPhoneNumber or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsPhoneNumber(java.lang.Boolean isPhoneNumber) {
    this.isPhoneNumber = isPhoneNumber;
    return this;
  }

  /**
   * This name is used for refcon.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsRefconName() {
    return isRefconName;
  }

  /**
   * This name is used for refcon.
   * @param isRefconName isRefconName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsRefconName(java.lang.Boolean isRefconName) {
    this.isRefconName = isRefconName;
    return this;
  }

  /**
   * This name is a reference name, only for internal usage, this name should not go into matching
   * table without support of other signals.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsReferenceName() {
    return isReferenceName;
  }

  /**
   * This name is a reference name, only for internal usage, this name should not go into matching
   * table without support of other signals.
   * @param isReferenceName isReferenceName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsReferenceName(java.lang.Boolean isReferenceName) {
    this.isReferenceName = isReferenceName;
    return this;
  }

  /**
   * This name is the URL of a reference page.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsRefpageUrl() {
    return isRefpageUrl;
  }

  /**
   * This name is the URL of a reference page.
   * @param isRefpageUrl isRefpageUrl or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsRefpageUrl(java.lang.Boolean isRefpageUrl) {
    this.isRefpageUrl = isRefpageUrl;
    return this;
  }

  /**
   * This name is generated from a reverse unique property of the entity.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsReverseUniquePropertyName() {
    return isReverseUniquePropertyName;
  }

  /**
   * This name is generated from a reverse unique property of the entity.
   * @param isReverseUniquePropertyName isReverseUniquePropertyName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsReverseUniquePropertyName(java.lang.Boolean isReverseUniquePropertyName) {
    this.isReverseUniquePropertyName = isReverseUniquePropertyName;
    return this;
  }

  /**
   * This name is a strong identifier for this entity.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsStrongIdentifier() {
    return isStrongIdentifier;
  }

  /**
   * This name is a strong identifier for this entity.
   * @param isStrongIdentifier isStrongIdentifier or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsStrongIdentifier(java.lang.Boolean isStrongIdentifier) {
    this.isStrongIdentifier = isStrongIdentifier;
    return this;
  }

  /**
   * Set if the name is coming from synonyms.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsSynonymOrFuzzyMatch() {
    return isSynonymOrFuzzyMatch;
  }

  /**
   * Set if the name is coming from synonyms.
   * @param isSynonymOrFuzzyMatch isSynonymOrFuzzyMatch or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsSynonymOrFuzzyMatch(java.lang.Boolean isSynonymOrFuzzyMatch) {
    this.isSynonymOrFuzzyMatch = isSynonymOrFuzzyMatch;
    return this;
  }

  /**
   * If true, this name is a trusted name if it is in ALLCAPS.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsTrustedAllcapsName() {
    return isTrustedAllcapsName;
  }

  /**
   * If true, this name is a trusted name if it is in ALLCAPS.
   * @param isTrustedAllcapsName isTrustedAllcapsName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsTrustedAllcapsName(java.lang.Boolean isTrustedAllcapsName) {
    this.isTrustedAllcapsName = isTrustedAllcapsName;
    return this;
  }

  /**
   * If true, do not do tokenization when compute fprint hash for this name.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsUnnormalizedName() {
    return isUnnormalizedName;
  }

  /**
   * If true, do not do tokenization when compute fprint hash for this name.
   * @param isUnnormalizedName isUnnormalizedName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setIsUnnormalizedName(java.lang.Boolean isUnnormalizedName) {
    this.isUnnormalizedName = isUnnormalizedName;
    return this;
  }

  /**
   * This name is clearly not generated(aka. at least one source of this name is not generated).
   * This field is added for simplifying generated name tag while merging. Do not use this metadata
   * directly.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getNotGeneratedName() {
    return notGeneratedName;
  }

  /**
   * This name is clearly not generated(aka. at least one source of this name is not generated).
   * This field is added for simplifying generated name tag while merging. Do not use this metadata
   * directly.
   * @param notGeneratedName notGeneratedName or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setNotGeneratedName(java.lang.Boolean notGeneratedName) {
    this.notGeneratedName = notGeneratedName;
    return this;
  }

  /**
   * Original versions of the name (before normalization). Used as query for the entity by Explicit
   * Entity Search.
   * @return value or {@code null} for none
   */
  public RepositoryWebrefPreprocessingOriginalNames getOriginalNames() {
    return originalNames;
  }

  /**
   * Original versions of the name (before normalization). Used as query for the entity by Explicit
   * Entity Search.
   * @param originalNames originalNames or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setOriginalNames(RepositoryWebrefPreprocessingOriginalNames originalNames) {
    this.originalNames = originalNames;
    return this;
  }

  /**
   * Whether or not to suppress tokenization on this name.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSuppressTokenization() {
    return suppressTokenization;
  }

  /**
   * Whether or not to suppress tokenization on this name.
   * @param suppressTokenization suppressTokenization or {@code null} for none
   */
  public RepositoryWebrefPreprocessingNameEntityMetadata setSuppressTokenization(java.lang.Boolean suppressTokenization) {
    this.suppressTokenization = suppressTokenization;
    return this;
  }

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

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

}
