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

/**
 * If you add new fields to this message, do not use any tag value less than the "Next free tag"
 * below. The lower tag values might be missing in this file, but they were used in past for some
 * field, so cannot be used again. Next free tag: 44
 *
 * <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 CountryCountryAttachment extends com.google.api.client.json.GenericJson {

  /**
   * Store weighted click distribution for page level country-id classification.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CountryClickDistribution clickDistribution;

  /**
   * Is true if the country attachment was computed through the UGC pipeline.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean countryidFromUgc;

  /**
   * A non critical field to store debug info for a country attachment. Used in experiments and for
   * debugging.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String debug;

  /**
   * Set to the signal source URLs when merging country signals in Alexandria during sitemoves.
   * Essentially if sites A and B move to C, and we merge A and B's signal to C, in the
   * countryattachment signal C will have URL A and B as source_url. Only used for debugging and it
   * doesn't show up in docjoins.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> debugSourceUrl;

  /**
   * Specifies the origin of `geo_locations`. Right now, it can either come from deprecated Docloc
   * system or the new Brainloc system when Docloc doesn't have sufficient evidence.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String documentLocationSource;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean existNextLevel;

  /**
   * Booleans to keep track of where the country-id of the page came from. These are used for
   * debugging and/or unittests, and cleared in production.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromLanguageFallback;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromRestricts;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromSgDomains;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromTld;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromUgc;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromUrlPattern;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean fromWmx;

  /**
   * New MetroID: Now called GeoLocations since the locations could be sublocalities, cities or
   * states. GeoLocations are always more fine grained than country. TODO (jayeshv): Once new
   * MetroID/GeoLocations is launched everywhere, deleted old MetroID related fields.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CountryGeoLocations geoLocations;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean global;

  /**
   * Set to true if the local_countries field can be used for country restricts as well.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isValidForCountryRestrict;

  /**
   * two-letter(lower-case) countrycode, e.g. us countries that is local to
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> localCountries;

  /**
   * Fields that actually store the country id in docjoins. The format of this data is defined in
   * //i18n/identifiers/stableinternalregionconverter.cc. Converter defined there can be used to
   * convert it to RegionCode format.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> localCountryCodes;

  /**
   * Metro locations: list of NavBoost feature V2 associated with a doc, along with the enclosing
   * province. Metro locations with new tags.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<CountryMetroNBFeature> metroIdList;

  /**
   * Metro level data. metro_location_id stores geotokens for metro restricts.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> metroLocationId;

  /**
   * Metro navboost: list of (NavBoost feature V2, navboost float) pairs.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<CountryMetroNBFeature> metroNavboost;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<CountryProvinceGeotoken> provinceGeotokenList;

  /**
   * two-letter(lower-case) countrycode, e.g. us countries that is related to, but not local to
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> relatedCountries;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> relatedCountryCodes;

  /**
   * List of two-letter(lower-case) countrycodes(e.g. us) valid for restricts. Typically cloned out
   * of local_countries if is_valid_for_country_restrict is set to true.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> restrictCountries;

  /**
   * [Experimental]: Top salient countries for a doc. If a country can not be found on this field it
   * can be considered that this doc is not relevant to it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<CountrySalientCountry> salientCountries;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualitySalientCountriesSalientCountrySet salientCountrySet;

  /**
   * Domain name of keys in filtering metro reducer class, used only by the intermediate mapreduces
   * to produce filtered data.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String sitename;

  /**
   * Super global pages get lesser demotion than global pages. A document can only be either global
   * or super_global but not both.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean superGlobal;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer urlPatternBasedCountry;

  /**
   * Language and country extracted using the URL pattern map.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer urlPatternBasedLanguage;

  /**
   * This is used to store the visible country id computed from logs data
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String userVisibleCountryFromLogs;

  /**
   * This is the country id we show to users on the result page. This is kept different from country
   * demotion country id because we dont want to expose our backoff and url based detection
   * algorithm - also we want to be ultra conservative in showing this.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer userVisibleLocalCountry;

  /**
   * If result is global, store weight above ideal, as a confidence signal. Used in query localness,
   * cleared in production CountryAttachment.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double weightAboveIdealForLocalness;

  /**
   * Country specified for a web-site through webmaster console.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String wmxCountry;

  /**
   * Store weighted click distribution for page level country-id classification.
   * @return value or {@code null} for none
   */
  public CountryClickDistribution getClickDistribution() {
    return clickDistribution;
  }

  /**
   * Store weighted click distribution for page level country-id classification.
   * @param clickDistribution clickDistribution or {@code null} for none
   */
  public CountryCountryAttachment setClickDistribution(CountryClickDistribution clickDistribution) {
    this.clickDistribution = clickDistribution;
    return this;
  }

  /**
   * Is true if the country attachment was computed through the UGC pipeline.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getCountryidFromUgc() {
    return countryidFromUgc;
  }

  /**
   * Is true if the country attachment was computed through the UGC pipeline.
   * @param countryidFromUgc countryidFromUgc or {@code null} for none
   */
  public CountryCountryAttachment setCountryidFromUgc(java.lang.Boolean countryidFromUgc) {
    this.countryidFromUgc = countryidFromUgc;
    return this;
  }

  /**
   * A non critical field to store debug info for a country attachment. Used in experiments and for
   * debugging.
   * @return value or {@code null} for none
   */
  public java.lang.String getDebug() {
    return debug;
  }

  /**
   * A non critical field to store debug info for a country attachment. Used in experiments and for
   * debugging.
   * @param debug debug or {@code null} for none
   */
  public CountryCountryAttachment setDebug(java.lang.String debug) {
    this.debug = debug;
    return this;
  }

  /**
   * Set to the signal source URLs when merging country signals in Alexandria during sitemoves.
   * Essentially if sites A and B move to C, and we merge A and B's signal to C, in the
   * countryattachment signal C will have URL A and B as source_url. Only used for debugging and it
   * doesn't show up in docjoins.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getDebugSourceUrl() {
    return debugSourceUrl;
  }

  /**
   * Set to the signal source URLs when merging country signals in Alexandria during sitemoves.
   * Essentially if sites A and B move to C, and we merge A and B's signal to C, in the
   * countryattachment signal C will have URL A and B as source_url. Only used for debugging and it
   * doesn't show up in docjoins.
   * @param debugSourceUrl debugSourceUrl or {@code null} for none
   */
  public CountryCountryAttachment setDebugSourceUrl(java.util.List<java.lang.String> debugSourceUrl) {
    this.debugSourceUrl = debugSourceUrl;
    return this;
  }

  /**
   * Specifies the origin of `geo_locations`. Right now, it can either come from deprecated Docloc
   * system or the new Brainloc system when Docloc doesn't have sufficient evidence.
   * @return value or {@code null} for none
   */
  public java.lang.String getDocumentLocationSource() {
    return documentLocationSource;
  }

  /**
   * Specifies the origin of `geo_locations`. Right now, it can either come from deprecated Docloc
   * system or the new Brainloc system when Docloc doesn't have sufficient evidence.
   * @param documentLocationSource documentLocationSource or {@code null} for none
   */
  public CountryCountryAttachment setDocumentLocationSource(java.lang.String documentLocationSource) {
    this.documentLocationSource = documentLocationSource;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getExistNextLevel() {
    return existNextLevel;
  }

  /**
   * @param existNextLevel existNextLevel or {@code null} for none
   */
  public CountryCountryAttachment setExistNextLevel(java.lang.Boolean existNextLevel) {
    this.existNextLevel = existNextLevel;
    return this;
  }

  /**
   * Booleans to keep track of where the country-id of the page came from. These are used for
   * debugging and/or unittests, and cleared in production.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromLanguageFallback() {
    return fromLanguageFallback;
  }

  /**
   * Booleans to keep track of where the country-id of the page came from. These are used for
   * debugging and/or unittests, and cleared in production.
   * @param fromLanguageFallback fromLanguageFallback or {@code null} for none
   */
  public CountryCountryAttachment setFromLanguageFallback(java.lang.Boolean fromLanguageFallback) {
    this.fromLanguageFallback = fromLanguageFallback;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromRestricts() {
    return fromRestricts;
  }

  /**
   * @param fromRestricts fromRestricts or {@code null} for none
   */
  public CountryCountryAttachment setFromRestricts(java.lang.Boolean fromRestricts) {
    this.fromRestricts = fromRestricts;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromSgDomains() {
    return fromSgDomains;
  }

  /**
   * @param fromSgDomains fromSgDomains or {@code null} for none
   */
  public CountryCountryAttachment setFromSgDomains(java.lang.Boolean fromSgDomains) {
    this.fromSgDomains = fromSgDomains;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromTld() {
    return fromTld;
  }

  /**
   * @param fromTld fromTld or {@code null} for none
   */
  public CountryCountryAttachment setFromTld(java.lang.Boolean fromTld) {
    this.fromTld = fromTld;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromUgc() {
    return fromUgc;
  }

  /**
   * @param fromUgc fromUgc or {@code null} for none
   */
  public CountryCountryAttachment setFromUgc(java.lang.Boolean fromUgc) {
    this.fromUgc = fromUgc;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromUrlPattern() {
    return fromUrlPattern;
  }

  /**
   * @param fromUrlPattern fromUrlPattern or {@code null} for none
   */
  public CountryCountryAttachment setFromUrlPattern(java.lang.Boolean fromUrlPattern) {
    this.fromUrlPattern = fromUrlPattern;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFromWmx() {
    return fromWmx;
  }

  /**
   * @param fromWmx fromWmx or {@code null} for none
   */
  public CountryCountryAttachment setFromWmx(java.lang.Boolean fromWmx) {
    this.fromWmx = fromWmx;
    return this;
  }

  /**
   * New MetroID: Now called GeoLocations since the locations could be sublocalities, cities or
   * states. GeoLocations are always more fine grained than country. TODO (jayeshv): Once new
   * MetroID/GeoLocations is launched everywhere, deleted old MetroID related fields.
   * @return value or {@code null} for none
   */
  public CountryGeoLocations getGeoLocations() {
    return geoLocations;
  }

  /**
   * New MetroID: Now called GeoLocations since the locations could be sublocalities, cities or
   * states. GeoLocations are always more fine grained than country. TODO (jayeshv): Once new
   * MetroID/GeoLocations is launched everywhere, deleted old MetroID related fields.
   * @param geoLocations geoLocations or {@code null} for none
   */
  public CountryCountryAttachment setGeoLocations(CountryGeoLocations geoLocations) {
    this.geoLocations = geoLocations;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getGlobal() {
    return global;
  }

  /**
   * @param global global or {@code null} for none
   */
  public CountryCountryAttachment setGlobal(java.lang.Boolean global) {
    this.global = global;
    return this;
  }

  /**
   * Set to true if the local_countries field can be used for country restricts as well.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsValidForCountryRestrict() {
    return isValidForCountryRestrict;
  }

  /**
   * Set to true if the local_countries field can be used for country restricts as well.
   * @param isValidForCountryRestrict isValidForCountryRestrict or {@code null} for none
   */
  public CountryCountryAttachment setIsValidForCountryRestrict(java.lang.Boolean isValidForCountryRestrict) {
    this.isValidForCountryRestrict = isValidForCountryRestrict;
    return this;
  }

  /**
   * two-letter(lower-case) countrycode, e.g. us countries that is local to
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getLocalCountries() {
    return localCountries;
  }

  /**
   * two-letter(lower-case) countrycode, e.g. us countries that is local to
   * @param localCountries localCountries or {@code null} for none
   */
  public CountryCountryAttachment setLocalCountries(java.util.List<java.lang.String> localCountries) {
    this.localCountries = localCountries;
    return this;
  }

  /**
   * Fields that actually store the country id in docjoins. The format of this data is defined in
   * //i18n/identifiers/stableinternalregionconverter.cc. Converter defined there can be used to
   * convert it to RegionCode format.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getLocalCountryCodes() {
    return localCountryCodes;
  }

  /**
   * Fields that actually store the country id in docjoins. The format of this data is defined in
   * //i18n/identifiers/stableinternalregionconverter.cc. Converter defined there can be used to
   * convert it to RegionCode format.
   * @param localCountryCodes localCountryCodes or {@code null} for none
   */
  public CountryCountryAttachment setLocalCountryCodes(java.util.List<java.lang.Integer> localCountryCodes) {
    this.localCountryCodes = localCountryCodes;
    return this;
  }

  /**
   * Metro locations: list of NavBoost feature V2 associated with a doc, along with the enclosing
   * province. Metro locations with new tags.
   * @return value or {@code null} for none
   */
  public java.util.List<CountryMetroNBFeature> getMetroIdList() {
    return metroIdList;
  }

  /**
   * Metro locations: list of NavBoost feature V2 associated with a doc, along with the enclosing
   * province. Metro locations with new tags.
   * @param metroIdList metroIdList or {@code null} for none
   */
  public CountryCountryAttachment setMetroIdList(java.util.List<CountryMetroNBFeature> metroIdList) {
    this.metroIdList = metroIdList;
    return this;
  }

  /**
   * Metro level data. metro_location_id stores geotokens for metro restricts.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getMetroLocationId() {
    return metroLocationId;
  }

  /**
   * Metro level data. metro_location_id stores geotokens for metro restricts.
   * @param metroLocationId metroLocationId or {@code null} for none
   */
  public CountryCountryAttachment setMetroLocationId(java.util.List<java.lang.String> metroLocationId) {
    this.metroLocationId = metroLocationId;
    return this;
  }

  /**
   * Metro navboost: list of (NavBoost feature V2, navboost float) pairs.
   * @return value or {@code null} for none
   */
  public java.util.List<CountryMetroNBFeature> getMetroNavboost() {
    return metroNavboost;
  }

  /**
   * Metro navboost: list of (NavBoost feature V2, navboost float) pairs.
   * @param metroNavboost metroNavboost or {@code null} for none
   */
  public CountryCountryAttachment setMetroNavboost(java.util.List<CountryMetroNBFeature> metroNavboost) {
    this.metroNavboost = metroNavboost;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<CountryProvinceGeotoken> getProvinceGeotokenList() {
    return provinceGeotokenList;
  }

  /**
   * @param provinceGeotokenList provinceGeotokenList or {@code null} for none
   */
  public CountryCountryAttachment setProvinceGeotokenList(java.util.List<CountryProvinceGeotoken> provinceGeotokenList) {
    this.provinceGeotokenList = provinceGeotokenList;
    return this;
  }

  /**
   * two-letter(lower-case) countrycode, e.g. us countries that is related to, but not local to
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getRelatedCountries() {
    return relatedCountries;
  }

  /**
   * two-letter(lower-case) countrycode, e.g. us countries that is related to, but not local to
   * @param relatedCountries relatedCountries or {@code null} for none
   */
  public CountryCountryAttachment setRelatedCountries(java.util.List<java.lang.String> relatedCountries) {
    this.relatedCountries = relatedCountries;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getRelatedCountryCodes() {
    return relatedCountryCodes;
  }

  /**
   * @param relatedCountryCodes relatedCountryCodes or {@code null} for none
   */
  public CountryCountryAttachment setRelatedCountryCodes(java.util.List<java.lang.Integer> relatedCountryCodes) {
    this.relatedCountryCodes = relatedCountryCodes;
    return this;
  }

  /**
   * List of two-letter(lower-case) countrycodes(e.g. us) valid for restricts. Typically cloned out
   * of local_countries if is_valid_for_country_restrict is set to true.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getRestrictCountries() {
    return restrictCountries;
  }

  /**
   * List of two-letter(lower-case) countrycodes(e.g. us) valid for restricts. Typically cloned out
   * of local_countries if is_valid_for_country_restrict is set to true.
   * @param restrictCountries restrictCountries or {@code null} for none
   */
  public CountryCountryAttachment setRestrictCountries(java.util.List<java.lang.String> restrictCountries) {
    this.restrictCountries = restrictCountries;
    return this;
  }

  /**
   * [Experimental]: Top salient countries for a doc. If a country can not be found on this field it
   * can be considered that this doc is not relevant to it.
   * @return value or {@code null} for none
   */
  public java.util.List<CountrySalientCountry> getSalientCountries() {
    return salientCountries;
  }

  /**
   * [Experimental]: Top salient countries for a doc. If a country can not be found on this field it
   * can be considered that this doc is not relevant to it.
   * @param salientCountries salientCountries or {@code null} for none
   */
  public CountryCountryAttachment setSalientCountries(java.util.List<CountrySalientCountry> salientCountries) {
    this.salientCountries = salientCountries;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public QualitySalientCountriesSalientCountrySet getSalientCountrySet() {
    return salientCountrySet;
  }

  /**
   * @param salientCountrySet salientCountrySet or {@code null} for none
   */
  public CountryCountryAttachment setSalientCountrySet(QualitySalientCountriesSalientCountrySet salientCountrySet) {
    this.salientCountrySet = salientCountrySet;
    return this;
  }

  /**
   * Domain name of keys in filtering metro reducer class, used only by the intermediate mapreduces
   * to produce filtered data.
   * @return value or {@code null} for none
   */
  public java.lang.String getSitename() {
    return sitename;
  }

  /**
   * Domain name of keys in filtering metro reducer class, used only by the intermediate mapreduces
   * to produce filtered data.
   * @param sitename sitename or {@code null} for none
   */
  public CountryCountryAttachment setSitename(java.lang.String sitename) {
    this.sitename = sitename;
    return this;
  }

  /**
   * Super global pages get lesser demotion than global pages. A document can only be either global
   * or super_global but not both.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSuperGlobal() {
    return superGlobal;
  }

  /**
   * Super global pages get lesser demotion than global pages. A document can only be either global
   * or super_global but not both.
   * @param superGlobal superGlobal or {@code null} for none
   */
  public CountryCountryAttachment setSuperGlobal(java.lang.Boolean superGlobal) {
    this.superGlobal = superGlobal;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getUrlPatternBasedCountry() {
    return urlPatternBasedCountry;
  }

  /**
   * @param urlPatternBasedCountry urlPatternBasedCountry or {@code null} for none
   */
  public CountryCountryAttachment setUrlPatternBasedCountry(java.lang.Integer urlPatternBasedCountry) {
    this.urlPatternBasedCountry = urlPatternBasedCountry;
    return this;
  }

  /**
   * Language and country extracted using the URL pattern map.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getUrlPatternBasedLanguage() {
    return urlPatternBasedLanguage;
  }

  /**
   * Language and country extracted using the URL pattern map.
   * @param urlPatternBasedLanguage urlPatternBasedLanguage or {@code null} for none
   */
  public CountryCountryAttachment setUrlPatternBasedLanguage(java.lang.Integer urlPatternBasedLanguage) {
    this.urlPatternBasedLanguage = urlPatternBasedLanguage;
    return this;
  }

  /**
   * This is used to store the visible country id computed from logs data
   * @return value or {@code null} for none
   */
  public java.lang.String getUserVisibleCountryFromLogs() {
    return userVisibleCountryFromLogs;
  }

  /**
   * This is used to store the visible country id computed from logs data
   * @param userVisibleCountryFromLogs userVisibleCountryFromLogs or {@code null} for none
   */
  public CountryCountryAttachment setUserVisibleCountryFromLogs(java.lang.String userVisibleCountryFromLogs) {
    this.userVisibleCountryFromLogs = userVisibleCountryFromLogs;
    return this;
  }

  /**
   * This is the country id we show to users on the result page. This is kept different from country
   * demotion country id because we dont want to expose our backoff and url based detection
   * algorithm - also we want to be ultra conservative in showing this.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getUserVisibleLocalCountry() {
    return userVisibleLocalCountry;
  }

  /**
   * This is the country id we show to users on the result page. This is kept different from country
   * demotion country id because we dont want to expose our backoff and url based detection
   * algorithm - also we want to be ultra conservative in showing this.
   * @param userVisibleLocalCountry userVisibleLocalCountry or {@code null} for none
   */
  public CountryCountryAttachment setUserVisibleLocalCountry(java.lang.Integer userVisibleLocalCountry) {
    this.userVisibleLocalCountry = userVisibleLocalCountry;
    return this;
  }

  /**
   * If result is global, store weight above ideal, as a confidence signal. Used in query localness,
   * cleared in production CountryAttachment.
   * @return value or {@code null} for none
   */
  public java.lang.Double getWeightAboveIdealForLocalness() {
    return weightAboveIdealForLocalness;
  }

  /**
   * If result is global, store weight above ideal, as a confidence signal. Used in query localness,
   * cleared in production CountryAttachment.
   * @param weightAboveIdealForLocalness weightAboveIdealForLocalness or {@code null} for none
   */
  public CountryCountryAttachment setWeightAboveIdealForLocalness(java.lang.Double weightAboveIdealForLocalness) {
    this.weightAboveIdealForLocalness = weightAboveIdealForLocalness;
    return this;
  }

  /**
   * Country specified for a web-site through webmaster console.
   * @return value or {@code null} for none
   */
  public java.lang.String getWmxCountry() {
    return wmxCountry;
  }

  /**
   * Country specified for a web-site through webmaster console.
   * @param wmxCountry wmxCountry or {@code null} for none
   */
  public CountryCountryAttachment setWmxCountry(java.lang.String wmxCountry) {
    this.wmxCountry = wmxCountry;
    return this;
  }

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

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

}
