/*
 * 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.drivelabels.v2.model;

/**
 * A Label defines a taxonomy which may be applied to a Drive items in order to organize and search
 * across Items. Labels may be simple strings, or may contain Fields that describe additional
 * metadata which can be further used to organize and search Drive items.
 *
 * <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 Drive Labels 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 GoogleAppsDriveLabelsV2Label extends com.google.api.client.json.GenericJson {

  /**
   * Output only. The capabilities related to this label on applied metadata.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2LabelAppliedCapabilities appliedCapabilities;

  /**
   * Output only. Behavior of this Label when its applied to Drive items.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2LabelAppliedLabelPolicy appliedLabelPolicy;

  /**
   * Output only. The time this label was created.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String createTime;

  /**
   * Output only. The user who created this label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2UserInfo creator;

  /**
   * Output only. The time this label was disabled. This value has no meaning when the label is not
   * disabled.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String disableTime;

  /**
   * Output only. The user who disabled this label. This value has no meaning when the label is not
   * disabled.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2UserInfo disabler;

  /**
   * Output only. UI Display hints for rendering the Label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2LabelDisplayHints displayHints;

  /**
   * List of Fields in descending priority order.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleAppsDriveLabelsV2Field> fields;

  static {
    // hack to force ProGuard to consider GoogleAppsDriveLabelsV2Field 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(GoogleAppsDriveLabelsV2Field.class);
  }

  /**
   * Output only. Globally unique identifier of this Label. ID makes up part of the Label `name`,
   * but unlike `name`, ID is consistent between revisions. Matches the regex: `([a-zA-Z0-9])+`
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String id;

  /**
   * Required. The type of this label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String labelType;

  /**
   * Custom URL to present to users to allow them to learn more about this label and how it should
   * be used.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String learnMoreUri;

  /**
   * Output only. The lifecycle state of the label including whether it's published, deprecated, and
   * has draft changes.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2Lifecycle lifecycle;

  /**
   * Output only. The LockStatus of this label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2LockStatus lockStatus;

  /**
   * Output only. Resource name of the Label. Will be in the form of either: `labels/{id}` or
   * `labels/{id}@{revision_id}` depending on the request. See `id` and `revision_id` below.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String name;

  /**
   * Required. The basic properties of the Label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2LabelProperties properties;

  /**
   * Output only. The time this label was published. This value has no meaning when the label is not
   * published.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String publishTime;

  /**
   * Output only. The user who published this label. This value has no meaning when the label is not
   * published.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2UserInfo publisher;

  /**
   * Output only. The time this label revision was created.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String revisionCreateTime;

  /**
   * Output only. The user who created this label revision.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2UserInfo revisionCreator;

  /**
   * Output only. Revision ID of the Label. Revision ID may be part of the Label `name` depending on
   * the request issued. A new revision is created whenever revisioned properties of a Label are
   * changed. Matches the regex: `([a-zA-Z0-9])+`
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String revisionId;

  /**
   * Output only. The capabilities the user has on this Label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAppsDriveLabelsV2LabelSchemaCapabilities schemaCapabilities;

  /**
   * Output only. The capabilities related to this label on applied metadata.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2LabelAppliedCapabilities getAppliedCapabilities() {
    return appliedCapabilities;
  }

  /**
   * Output only. The capabilities related to this label on applied metadata.
   * @param appliedCapabilities appliedCapabilities or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setAppliedCapabilities(GoogleAppsDriveLabelsV2LabelAppliedCapabilities appliedCapabilities) {
    this.appliedCapabilities = appliedCapabilities;
    return this;
  }

  /**
   * Output only. Behavior of this Label when its applied to Drive items.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2LabelAppliedLabelPolicy getAppliedLabelPolicy() {
    return appliedLabelPolicy;
  }

  /**
   * Output only. Behavior of this Label when its applied to Drive items.
   * @param appliedLabelPolicy appliedLabelPolicy or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setAppliedLabelPolicy(GoogleAppsDriveLabelsV2LabelAppliedLabelPolicy appliedLabelPolicy) {
    this.appliedLabelPolicy = appliedLabelPolicy;
    return this;
  }

  /**
   * Output only. The time this label was created.
   * @return value or {@code null} for none
   */
  public String getCreateTime() {
    return createTime;
  }

  /**
   * Output only. The time this label was created.
   * @param createTime createTime or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setCreateTime(String createTime) {
    this.createTime = createTime;
    return this;
  }

  /**
   * Output only. The user who created this label.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2UserInfo getCreator() {
    return creator;
  }

  /**
   * Output only. The user who created this label.
   * @param creator creator or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setCreator(GoogleAppsDriveLabelsV2UserInfo creator) {
    this.creator = creator;
    return this;
  }

  /**
   * Output only. The time this label was disabled. This value has no meaning when the label is not
   * disabled.
   * @return value or {@code null} for none
   */
  public String getDisableTime() {
    return disableTime;
  }

  /**
   * Output only. The time this label was disabled. This value has no meaning when the label is not
   * disabled.
   * @param disableTime disableTime or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setDisableTime(String disableTime) {
    this.disableTime = disableTime;
    return this;
  }

  /**
   * Output only. The user who disabled this label. This value has no meaning when the label is not
   * disabled.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2UserInfo getDisabler() {
    return disabler;
  }

  /**
   * Output only. The user who disabled this label. This value has no meaning when the label is not
   * disabled.
   * @param disabler disabler or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setDisabler(GoogleAppsDriveLabelsV2UserInfo disabler) {
    this.disabler = disabler;
    return this;
  }

  /**
   * Output only. UI Display hints for rendering the Label.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2LabelDisplayHints getDisplayHints() {
    return displayHints;
  }

  /**
   * Output only. UI Display hints for rendering the Label.
   * @param displayHints displayHints or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setDisplayHints(GoogleAppsDriveLabelsV2LabelDisplayHints displayHints) {
    this.displayHints = displayHints;
    return this;
  }

  /**
   * List of Fields in descending priority order.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleAppsDriveLabelsV2Field> getFields() {
    return fields;
  }

  /**
   * List of Fields in descending priority order.
   * @param fields fields or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setFields(java.util.List<GoogleAppsDriveLabelsV2Field> fields) {
    this.fields = fields;
    return this;
  }

  /**
   * Output only. Globally unique identifier of this Label. ID makes up part of the Label `name`,
   * but unlike `name`, ID is consistent between revisions. Matches the regex: `([a-zA-Z0-9])+`
   * @return value or {@code null} for none
   */
  public java.lang.String getId() {
    return id;
  }

  /**
   * Output only. Globally unique identifier of this Label. ID makes up part of the Label `name`,
   * but unlike `name`, ID is consistent between revisions. Matches the regex: `([a-zA-Z0-9])+`
   * @param id id or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setId(java.lang.String id) {
    this.id = id;
    return this;
  }

  /**
   * Required. The type of this label.
   * @return value or {@code null} for none
   */
  public java.lang.String getLabelType() {
    return labelType;
  }

  /**
   * Required. The type of this label.
   * @param labelType labelType or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setLabelType(java.lang.String labelType) {
    this.labelType = labelType;
    return this;
  }

  /**
   * Custom URL to present to users to allow them to learn more about this label and how it should
   * be used.
   * @return value or {@code null} for none
   */
  public java.lang.String getLearnMoreUri() {
    return learnMoreUri;
  }

  /**
   * Custom URL to present to users to allow them to learn more about this label and how it should
   * be used.
   * @param learnMoreUri learnMoreUri or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setLearnMoreUri(java.lang.String learnMoreUri) {
    this.learnMoreUri = learnMoreUri;
    return this;
  }

  /**
   * Output only. The lifecycle state of the label including whether it's published, deprecated, and
   * has draft changes.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Lifecycle getLifecycle() {
    return lifecycle;
  }

  /**
   * Output only. The lifecycle state of the label including whether it's published, deprecated, and
   * has draft changes.
   * @param lifecycle lifecycle or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setLifecycle(GoogleAppsDriveLabelsV2Lifecycle lifecycle) {
    this.lifecycle = lifecycle;
    return this;
  }

  /**
   * Output only. The LockStatus of this label.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2LockStatus getLockStatus() {
    return lockStatus;
  }

  /**
   * Output only. The LockStatus of this label.
   * @param lockStatus lockStatus or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setLockStatus(GoogleAppsDriveLabelsV2LockStatus lockStatus) {
    this.lockStatus = lockStatus;
    return this;
  }

  /**
   * Output only. Resource name of the Label. Will be in the form of either: `labels/{id}` or
   * `labels/{id}@{revision_id}` depending on the request. See `id` and `revision_id` below.
   * @return value or {@code null} for none
   */
  public java.lang.String getName() {
    return name;
  }

  /**
   * Output only. Resource name of the Label. Will be in the form of either: `labels/{id}` or
   * `labels/{id}@{revision_id}` depending on the request. See `id` and `revision_id` below.
   * @param name name or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setName(java.lang.String name) {
    this.name = name;
    return this;
  }

  /**
   * Required. The basic properties of the Label.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2LabelProperties getProperties() {
    return properties;
  }

  /**
   * Required. The basic properties of the Label.
   * @param properties properties or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setProperties(GoogleAppsDriveLabelsV2LabelProperties properties) {
    this.properties = properties;
    return this;
  }

  /**
   * Output only. The time this label was published. This value has no meaning when the label is not
   * published.
   * @return value or {@code null} for none
   */
  public String getPublishTime() {
    return publishTime;
  }

  /**
   * Output only. The time this label was published. This value has no meaning when the label is not
   * published.
   * @param publishTime publishTime or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setPublishTime(String publishTime) {
    this.publishTime = publishTime;
    return this;
  }

  /**
   * Output only. The user who published this label. This value has no meaning when the label is not
   * published.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2UserInfo getPublisher() {
    return publisher;
  }

  /**
   * Output only. The user who published this label. This value has no meaning when the label is not
   * published.
   * @param publisher publisher or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setPublisher(GoogleAppsDriveLabelsV2UserInfo publisher) {
    this.publisher = publisher;
    return this;
  }

  /**
   * Output only. The time this label revision was created.
   * @return value or {@code null} for none
   */
  public String getRevisionCreateTime() {
    return revisionCreateTime;
  }

  /**
   * Output only. The time this label revision was created.
   * @param revisionCreateTime revisionCreateTime or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setRevisionCreateTime(String revisionCreateTime) {
    this.revisionCreateTime = revisionCreateTime;
    return this;
  }

  /**
   * Output only. The user who created this label revision.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2UserInfo getRevisionCreator() {
    return revisionCreator;
  }

  /**
   * Output only. The user who created this label revision.
   * @param revisionCreator revisionCreator or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setRevisionCreator(GoogleAppsDriveLabelsV2UserInfo revisionCreator) {
    this.revisionCreator = revisionCreator;
    return this;
  }

  /**
   * Output only. Revision ID of the Label. Revision ID may be part of the Label `name` depending on
   * the request issued. A new revision is created whenever revisioned properties of a Label are
   * changed. Matches the regex: `([a-zA-Z0-9])+`
   * @return value or {@code null} for none
   */
  public java.lang.String getRevisionId() {
    return revisionId;
  }

  /**
   * Output only. Revision ID of the Label. Revision ID may be part of the Label `name` depending on
   * the request issued. A new revision is created whenever revisioned properties of a Label are
   * changed. Matches the regex: `([a-zA-Z0-9])+`
   * @param revisionId revisionId or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setRevisionId(java.lang.String revisionId) {
    this.revisionId = revisionId;
    return this;
  }

  /**
   * Output only. The capabilities the user has on this Label.
   * @return value or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2LabelSchemaCapabilities getSchemaCapabilities() {
    return schemaCapabilities;
  }

  /**
   * Output only. The capabilities the user has on this Label.
   * @param schemaCapabilities schemaCapabilities or {@code null} for none
   */
  public GoogleAppsDriveLabelsV2Label setSchemaCapabilities(GoogleAppsDriveLabelsV2LabelSchemaCapabilities schemaCapabilities) {
    this.schemaCapabilities = schemaCapabilities;
    return this;
  }

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

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

}
