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

/**
 * Model definition for ScienceCitation.
 *
 * <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 ScienceCitation extends com.google.api.client.json.GenericJson {

  /**
   * The source of abstract text that is chosen by science docid assigner.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractCitationSource")
  private java.lang.Integer abstractCitationSource;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractDisplay")
  private java.lang.String abstractDisplay;

  /**
   * Version of abstract field for display. Contains unsanitized XML/HTML.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractHtml")
  private java.lang.String abstractHtml;

  /**
   * Leftovers from AbstractHtml. These are usually unrecognized xml/html entities or xml/html tags
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractHtmlLeftOver")
  private java.lang.String abstractHtmlLeftOver;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractLanguage")
  private java.lang.String abstractLanguage;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractSource")
  private java.lang.String abstractSource;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractText")
  private java.lang.String abstractText;

  /**
   * The original (unnormalized) type of an abstract. AbstractDisplay holds a normalized type
   * deduced from things like tagnames, tag-attributes, keywords in documents or the placement of
   * the abstract in the document. This field is meant for the type of the abstract identified
   * explicitly by the source document. E.g., the value of the 'abstract-type' attribute from a tag
   * in XML ('primary abstract', 'summary', 'highlights' etc.).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AbstractTypeFromSource")
  private java.lang.String abstractTypeFromSource;

  /**
   * Fingerprint of the URL after applying crawl and aggregate rewrites. Different citations with
   * the same AlternateVersionID must have the same VersionID, but not necessarily vice versa.
   * Omitted when identical to the VersionID.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AlternateVersionID") @com.google.api.client.json.JsonString
  private java.math.BigInteger alternateVersionID;

  /**
   * All the anchor text (before, after, formal, etc) for this citation in the referring page.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Anchors")
  private java.util.List<ScienceCitationAnchor> anchors;

  /**
   * e.g. hep-ph
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ArxivSection")
  private java.lang.String arxivSection;

  /**
   * whether this citation had an "et al" in the author list
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AuthorListHasEtAl")
  private java.lang.Boolean authorListHasEtAl;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("AuthorMetatagLeftOver")
  private java.lang.String authorMetatagLeftOver;

  /**
   * Global document identifier - only available when building increments over a known base index.
   * This id is from the base index.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("BaseGlobalID") @com.google.api.client.json.JsonString
  private java.math.BigInteger baseGlobalID;

  /**
   * Set when building an incremental index. Whereas BaseGlobalID is the ID of the corresponding
   * base cluster, the local ID is the ID of an individual citation within that base cluster that
   * corresponds to this reparse.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("BaseLocalID") @com.google.api.client.json.JsonString
  private java.math.BigInteger baseLocalID;

  /**
   * one bit per author
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("BorrowedAuthors")
  private java.lang.Integer borrowedAuthors;

  /**
   * OR of FieldType
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("BorrowedFields")
  private java.lang.Integer borrowedFields;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Chapter")
  private java.lang.String chapter;

  /**
   * citation src: dblp/crossref/paper etc
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("CitationSource")
  private java.lang.Integer citationSource;

  /**
   * Seconds since the epoch, should be consistent with CitationSourceUrl.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("CitationSourceCrawlTimestamp") @com.google.api.client.json.JsonString
  private java.lang.Long citationSourceCrawlTimestamp;

  /**
   * url where record came from
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("CitationSourceUrl")
  private java.lang.String citationSourceUrl;

  /**
   * DEPRECATED: use CitationSource
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("CitationSrc")
  private java.lang.String citationSrc;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ClearedReason")
  private java.lang.String clearedReason;

  /**
   * Used for logging, recommendations, and sort-by-date. Contains the earliest discovery date of
   * the cluster, adjusted for earlier publication dates. Stored in Universal time scale (100 ns
   * ticks since 0001 AD) because Unix timestamp would lead to negative dates for pre-1970 docs.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ClusterDiscoveryDate") @com.google.api.client.json.JsonString
  private java.lang.Long clusterDiscoveryDate;

  /**
   * Identifier for conference series - issn-lite
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ConferenceId")
  private java.lang.String conferenceId;

  /**
   * 27 in the "27th conference on magical realism"
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ConferenceNumber")
  private java.lang.Integer conferenceNumber;

  /**
   * If a citation is merged from a crawled version and a metadata version, keep the normal docid fp
   * of the crawled version for clustering FP of normal docid of crawl version
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("CrawledDocid") @com.google.api.client.json.JsonString
  private java.math.BigInteger crawledDocid;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DEPRECATEDMetadataSourceFile")
  private java.lang.String dEPRECATEDMetadataSourceFile;

  /**
   * these fields moved to DownloadURL where they belong
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DEPRECATEDPublisherDisplayName")
  private java.lang.String dEPRECATEDPublisherDisplayName;

  /**
   * Digital Object Identifier
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DOI")
  private java.lang.String dOI;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DblpId")
  private java.lang.String dblpId;

  /**
   * Local document identifier - url fingerprint if we know the url, or fingerprint of all fields if
   * we don't. Different urls have different local docids.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DocumentID") @com.google.api.client.json.JsonString
  private java.math.BigInteger documentID;

  /**
   * Dspace uses handle.net handles
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("DspaceID")
  private java.lang.String dspaceID;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Edition")
  private java.lang.String edition;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Editor")
  private java.util.List<java.lang.String> editor;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("FileCreationDay")
  private java.lang.Integer fileCreationDay;

  /**
   * zero-indexed field
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("FileCreationMonth")
  private java.lang.Integer fileCreationMonth;

  /**
   * date of creation of the pdf/doc
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("FileCreationYear")
  private java.lang.Integer fileCreationYear;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ISBN")
  private java.lang.String iSBN;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ISBNVariant")
  private java.util.List<java.lang.String> iSBNVariant;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ISSN")
  private java.lang.String iSSN;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ISSNVariant")
  private java.util.List<java.lang.String> iSSNVariant;

  /**
   * Is this article expected to have been indexed in the incremental?
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("IncrementalExpected")
  private java.lang.Boolean incrementalExpected;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("JOI")
  private java.lang.String jOI;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Keywords")
  private java.util.List<java.lang.String> keywords;

  /**
   * library of congress call number
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("LCCN")
  private java.lang.String lCCN;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Language")
  private java.lang.String language;

  /**
   * The ScienceCitation is how metadata passes through the scholar system. For legal, we use the
   * normal ScienceCitation for the metadata/citation of legal journals. For court/government
   * documents (like opinions or statues), we wrap it in the following embedded message
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("LegalCitation")
  private LegalCitation legalCitation;

  /**
   * If this is a target reference, the level of discussion of this reference.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("LevelOfDiscussion")
  private java.lang.Integer levelOfDiscussion;

  /**
   * random string data - unparsed
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Note")
  private java.lang.String note;

  /**
   * for display in gws
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumBackwardLinks")
  private java.lang.Integer numBackwardLinks;

  /**
   * hack for legal rollout
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumBackwardLinksFromLegal")
  private java.lang.Integer numBackwardLinksFromLegal;

  /**
   * numcited in WoS
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumBackwardLinksInWoS")
  private java.lang.Integer numBackwardLinksInWoS;

  /**
   * for display in gws
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumForwardLinks")
  private java.lang.Integer numForwardLinks;

  /**
   * good embedded refs
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumGoodEmbeddedRefs")
  private java.lang.Integer numGoodEmbeddedRefs;

  /**
   * If set, then we host this many pages of this citation's content. Note that this field may be
   * set to 0, in which case we should be hosting this content but have failed. DEPRECATED, moved to
   * DownloadURL
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumHostedPages")
  private java.lang.Integer numHostedPages;

  /**
   * for display in gws
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumKeyQuotes")
  private java.lang.Integer numKeyQuotes;

  /**
   * for display in gws
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumRelated")
  private java.lang.Integer numRelated;

  /**
   * for experiments
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumRelated2")
  private java.lang.Integer numRelated2;

  /**
   * for experiments
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumRelated3")
  private java.lang.Integer numRelated3;

  /**
   * refs in marked section
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumSectionRefs")
  private java.lang.Integer numSectionRefs;

  /**
   * for display in gws
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("NumVersions")
  private java.lang.Integer numVersions;

  /**
   * can be 1-3
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Number")
  private java.lang.String number;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("OnlineDay")
  private java.lang.Integer onlineDay;

  /**
   * OnlineMonth is a zero-indexed field (0 is January).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("OnlineMonth")
  private java.lang.Integer onlineMonth;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("OnlineYear")
  private java.lang.Integer onlineYear;

  /**
   * eg ERIC doc number or TR number
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("OtherID")
  private java.lang.String otherID;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PMCID")
  private java.lang.String pMCID;

  /**
   * Pubmed ID
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PMID")
  private java.lang.String pMID;

  /**
   * Using string to handle all kinds of page specifications. Internal structure is not really
   * needed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Pages")
  private java.lang.String pages;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ParseSource")
  private java.lang.Integer parseSource;

  /**
   * Note that an issued patent has a PatentNumber and can also have a PatentApplicationNumber,
   * whereas a patent application has a PatentApplicationNumber and can also have a
   * PatentPublicationNumber.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PatentApplicationNumber")
  private java.lang.String patentApplicationNumber;

  /**
   * patent classification e.g., "B24B 3100"
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PatentClassification")
  private java.util.List<java.lang.String> patentClassification;

  /**
   * 2-letter country code where patent was issued, see
   * ocean/metadata/patent_record.proto::Patent_Record::country_code for EPO one patent pertains to
   * a list of countries.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PatentCountry")
  private java.util.List<java.lang.String> patentCountry;

  /**
   * number according to USPTO/EPO/JPO scheme.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PatentNumber")
  private java.lang.String patentNumber;

  /**
   * one of the above
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PatentOffice")
  private java.lang.Integer patentOffice;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PatentPublicationNumber")
  private java.lang.String patentPublicationNumber;

  /**
   * for patents, publicationD/M/Y is the date of issue, not application
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublicationDay")
  private java.lang.Integer publicationDay;

  /**
   * month from bibtex PublicationMonth is a zero-indexed field (0 is January).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublicationMonth")
  private java.lang.Integer publicationMonth;

  /**
   * where published - subsumes booktitle, howpublished and journal from bibtex
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublicationVenue")
  private java.lang.String publicationVenue;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublicationVenueVariant")
  private java.util.List<java.lang.String> publicationVenueVariant;

  /**
   * year from bibtext full year
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublicationYear")
  private java.lang.Integer publicationYear;

  /**
   * address from bibtex
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublisherAddress")
  private java.lang.String publisherAddress;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublisherId")
  private java.lang.String publisherId;

  /**
   * subsumes organization, school and institution from bibtex
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PublisherOrg")
  private java.lang.String publisherOrg;

  /**
   * local journal number
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("PubvenueID")
  private java.lang.String pubvenueID;

  /**
   * bitmap of ReviewArticleTypeReasons
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("ReviewTypeReason")
  private java.lang.Long reviewTypeReason;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("SICI")
  private java.lang.String sICI;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Series")
  private java.lang.String series;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Title")
  private java.lang.String title;

  /**
   * Version of title for display. Contains unsanitized HTML/XML.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("TitleHtml")
  private java.lang.String titleHtml;

  /**
   * Leftovers from TitleHtml. These are usually unrecognized xml/html entities or xml/html tags
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("TitleHtmlLeftOver")
  private java.lang.String titleHtmlLeftOver;

  /**
   * etal marker for the translated author list - just in case
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("TranslatedAuthorListHasEtAl")
  private java.lang.Boolean translatedAuthorListHasEtAl;

  /**
   * ArticleType
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Type")
  private java.lang.Integer type;

  /**
   * Email addresses found in the document that we weren't able to match
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("UnmatchedEmailAddr")
  private java.util.List<java.lang.String> unmatchedEmailAddr;

  /**
   * Author affiliations found in the document that we weren't able to match up to specific authors.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("UnmatchedInstitution")
  private java.util.List<java.lang.String> unmatchedInstitution;

  /**
   * Document version identifier - fingerprint of an id computed from the url, or of bibliographic
   * data from a publisher. Different urls for the same article from the same source have the same
   * version id (e.g., abstract, pdf version, and html version).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("VersionID") @com.google.api.client.json.JsonString
  private java.math.BigInteger versionID;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("Volume")
  private java.lang.Integer volume;

  /**
   * Web of Science ID
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("WOSID")
  private java.lang.String wOSID;

  /**
   * Is this version of the article world viewable?
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key("WorldViewable")
  private java.lang.Boolean worldViewable;

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

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

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

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

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

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

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

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

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

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

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

  /**
   * The source of abstract text that is chosen by science docid assigner.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getAbstractCitationSource() {
    return abstractCitationSource;
  }

  /**
   * The source of abstract text that is chosen by science docid assigner.
   * @param abstractCitationSource abstractCitationSource or {@code null} for none
   */
  public ScienceCitation setAbstractCitationSource(java.lang.Integer abstractCitationSource) {
    this.abstractCitationSource = abstractCitationSource;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractDisplay() {
    return abstractDisplay;
  }

  /**
   * @param abstractDisplay abstractDisplay or {@code null} for none
   */
  public ScienceCitation setAbstractDisplay(java.lang.String abstractDisplay) {
    this.abstractDisplay = abstractDisplay;
    return this;
  }

  /**
   * Version of abstract field for display. Contains unsanitized XML/HTML.
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractHtml() {
    return abstractHtml;
  }

  /**
   * Version of abstract field for display. Contains unsanitized XML/HTML.
   * @param abstractHtml abstractHtml or {@code null} for none
   */
  public ScienceCitation setAbstractHtml(java.lang.String abstractHtml) {
    this.abstractHtml = abstractHtml;
    return this;
  }

  /**
   * Leftovers from AbstractHtml. These are usually unrecognized xml/html entities or xml/html tags
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractHtmlLeftOver() {
    return abstractHtmlLeftOver;
  }

  /**
   * Leftovers from AbstractHtml. These are usually unrecognized xml/html entities or xml/html tags
   * @param abstractHtmlLeftOver abstractHtmlLeftOver or {@code null} for none
   */
  public ScienceCitation setAbstractHtmlLeftOver(java.lang.String abstractHtmlLeftOver) {
    this.abstractHtmlLeftOver = abstractHtmlLeftOver;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractLanguage() {
    return abstractLanguage;
  }

  /**
   * @param abstractLanguage abstractLanguage or {@code null} for none
   */
  public ScienceCitation setAbstractLanguage(java.lang.String abstractLanguage) {
    this.abstractLanguage = abstractLanguage;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractSource() {
    return abstractSource;
  }

  /**
   * @param abstractSource abstractSource or {@code null} for none
   */
  public ScienceCitation setAbstractSource(java.lang.String abstractSource) {
    this.abstractSource = abstractSource;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractText() {
    return abstractText;
  }

  /**
   * @param abstractText abstractText or {@code null} for none
   */
  public ScienceCitation setAbstractText(java.lang.String abstractText) {
    this.abstractText = abstractText;
    return this;
  }

  /**
   * The original (unnormalized) type of an abstract. AbstractDisplay holds a normalized type
   * deduced from things like tagnames, tag-attributes, keywords in documents or the placement of
   * the abstract in the document. This field is meant for the type of the abstract identified
   * explicitly by the source document. E.g., the value of the 'abstract-type' attribute from a tag
   * in XML ('primary abstract', 'summary', 'highlights' etc.).
   * @return value or {@code null} for none
   */
  public java.lang.String getAbstractTypeFromSource() {
    return abstractTypeFromSource;
  }

  /**
   * The original (unnormalized) type of an abstract. AbstractDisplay holds a normalized type
   * deduced from things like tagnames, tag-attributes, keywords in documents or the placement of
   * the abstract in the document. This field is meant for the type of the abstract identified
   * explicitly by the source document. E.g., the value of the 'abstract-type' attribute from a tag
   * in XML ('primary abstract', 'summary', 'highlights' etc.).
   * @param abstractTypeFromSource abstractTypeFromSource or {@code null} for none
   */
  public ScienceCitation setAbstractTypeFromSource(java.lang.String abstractTypeFromSource) {
    this.abstractTypeFromSource = abstractTypeFromSource;
    return this;
  }

  /**
   * Fingerprint of the URL after applying crawl and aggregate rewrites. Different citations with
   * the same AlternateVersionID must have the same VersionID, but not necessarily vice versa.
   * Omitted when identical to the VersionID.
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getAlternateVersionID() {
    return alternateVersionID;
  }

  /**
   * Fingerprint of the URL after applying crawl and aggregate rewrites. Different citations with
   * the same AlternateVersionID must have the same VersionID, but not necessarily vice versa.
   * Omitted when identical to the VersionID.
   * @param alternateVersionID alternateVersionID or {@code null} for none
   */
  public ScienceCitation setAlternateVersionID(java.math.BigInteger alternateVersionID) {
    this.alternateVersionID = alternateVersionID;
    return this;
  }

  /**
   * All the anchor text (before, after, formal, etc) for this citation in the referring page.
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationAnchor> getAnchors() {
    return anchors;
  }

  /**
   * All the anchor text (before, after, formal, etc) for this citation in the referring page.
   * @param anchors anchors or {@code null} for none
   */
  public ScienceCitation setAnchors(java.util.List<ScienceCitationAnchor> anchors) {
    this.anchors = anchors;
    return this;
  }

  /**
   * e.g. hep-ph
   * @return value or {@code null} for none
   */
  public java.lang.String getArxivSection() {
    return arxivSection;
  }

  /**
   * e.g. hep-ph
   * @param arxivSection arxivSection or {@code null} for none
   */
  public ScienceCitation setArxivSection(java.lang.String arxivSection) {
    this.arxivSection = arxivSection;
    return this;
  }

  /**
   * whether this citation had an "et al" in the author list
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAuthorListHasEtAl() {
    return authorListHasEtAl;
  }

  /**
   * whether this citation had an "et al" in the author list
   * @param authorListHasEtAl authorListHasEtAl or {@code null} for none
   */
  public ScienceCitation setAuthorListHasEtAl(java.lang.Boolean authorListHasEtAl) {
    this.authorListHasEtAl = authorListHasEtAl;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getAuthorMetatagLeftOver() {
    return authorMetatagLeftOver;
  }

  /**
   * @param authorMetatagLeftOver authorMetatagLeftOver or {@code null} for none
   */
  public ScienceCitation setAuthorMetatagLeftOver(java.lang.String authorMetatagLeftOver) {
    this.authorMetatagLeftOver = authorMetatagLeftOver;
    return this;
  }

  /**
   * Global document identifier - only available when building increments over a known base index.
   * This id is from the base index.
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getBaseGlobalID() {
    return baseGlobalID;
  }

  /**
   * Global document identifier - only available when building increments over a known base index.
   * This id is from the base index.
   * @param baseGlobalID baseGlobalID or {@code null} for none
   */
  public ScienceCitation setBaseGlobalID(java.math.BigInteger baseGlobalID) {
    this.baseGlobalID = baseGlobalID;
    return this;
  }

  /**
   * Set when building an incremental index. Whereas BaseGlobalID is the ID of the corresponding
   * base cluster, the local ID is the ID of an individual citation within that base cluster that
   * corresponds to this reparse.
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getBaseLocalID() {
    return baseLocalID;
  }

  /**
   * Set when building an incremental index. Whereas BaseGlobalID is the ID of the corresponding
   * base cluster, the local ID is the ID of an individual citation within that base cluster that
   * corresponds to this reparse.
   * @param baseLocalID baseLocalID or {@code null} for none
   */
  public ScienceCitation setBaseLocalID(java.math.BigInteger baseLocalID) {
    this.baseLocalID = baseLocalID;
    return this;
  }

  /**
   * one bit per author
   * @return value or {@code null} for none
   */
  public java.lang.Integer getBorrowedAuthors() {
    return borrowedAuthors;
  }

  /**
   * one bit per author
   * @param borrowedAuthors borrowedAuthors or {@code null} for none
   */
  public ScienceCitation setBorrowedAuthors(java.lang.Integer borrowedAuthors) {
    this.borrowedAuthors = borrowedAuthors;
    return this;
  }

  /**
   * OR of FieldType
   * @return value or {@code null} for none
   */
  public java.lang.Integer getBorrowedFields() {
    return borrowedFields;
  }

  /**
   * OR of FieldType
   * @param borrowedFields borrowedFields or {@code null} for none
   */
  public ScienceCitation setBorrowedFields(java.lang.Integer borrowedFields) {
    this.borrowedFields = borrowedFields;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getChapter() {
    return chapter;
  }

  /**
   * @param chapter chapter or {@code null} for none
   */
  public ScienceCitation setChapter(java.lang.String chapter) {
    this.chapter = chapter;
    return this;
  }

  /**
   * citation src: dblp/crossref/paper etc
   * @return value or {@code null} for none
   */
  public java.lang.Integer getCitationSource() {
    return citationSource;
  }

  /**
   * citation src: dblp/crossref/paper etc
   * @param citationSource citationSource or {@code null} for none
   */
  public ScienceCitation setCitationSource(java.lang.Integer citationSource) {
    this.citationSource = citationSource;
    return this;
  }

  /**
   * Seconds since the epoch, should be consistent with CitationSourceUrl.
   * @return value or {@code null} for none
   */
  public java.lang.Long getCitationSourceCrawlTimestamp() {
    return citationSourceCrawlTimestamp;
  }

  /**
   * Seconds since the epoch, should be consistent with CitationSourceUrl.
   * @param citationSourceCrawlTimestamp citationSourceCrawlTimestamp or {@code null} for none
   */
  public ScienceCitation setCitationSourceCrawlTimestamp(java.lang.Long citationSourceCrawlTimestamp) {
    this.citationSourceCrawlTimestamp = citationSourceCrawlTimestamp;
    return this;
  }

  /**
   * url where record came from
   * @return value or {@code null} for none
   */
  public java.lang.String getCitationSourceUrl() {
    return citationSourceUrl;
  }

  /**
   * url where record came from
   * @param citationSourceUrl citationSourceUrl or {@code null} for none
   */
  public ScienceCitation setCitationSourceUrl(java.lang.String citationSourceUrl) {
    this.citationSourceUrl = citationSourceUrl;
    return this;
  }

  /**
   * DEPRECATED: use CitationSource
   * @return value or {@code null} for none
   */
  public java.lang.String getCitationSrc() {
    return citationSrc;
  }

  /**
   * DEPRECATED: use CitationSource
   * @param citationSrc citationSrc or {@code null} for none
   */
  public ScienceCitation setCitationSrc(java.lang.String citationSrc) {
    this.citationSrc = citationSrc;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getClearedReason() {
    return clearedReason;
  }

  /**
   * @param clearedReason clearedReason or {@code null} for none
   */
  public ScienceCitation setClearedReason(java.lang.String clearedReason) {
    this.clearedReason = clearedReason;
    return this;
  }

  /**
   * Used for logging, recommendations, and sort-by-date. Contains the earliest discovery date of
   * the cluster, adjusted for earlier publication dates. Stored in Universal time scale (100 ns
   * ticks since 0001 AD) because Unix timestamp would lead to negative dates for pre-1970 docs.
   * @return value or {@code null} for none
   */
  public java.lang.Long getClusterDiscoveryDate() {
    return clusterDiscoveryDate;
  }

  /**
   * Used for logging, recommendations, and sort-by-date. Contains the earliest discovery date of
   * the cluster, adjusted for earlier publication dates. Stored in Universal time scale (100 ns
   * ticks since 0001 AD) because Unix timestamp would lead to negative dates for pre-1970 docs.
   * @param clusterDiscoveryDate clusterDiscoveryDate or {@code null} for none
   */
  public ScienceCitation setClusterDiscoveryDate(java.lang.Long clusterDiscoveryDate) {
    this.clusterDiscoveryDate = clusterDiscoveryDate;
    return this;
  }

  /**
   * Identifier for conference series - issn-lite
   * @return value or {@code null} for none
   */
  public java.lang.String getConferenceId() {
    return conferenceId;
  }

  /**
   * Identifier for conference series - issn-lite
   * @param conferenceId conferenceId or {@code null} for none
   */
  public ScienceCitation setConferenceId(java.lang.String conferenceId) {
    this.conferenceId = conferenceId;
    return this;
  }

  /**
   * 27 in the "27th conference on magical realism"
   * @return value or {@code null} for none
   */
  public java.lang.Integer getConferenceNumber() {
    return conferenceNumber;
  }

  /**
   * 27 in the "27th conference on magical realism"
   * @param conferenceNumber conferenceNumber or {@code null} for none
   */
  public ScienceCitation setConferenceNumber(java.lang.Integer conferenceNumber) {
    this.conferenceNumber = conferenceNumber;
    return this;
  }

  /**
   * If a citation is merged from a crawled version and a metadata version, keep the normal docid fp
   * of the crawled version for clustering FP of normal docid of crawl version
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getCrawledDocid() {
    return crawledDocid;
  }

  /**
   * If a citation is merged from a crawled version and a metadata version, keep the normal docid fp
   * of the crawled version for clustering FP of normal docid of crawl version
   * @param crawledDocid crawledDocid or {@code null} for none
   */
  public ScienceCitation setCrawledDocid(java.math.BigInteger crawledDocid) {
    this.crawledDocid = crawledDocid;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getDEPRECATEDMetadataSourceFile() {
    return dEPRECATEDMetadataSourceFile;
  }

  /**
   * @param dEPRECATEDMetadataSourceFile dEPRECATEDMetadataSourceFile or {@code null} for none
   */
  public ScienceCitation setDEPRECATEDMetadataSourceFile(java.lang.String dEPRECATEDMetadataSourceFile) {
    this.dEPRECATEDMetadataSourceFile = dEPRECATEDMetadataSourceFile;
    return this;
  }

  /**
   * these fields moved to DownloadURL where they belong
   * @return value or {@code null} for none
   */
  public java.lang.String getDEPRECATEDPublisherDisplayName() {
    return dEPRECATEDPublisherDisplayName;
  }

  /**
   * these fields moved to DownloadURL where they belong
   * @param dEPRECATEDPublisherDisplayName dEPRECATEDPublisherDisplayName or {@code null} for none
   */
  public ScienceCitation setDEPRECATEDPublisherDisplayName(java.lang.String dEPRECATEDPublisherDisplayName) {
    this.dEPRECATEDPublisherDisplayName = dEPRECATEDPublisherDisplayName;
    return this;
  }

  /**
   * Digital Object Identifier
   * @return value or {@code null} for none
   */
  public java.lang.String getDOI() {
    return dOI;
  }

  /**
   * Digital Object Identifier
   * @param dOI dOI or {@code null} for none
   */
  public ScienceCitation setDOI(java.lang.String dOI) {
    this.dOI = dOI;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getDblpId() {
    return dblpId;
  }

  /**
   * @param dblpId dblpId or {@code null} for none
   */
  public ScienceCitation setDblpId(java.lang.String dblpId) {
    this.dblpId = dblpId;
    return this;
  }

  /**
   * Local document identifier - url fingerprint if we know the url, or fingerprint of all fields if
   * we don't. Different urls have different local docids.
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getDocumentID() {
    return documentID;
  }

  /**
   * Local document identifier - url fingerprint if we know the url, or fingerprint of all fields if
   * we don't. Different urls have different local docids.
   * @param documentID documentID or {@code null} for none
   */
  public ScienceCitation setDocumentID(java.math.BigInteger documentID) {
    this.documentID = documentID;
    return this;
  }

  /**
   * Dspace uses handle.net handles
   * @return value or {@code null} for none
   */
  public java.lang.String getDspaceID() {
    return dspaceID;
  }

  /**
   * Dspace uses handle.net handles
   * @param dspaceID dspaceID or {@code null} for none
   */
  public ScienceCitation setDspaceID(java.lang.String dspaceID) {
    this.dspaceID = dspaceID;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getEdition() {
    return edition;
  }

  /**
   * @param edition edition or {@code null} for none
   */
  public ScienceCitation setEdition(java.lang.String edition) {
    this.edition = edition;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getEditor() {
    return editor;
  }

  /**
   * @param editor editor or {@code null} for none
   */
  public ScienceCitation setEditor(java.util.List<java.lang.String> editor) {
    this.editor = editor;
    return this;
  }

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

  /**
   * @param fileCreationDay fileCreationDay or {@code null} for none
   */
  public ScienceCitation setFileCreationDay(java.lang.Integer fileCreationDay) {
    this.fileCreationDay = fileCreationDay;
    return this;
  }

  /**
   * zero-indexed field
   * @return value or {@code null} for none
   */
  public java.lang.Integer getFileCreationMonth() {
    return fileCreationMonth;
  }

  /**
   * zero-indexed field
   * @param fileCreationMonth fileCreationMonth or {@code null} for none
   */
  public ScienceCitation setFileCreationMonth(java.lang.Integer fileCreationMonth) {
    this.fileCreationMonth = fileCreationMonth;
    return this;
  }

  /**
   * date of creation of the pdf/doc
   * @return value or {@code null} for none
   */
  public java.lang.Integer getFileCreationYear() {
    return fileCreationYear;
  }

  /**
   * date of creation of the pdf/doc
   * @param fileCreationYear fileCreationYear or {@code null} for none
   */
  public ScienceCitation setFileCreationYear(java.lang.Integer fileCreationYear) {
    this.fileCreationYear = fileCreationYear;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getISBN() {
    return iSBN;
  }

  /**
   * @param iSBN iSBN or {@code null} for none
   */
  public ScienceCitation setISBN(java.lang.String iSBN) {
    this.iSBN = iSBN;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getISBNVariant() {
    return iSBNVariant;
  }

  /**
   * @param iSBNVariant iSBNVariant or {@code null} for none
   */
  public ScienceCitation setISBNVariant(java.util.List<java.lang.String> iSBNVariant) {
    this.iSBNVariant = iSBNVariant;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getISSN() {
    return iSSN;
  }

  /**
   * @param iSSN iSSN or {@code null} for none
   */
  public ScienceCitation setISSN(java.lang.String iSSN) {
    this.iSSN = iSSN;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getISSNVariant() {
    return iSSNVariant;
  }

  /**
   * @param iSSNVariant iSSNVariant or {@code null} for none
   */
  public ScienceCitation setISSNVariant(java.util.List<java.lang.String> iSSNVariant) {
    this.iSSNVariant = iSSNVariant;
    return this;
  }

  /**
   * Is this article expected to have been indexed in the incremental?
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIncrementalExpected() {
    return incrementalExpected;
  }

  /**
   * Is this article expected to have been indexed in the incremental?
   * @param incrementalExpected incrementalExpected or {@code null} for none
   */
  public ScienceCitation setIncrementalExpected(java.lang.Boolean incrementalExpected) {
    this.incrementalExpected = incrementalExpected;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getJOI() {
    return jOI;
  }

  /**
   * @param jOI jOI or {@code null} for none
   */
  public ScienceCitation setJOI(java.lang.String jOI) {
    this.jOI = jOI;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getKeywords() {
    return keywords;
  }

  /**
   * @param keywords keywords or {@code null} for none
   */
  public ScienceCitation setKeywords(java.util.List<java.lang.String> keywords) {
    this.keywords = keywords;
    return this;
  }

  /**
   * library of congress call number
   * @return value or {@code null} for none
   */
  public java.lang.String getLCCN() {
    return lCCN;
  }

  /**
   * library of congress call number
   * @param lCCN lCCN or {@code null} for none
   */
  public ScienceCitation setLCCN(java.lang.String lCCN) {
    this.lCCN = lCCN;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getLanguage() {
    return language;
  }

  /**
   * @param language language or {@code null} for none
   */
  public ScienceCitation setLanguage(java.lang.String language) {
    this.language = language;
    return this;
  }

  /**
   * The ScienceCitation is how metadata passes through the scholar system. For legal, we use the
   * normal ScienceCitation for the metadata/citation of legal journals. For court/government
   * documents (like opinions or statues), we wrap it in the following embedded message
   * @return value or {@code null} for none
   */
  public LegalCitation getLegalCitation() {
    return legalCitation;
  }

  /**
   * The ScienceCitation is how metadata passes through the scholar system. For legal, we use the
   * normal ScienceCitation for the metadata/citation of legal journals. For court/government
   * documents (like opinions or statues), we wrap it in the following embedded message
   * @param legalCitation legalCitation or {@code null} for none
   */
  public ScienceCitation setLegalCitation(LegalCitation legalCitation) {
    this.legalCitation = legalCitation;
    return this;
  }

  /**
   * If this is a target reference, the level of discussion of this reference.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getLevelOfDiscussion() {
    return levelOfDiscussion;
  }

  /**
   * If this is a target reference, the level of discussion of this reference.
   * @param levelOfDiscussion levelOfDiscussion or {@code null} for none
   */
  public ScienceCitation setLevelOfDiscussion(java.lang.Integer levelOfDiscussion) {
    this.levelOfDiscussion = levelOfDiscussion;
    return this;
  }

  /**
   * random string data - unparsed
   * @return value or {@code null} for none
   */
  public java.lang.String getNote() {
    return note;
  }

  /**
   * random string data - unparsed
   * @param note note or {@code null} for none
   */
  public ScienceCitation setNote(java.lang.String note) {
    this.note = note;
    return this;
  }

  /**
   * for display in gws
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumBackwardLinks() {
    return numBackwardLinks;
  }

  /**
   * for display in gws
   * @param numBackwardLinks numBackwardLinks or {@code null} for none
   */
  public ScienceCitation setNumBackwardLinks(java.lang.Integer numBackwardLinks) {
    this.numBackwardLinks = numBackwardLinks;
    return this;
  }

  /**
   * hack for legal rollout
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumBackwardLinksFromLegal() {
    return numBackwardLinksFromLegal;
  }

  /**
   * hack for legal rollout
   * @param numBackwardLinksFromLegal numBackwardLinksFromLegal or {@code null} for none
   */
  public ScienceCitation setNumBackwardLinksFromLegal(java.lang.Integer numBackwardLinksFromLegal) {
    this.numBackwardLinksFromLegal = numBackwardLinksFromLegal;
    return this;
  }

  /**
   * numcited in WoS
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumBackwardLinksInWoS() {
    return numBackwardLinksInWoS;
  }

  /**
   * numcited in WoS
   * @param numBackwardLinksInWoS numBackwardLinksInWoS or {@code null} for none
   */
  public ScienceCitation setNumBackwardLinksInWoS(java.lang.Integer numBackwardLinksInWoS) {
    this.numBackwardLinksInWoS = numBackwardLinksInWoS;
    return this;
  }

  /**
   * for display in gws
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumForwardLinks() {
    return numForwardLinks;
  }

  /**
   * for display in gws
   * @param numForwardLinks numForwardLinks or {@code null} for none
   */
  public ScienceCitation setNumForwardLinks(java.lang.Integer numForwardLinks) {
    this.numForwardLinks = numForwardLinks;
    return this;
  }

  /**
   * good embedded refs
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumGoodEmbeddedRefs() {
    return numGoodEmbeddedRefs;
  }

  /**
   * good embedded refs
   * @param numGoodEmbeddedRefs numGoodEmbeddedRefs or {@code null} for none
   */
  public ScienceCitation setNumGoodEmbeddedRefs(java.lang.Integer numGoodEmbeddedRefs) {
    this.numGoodEmbeddedRefs = numGoodEmbeddedRefs;
    return this;
  }

  /**
   * If set, then we host this many pages of this citation's content. Note that this field may be
   * set to 0, in which case we should be hosting this content but have failed. DEPRECATED, moved to
   * DownloadURL
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumHostedPages() {
    return numHostedPages;
  }

  /**
   * If set, then we host this many pages of this citation's content. Note that this field may be
   * set to 0, in which case we should be hosting this content but have failed. DEPRECATED, moved to
   * DownloadURL
   * @param numHostedPages numHostedPages or {@code null} for none
   */
  public ScienceCitation setNumHostedPages(java.lang.Integer numHostedPages) {
    this.numHostedPages = numHostedPages;
    return this;
  }

  /**
   * for display in gws
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumKeyQuotes() {
    return numKeyQuotes;
  }

  /**
   * for display in gws
   * @param numKeyQuotes numKeyQuotes or {@code null} for none
   */
  public ScienceCitation setNumKeyQuotes(java.lang.Integer numKeyQuotes) {
    this.numKeyQuotes = numKeyQuotes;
    return this;
  }

  /**
   * for display in gws
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumRelated() {
    return numRelated;
  }

  /**
   * for display in gws
   * @param numRelated numRelated or {@code null} for none
   */
  public ScienceCitation setNumRelated(java.lang.Integer numRelated) {
    this.numRelated = numRelated;
    return this;
  }

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

  /**
   * for experiments
   * @param numRelated2 numRelated2 or {@code null} for none
   */
  public ScienceCitation setNumRelated2(java.lang.Integer numRelated2) {
    this.numRelated2 = numRelated2;
    return this;
  }

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

  /**
   * for experiments
   * @param numRelated3 numRelated3 or {@code null} for none
   */
  public ScienceCitation setNumRelated3(java.lang.Integer numRelated3) {
    this.numRelated3 = numRelated3;
    return this;
  }

  /**
   * refs in marked section
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumSectionRefs() {
    return numSectionRefs;
  }

  /**
   * refs in marked section
   * @param numSectionRefs numSectionRefs or {@code null} for none
   */
  public ScienceCitation setNumSectionRefs(java.lang.Integer numSectionRefs) {
    this.numSectionRefs = numSectionRefs;
    return this;
  }

  /**
   * for display in gws
   * @return value or {@code null} for none
   */
  public java.lang.Integer getNumVersions() {
    return numVersions;
  }

  /**
   * for display in gws
   * @param numVersions numVersions or {@code null} for none
   */
  public ScienceCitation setNumVersions(java.lang.Integer numVersions) {
    this.numVersions = numVersions;
    return this;
  }

  /**
   * can be 1-3
   * @return value or {@code null} for none
   */
  public java.lang.String getNumber() {
    return number;
  }

  /**
   * can be 1-3
   * @param number number or {@code null} for none
   */
  public ScienceCitation setNumber(java.lang.String number) {
    this.number = number;
    return this;
  }

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

  /**
   * @param onlineDay onlineDay or {@code null} for none
   */
  public ScienceCitation setOnlineDay(java.lang.Integer onlineDay) {
    this.onlineDay = onlineDay;
    return this;
  }

  /**
   * OnlineMonth is a zero-indexed field (0 is January).
   * @return value or {@code null} for none
   */
  public java.lang.Integer getOnlineMonth() {
    return onlineMonth;
  }

  /**
   * OnlineMonth is a zero-indexed field (0 is January).
   * @param onlineMonth onlineMonth or {@code null} for none
   */
  public ScienceCitation setOnlineMonth(java.lang.Integer onlineMonth) {
    this.onlineMonth = onlineMonth;
    return this;
  }

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

  /**
   * @param onlineYear onlineYear or {@code null} for none
   */
  public ScienceCitation setOnlineYear(java.lang.Integer onlineYear) {
    this.onlineYear = onlineYear;
    return this;
  }

  /**
   * eg ERIC doc number or TR number
   * @return value or {@code null} for none
   */
  public java.lang.String getOtherID() {
    return otherID;
  }

  /**
   * eg ERIC doc number or TR number
   * @param otherID otherID or {@code null} for none
   */
  public ScienceCitation setOtherID(java.lang.String otherID) {
    this.otherID = otherID;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getPMCID() {
    return pMCID;
  }

  /**
   * @param pMCID pMCID or {@code null} for none
   */
  public ScienceCitation setPMCID(java.lang.String pMCID) {
    this.pMCID = pMCID;
    return this;
  }

  /**
   * Pubmed ID
   * @return value or {@code null} for none
   */
  public java.lang.String getPMID() {
    return pMID;
  }

  /**
   * Pubmed ID
   * @param pMID pMID or {@code null} for none
   */
  public ScienceCitation setPMID(java.lang.String pMID) {
    this.pMID = pMID;
    return this;
  }

  /**
   * Using string to handle all kinds of page specifications. Internal structure is not really
   * needed.
   * @return value or {@code null} for none
   */
  public java.lang.String getPages() {
    return pages;
  }

  /**
   * Using string to handle all kinds of page specifications. Internal structure is not really
   * needed.
   * @param pages pages or {@code null} for none
   */
  public ScienceCitation setPages(java.lang.String pages) {
    this.pages = pages;
    return this;
  }

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

  /**
   * @param parseSource parseSource or {@code null} for none
   */
  public ScienceCitation setParseSource(java.lang.Integer parseSource) {
    this.parseSource = parseSource;
    return this;
  }

  /**
   * Note that an issued patent has a PatentNumber and can also have a PatentApplicationNumber,
   * whereas a patent application has a PatentApplicationNumber and can also have a
   * PatentPublicationNumber.
   * @return value or {@code null} for none
   */
  public java.lang.String getPatentApplicationNumber() {
    return patentApplicationNumber;
  }

  /**
   * Note that an issued patent has a PatentNumber and can also have a PatentApplicationNumber,
   * whereas a patent application has a PatentApplicationNumber and can also have a
   * PatentPublicationNumber.
   * @param patentApplicationNumber patentApplicationNumber or {@code null} for none
   */
  public ScienceCitation setPatentApplicationNumber(java.lang.String patentApplicationNumber) {
    this.patentApplicationNumber = patentApplicationNumber;
    return this;
  }

  /**
   * patent classification e.g., "B24B 3100"
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getPatentClassification() {
    return patentClassification;
  }

  /**
   * patent classification e.g., "B24B 3100"
   * @param patentClassification patentClassification or {@code null} for none
   */
  public ScienceCitation setPatentClassification(java.util.List<java.lang.String> patentClassification) {
    this.patentClassification = patentClassification;
    return this;
  }

  /**
   * 2-letter country code where patent was issued, see
   * ocean/metadata/patent_record.proto::Patent_Record::country_code for EPO one patent pertains to
   * a list of countries.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getPatentCountry() {
    return patentCountry;
  }

  /**
   * 2-letter country code where patent was issued, see
   * ocean/metadata/patent_record.proto::Patent_Record::country_code for EPO one patent pertains to
   * a list of countries.
   * @param patentCountry patentCountry or {@code null} for none
   */
  public ScienceCitation setPatentCountry(java.util.List<java.lang.String> patentCountry) {
    this.patentCountry = patentCountry;
    return this;
  }

  /**
   * number according to USPTO/EPO/JPO scheme.
   * @return value or {@code null} for none
   */
  public java.lang.String getPatentNumber() {
    return patentNumber;
  }

  /**
   * number according to USPTO/EPO/JPO scheme.
   * @param patentNumber patentNumber or {@code null} for none
   */
  public ScienceCitation setPatentNumber(java.lang.String patentNumber) {
    this.patentNumber = patentNumber;
    return this;
  }

  /**
   * one of the above
   * @return value or {@code null} for none
   */
  public java.lang.Integer getPatentOffice() {
    return patentOffice;
  }

  /**
   * one of the above
   * @param patentOffice patentOffice or {@code null} for none
   */
  public ScienceCitation setPatentOffice(java.lang.Integer patentOffice) {
    this.patentOffice = patentOffice;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getPatentPublicationNumber() {
    return patentPublicationNumber;
  }

  /**
   * @param patentPublicationNumber patentPublicationNumber or {@code null} for none
   */
  public ScienceCitation setPatentPublicationNumber(java.lang.String patentPublicationNumber) {
    this.patentPublicationNumber = patentPublicationNumber;
    return this;
  }

  /**
   * for patents, publicationD/M/Y is the date of issue, not application
   * @return value or {@code null} for none
   */
  public java.lang.Integer getPublicationDay() {
    return publicationDay;
  }

  /**
   * for patents, publicationD/M/Y is the date of issue, not application
   * @param publicationDay publicationDay or {@code null} for none
   */
  public ScienceCitation setPublicationDay(java.lang.Integer publicationDay) {
    this.publicationDay = publicationDay;
    return this;
  }

  /**
   * month from bibtex PublicationMonth is a zero-indexed field (0 is January).
   * @return value or {@code null} for none
   */
  public java.lang.Integer getPublicationMonth() {
    return publicationMonth;
  }

  /**
   * month from bibtex PublicationMonth is a zero-indexed field (0 is January).
   * @param publicationMonth publicationMonth or {@code null} for none
   */
  public ScienceCitation setPublicationMonth(java.lang.Integer publicationMonth) {
    this.publicationMonth = publicationMonth;
    return this;
  }

  /**
   * where published - subsumes booktitle, howpublished and journal from bibtex
   * @return value or {@code null} for none
   */
  public java.lang.String getPublicationVenue() {
    return publicationVenue;
  }

  /**
   * where published - subsumes booktitle, howpublished and journal from bibtex
   * @param publicationVenue publicationVenue or {@code null} for none
   */
  public ScienceCitation setPublicationVenue(java.lang.String publicationVenue) {
    this.publicationVenue = publicationVenue;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getPublicationVenueVariant() {
    return publicationVenueVariant;
  }

  /**
   * @param publicationVenueVariant publicationVenueVariant or {@code null} for none
   */
  public ScienceCitation setPublicationVenueVariant(java.util.List<java.lang.String> publicationVenueVariant) {
    this.publicationVenueVariant = publicationVenueVariant;
    return this;
  }

  /**
   * year from bibtext full year
   * @return value or {@code null} for none
   */
  public java.lang.Integer getPublicationYear() {
    return publicationYear;
  }

  /**
   * year from bibtext full year
   * @param publicationYear publicationYear or {@code null} for none
   */
  public ScienceCitation setPublicationYear(java.lang.Integer publicationYear) {
    this.publicationYear = publicationYear;
    return this;
  }

  /**
   * address from bibtex
   * @return value or {@code null} for none
   */
  public java.lang.String getPublisherAddress() {
    return publisherAddress;
  }

  /**
   * address from bibtex
   * @param publisherAddress publisherAddress or {@code null} for none
   */
  public ScienceCitation setPublisherAddress(java.lang.String publisherAddress) {
    this.publisherAddress = publisherAddress;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getPublisherId() {
    return publisherId;
  }

  /**
   * @param publisherId publisherId or {@code null} for none
   */
  public ScienceCitation setPublisherId(java.lang.String publisherId) {
    this.publisherId = publisherId;
    return this;
  }

  /**
   * subsumes organization, school and institution from bibtex
   * @return value or {@code null} for none
   */
  public java.lang.String getPublisherOrg() {
    return publisherOrg;
  }

  /**
   * subsumes organization, school and institution from bibtex
   * @param publisherOrg publisherOrg or {@code null} for none
   */
  public ScienceCitation setPublisherOrg(java.lang.String publisherOrg) {
    this.publisherOrg = publisherOrg;
    return this;
  }

  /**
   * local journal number
   * @return value or {@code null} for none
   */
  public java.lang.String getPubvenueID() {
    return pubvenueID;
  }

  /**
   * local journal number
   * @param pubvenueID pubvenueID or {@code null} for none
   */
  public ScienceCitation setPubvenueID(java.lang.String pubvenueID) {
    this.pubvenueID = pubvenueID;
    return this;
  }

  /**
   * bitmap of ReviewArticleTypeReasons
   * @return value or {@code null} for none
   */
  public java.lang.Long getReviewTypeReason() {
    return reviewTypeReason;
  }

  /**
   * bitmap of ReviewArticleTypeReasons
   * @param reviewTypeReason reviewTypeReason or {@code null} for none
   */
  public ScienceCitation setReviewTypeReason(java.lang.Long reviewTypeReason) {
    this.reviewTypeReason = reviewTypeReason;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getSICI() {
    return sICI;
  }

  /**
   * @param sICI sICI or {@code null} for none
   */
  public ScienceCitation setSICI(java.lang.String sICI) {
    this.sICI = sICI;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getSeries() {
    return series;
  }

  /**
   * @param series series or {@code null} for none
   */
  public ScienceCitation setSeries(java.lang.String series) {
    this.series = series;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getTitle() {
    return title;
  }

  /**
   * @param title title or {@code null} for none
   */
  public ScienceCitation setTitle(java.lang.String title) {
    this.title = title;
    return this;
  }

  /**
   * Version of title for display. Contains unsanitized HTML/XML.
   * @return value or {@code null} for none
   */
  public java.lang.String getTitleHtml() {
    return titleHtml;
  }

  /**
   * Version of title for display. Contains unsanitized HTML/XML.
   * @param titleHtml titleHtml or {@code null} for none
   */
  public ScienceCitation setTitleHtml(java.lang.String titleHtml) {
    this.titleHtml = titleHtml;
    return this;
  }

  /**
   * Leftovers from TitleHtml. These are usually unrecognized xml/html entities or xml/html tags
   * @return value or {@code null} for none
   */
  public java.lang.String getTitleHtmlLeftOver() {
    return titleHtmlLeftOver;
  }

  /**
   * Leftovers from TitleHtml. These are usually unrecognized xml/html entities or xml/html tags
   * @param titleHtmlLeftOver titleHtmlLeftOver or {@code null} for none
   */
  public ScienceCitation setTitleHtmlLeftOver(java.lang.String titleHtmlLeftOver) {
    this.titleHtmlLeftOver = titleHtmlLeftOver;
    return this;
  }

  /**
   * etal marker for the translated author list - just in case
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getTranslatedAuthorListHasEtAl() {
    return translatedAuthorListHasEtAl;
  }

  /**
   * etal marker for the translated author list - just in case
   * @param translatedAuthorListHasEtAl translatedAuthorListHasEtAl or {@code null} for none
   */
  public ScienceCitation setTranslatedAuthorListHasEtAl(java.lang.Boolean translatedAuthorListHasEtAl) {
    this.translatedAuthorListHasEtAl = translatedAuthorListHasEtAl;
    return this;
  }

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

  /**
   * ArticleType
   * @param type type or {@code null} for none
   */
  public ScienceCitation setType(java.lang.Integer type) {
    this.type = type;
    return this;
  }

  /**
   * Email addresses found in the document that we weren't able to match
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getUnmatchedEmailAddr() {
    return unmatchedEmailAddr;
  }

  /**
   * Email addresses found in the document that we weren't able to match
   * @param unmatchedEmailAddr unmatchedEmailAddr or {@code null} for none
   */
  public ScienceCitation setUnmatchedEmailAddr(java.util.List<java.lang.String> unmatchedEmailAddr) {
    this.unmatchedEmailAddr = unmatchedEmailAddr;
    return this;
  }

  /**
   * Author affiliations found in the document that we weren't able to match up to specific authors.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getUnmatchedInstitution() {
    return unmatchedInstitution;
  }

  /**
   * Author affiliations found in the document that we weren't able to match up to specific authors.
   * @param unmatchedInstitution unmatchedInstitution or {@code null} for none
   */
  public ScienceCitation setUnmatchedInstitution(java.util.List<java.lang.String> unmatchedInstitution) {
    this.unmatchedInstitution = unmatchedInstitution;
    return this;
  }

  /**
   * Document version identifier - fingerprint of an id computed from the url, or of bibliographic
   * data from a publisher. Different urls for the same article from the same source have the same
   * version id (e.g., abstract, pdf version, and html version).
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getVersionID() {
    return versionID;
  }

  /**
   * Document version identifier - fingerprint of an id computed from the url, or of bibliographic
   * data from a publisher. Different urls for the same article from the same source have the same
   * version id (e.g., abstract, pdf version, and html version).
   * @param versionID versionID or {@code null} for none
   */
  public ScienceCitation setVersionID(java.math.BigInteger versionID) {
    this.versionID = versionID;
    return this;
  }

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

  /**
   * @param volume volume or {@code null} for none
   */
  public ScienceCitation setVolume(java.lang.Integer volume) {
    this.volume = volume;
    return this;
  }

  /**
   * Web of Science ID
   * @return value or {@code null} for none
   */
  public java.lang.String getWOSID() {
    return wOSID;
  }

  /**
   * Web of Science ID
   * @param wOSID wOSID or {@code null} for none
   */
  public ScienceCitation setWOSID(java.lang.String wOSID) {
    this.wOSID = wOSID;
    return this;
  }

  /**
   * Is this version of the article world viewable?
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getWorldViewable() {
    return worldViewable;
  }

  /**
   * Is this version of the article world viewable?
   * @param worldViewable worldViewable or {@code null} for none
   */
  public ScienceCitation setWorldViewable(java.lang.Boolean worldViewable) {
    this.worldViewable = worldViewable;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationAccessURL> getAccessurl() {
    return accessurl;
  }

  /**
   * @param accessurl accessurl or {@code null} for none
   */
  public ScienceCitation setAccessurl(java.util.List<ScienceCitationAccessURL> accessurl) {
    this.accessurl = accessurl;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationAlternateAbstract> getAlternateabstract() {
    return alternateabstract;
  }

  /**
   * @param alternateabstract alternateabstract or {@code null} for none
   */
  public ScienceCitation setAlternateabstract(java.util.List<ScienceCitationAlternateAbstract> alternateabstract) {
    this.alternateabstract = alternateabstract;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationAlternateTitle> getAlternatetitle() {
    return alternatetitle;
  }

  /**
   * @param alternatetitle alternatetitle or {@code null} for none
   */
  public ScienceCitation setAlternatetitle(java.util.List<ScienceCitationAlternateTitle> alternatetitle) {
    this.alternatetitle = alternatetitle;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationAuthor> getAuthor() {
    return author;
  }

  /**
   * @param author author or {@code null} for none
   */
  public ScienceCitation setAuthor(java.util.List<ScienceCitationAuthor> author) {
    this.author = author;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationCategory> getCategory() {
    return category;
  }

  /**
   * @param category category or {@code null} for none
   */
  public ScienceCitation setCategory(java.util.List<ScienceCitationCategory> category) {
    this.category = category;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationDownloadURL> getDownloadurl() {
    return downloadurl;
  }

  /**
   * @param downloadurl downloadurl or {@code null} for none
   */
  public ScienceCitation setDownloadurl(java.util.List<ScienceCitationDownloadURL> downloadurl) {
    this.downloadurl = downloadurl;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationFunding> getFunding() {
    return funding;
  }

  /**
   * @param funding funding or {@code null} for none
   */
  public ScienceCitation setFunding(java.util.List<ScienceCitationFunding> funding) {
    this.funding = funding;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationReferenceDiscussion> getReferencediscussion() {
    return referencediscussion;
  }

  /**
   * @param referencediscussion referencediscussion or {@code null} for none
   */
  public ScienceCitation setReferencediscussion(java.util.List<ScienceCitationReferenceDiscussion> referencediscussion) {
    this.referencediscussion = referencediscussion;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationSubject> getSubject() {
    return subject;
  }

  /**
   * @param subject subject or {@code null} for none
   */
  public ScienceCitation setSubject(java.util.List<ScienceCitationSubject> subject) {
    this.subject = subject;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationTranslatedAuthor> getTranslatedauthor() {
    return translatedauthor;
  }

  /**
   * @param translatedauthor translatedauthor or {@code null} for none
   */
  public ScienceCitation setTranslatedauthor(java.util.List<ScienceCitationTranslatedAuthor> translatedauthor) {
    this.translatedauthor = translatedauthor;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ScienceCitationUnionCatalog> getUnioncatalog() {
    return unioncatalog;
  }

  /**
   * @param unioncatalog unioncatalog or {@code null} for none
   */
  public ScienceCitation setUnioncatalog(java.util.List<ScienceCitationUnionCatalog> unioncatalog) {
    this.unioncatalog = unioncatalog;
    return this;
  }

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

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

}
