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

/**
 * Magazine-specific fields. See
 * https://www.corp.google.com/eng/designdocs/scanning/magazines/designdoc.html for magazine design
 * doc.
 *
 * <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 OceanDocTagMagazineSpecific extends com.google.api.client.json.GenericJson {

  /**
   * A human-readable date for display in the UI. Unlike "publication_date_" above, this should not
   * be parsed into structured data, but should only be displayed as is.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String displayDate;

  /**
   * Description specific to a magazine issue, such as featured articles and article summaries.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String issueDescription;

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

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

  /**
   * Items within a magazine issue.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<OceanDataDocinfoWoodwingItemMetadata> item;

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

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

  /**
   * NOTE: These should to be values from MetadataNumberingSchema; when this becomes a proto2, we
   * can use MetadataEnums values.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer otherNumberingSchema;

  /**
   * For season or quarter dates.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer otherNumberingStart;

  /**
   * For each page of a magazine, maps to the item index of "item".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> pageToItem;

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

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

  /**
   * This is used to render the metadata line of the snippet and should be present in all magazine
   * documents.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String serialTitle;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long serialVolumeid;

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

  /**
   * A human-readable date for display in the UI. Unlike "publication_date_" above, this should not
   * be parsed into structured data, but should only be displayed as is.
   * @return value or {@code null} for none
   */
  public java.lang.String getDisplayDate() {
    return displayDate;
  }

  /**
   * A human-readable date for display in the UI. Unlike "publication_date_" above, this should not
   * be parsed into structured data, but should only be displayed as is.
   * @param displayDate displayDate or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setDisplayDate(java.lang.String displayDate) {
    this.displayDate = displayDate;
    return this;
  }

  /**
   * Description specific to a magazine issue, such as featured articles and article summaries.
   * @return value or {@code null} for none
   */
  public java.lang.String getIssueDescription() {
    return issueDescription;
  }

  /**
   * Description specific to a magazine issue, such as featured articles and article summaries.
   * @param issueDescription issueDescription or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setIssueDescription(java.lang.String issueDescription) {
    this.issueDescription = issueDescription;
    return this;
  }

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

  /**
   * @param issueEnd issueEnd or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setIssueEnd(java.lang.Integer issueEnd) {
    this.issueEnd = issueEnd;
    return this;
  }

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

  /**
   * @param issueStart issueStart or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setIssueStart(java.lang.Integer issueStart) {
    this.issueStart = issueStart;
    return this;
  }

  /**
   * Items within a magazine issue.
   * @return value or {@code null} for none
   */
  public java.util.List<OceanDataDocinfoWoodwingItemMetadata> getItem() {
    return item;
  }

  /**
   * Items within a magazine issue.
   * @param item item or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setItem(java.util.List<OceanDataDocinfoWoodwingItemMetadata> item) {
    this.item = item;
    return this;
  }

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

  /**
   * @param otherNumberingEnd otherNumberingEnd or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setOtherNumberingEnd(java.lang.Integer otherNumberingEnd) {
    this.otherNumberingEnd = otherNumberingEnd;
    return this;
  }

  /**
   * NOTE: These should to be values from MetadataNumberingSchema; when this becomes a proto2, we
   * can use MetadataEnums values.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getOtherNumberingSchema() {
    return otherNumberingSchema;
  }

  /**
   * NOTE: These should to be values from MetadataNumberingSchema; when this becomes a proto2, we
   * can use MetadataEnums values.
   * @param otherNumberingSchema otherNumberingSchema or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setOtherNumberingSchema(java.lang.Integer otherNumberingSchema) {
    this.otherNumberingSchema = otherNumberingSchema;
    return this;
  }

  /**
   * For season or quarter dates.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getOtherNumberingStart() {
    return otherNumberingStart;
  }

  /**
   * For season or quarter dates.
   * @param otherNumberingStart otherNumberingStart or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setOtherNumberingStart(java.lang.Integer otherNumberingStart) {
    this.otherNumberingStart = otherNumberingStart;
    return this;
  }

  /**
   * For each page of a magazine, maps to the item index of "item".
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getPageToItem() {
    return pageToItem;
  }

  /**
   * For each page of a magazine, maps to the item index of "item".
   * @param pageToItem pageToItem or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setPageToItem(java.util.List<java.lang.Integer> pageToItem) {
    this.pageToItem = pageToItem;
    return this;
  }

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

  /**
   * @param publicationDateEnd publicationDateEnd or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setPublicationDateEnd(java.lang.String publicationDateEnd) {
    this.publicationDateEnd = publicationDateEnd;
    return this;
  }

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

  /**
   * @param publicationDateStart publicationDateStart or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setPublicationDateStart(java.lang.String publicationDateStart) {
    this.publicationDateStart = publicationDateStart;
    return this;
  }

  /**
   * This is used to render the metadata line of the snippet and should be present in all magazine
   * documents.
   * @return value or {@code null} for none
   */
  public java.lang.String getSerialTitle() {
    return serialTitle;
  }

  /**
   * This is used to render the metadata line of the snippet and should be present in all magazine
   * documents.
   * @param serialTitle serialTitle or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setSerialTitle(java.lang.String serialTitle) {
    this.serialTitle = serialTitle;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Long getSerialVolumeid() {
    return serialVolumeid;
  }

  /**
   * @param serialVolumeid serialVolumeid or {@code null} for none
   */
  public OceanDocTagMagazineSpecific setSerialVolumeid(java.lang.Long serialVolumeid) {
    this.serialVolumeid = serialVolumeid;
    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 OceanDocTagMagazineSpecific setVolume(java.lang.Integer volume) {
    this.volume = volume;
    return this;
  }

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

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

}
