/*
 * 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.datalabeling.v1beta1.model;

/**
 * Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23
 *
 * <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 Data Labeling 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 GoogleCloudDatalabelingV1alpha1LabelOperationMetadata extends com.google.api.client.json.GenericJson {

  /**
   * Output only. The name of annotated dataset in format "projects/datasets/annotatedDatasets".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String annotatedDataset;

  /**
   * Output only. Timestamp when labeling request was created.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String createTime;

  /**
   * Output only. The name of dataset to be labeled. "projects/datasets"
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String dataset;

  /**
   * Details of label image bounding box operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata imageBoundingBoxDetails;

  /**
   * Details of label image bounding poly operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata imageBoundingPolyDetails;

  /**
   * Details of label image classification operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata imageClassificationDetails;

  /**
   * Details of label image oriented bounding box operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata imageOrientedBoundingBoxDetails;

  /**
   * Details of label image polyline operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata imagePolylineDetails;

  /**
   * Details of label image segmentation operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata imageSegmentationDetails;

  /**
   * Output only. Partial failures encountered. E.g. single files that couldn't be read. Status
   * details field will contain standard GCP error details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleRpcStatus> partialFailures;

  /**
   * Output only. Progress of label operation. Range: [0, 100].
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer progressPercent;

  /**
   * Details of label text classification operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata textClassificationDetails;

  /**
   * Details of label text entity extraction operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata textEntityExtractionDetails;

  /**
   * Details of label video classification operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata videoClassificationDetails;

  /**
   * Details of label video event operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata videoEventDetails;

  /**
   * Details of label video object detection operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata videoObjectDetectionDetails;

  /**
   * Details of label video object tracking operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata videoObjectTrackingDetails;

  /**
   * Output only. The name of annotated dataset in format "projects/datasets/annotatedDatasets".
   * @return value or {@code null} for none
   */
  public java.lang.String getAnnotatedDataset() {
    return annotatedDataset;
  }

  /**
   * Output only. The name of annotated dataset in format "projects/datasets/annotatedDatasets".
   * @param annotatedDataset annotatedDataset or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setAnnotatedDataset(java.lang.String annotatedDataset) {
    this.annotatedDataset = annotatedDataset;
    return this;
  }

  /**
   * Output only. Timestamp when labeling request was created.
   * @return value or {@code null} for none
   */
  public String getCreateTime() {
    return createTime;
  }

  /**
   * Output only. Timestamp when labeling request was created.
   * @param createTime createTime or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setCreateTime(String createTime) {
    this.createTime = createTime;
    return this;
  }

  /**
   * Output only. The name of dataset to be labeled. "projects/datasets"
   * @return value or {@code null} for none
   */
  public java.lang.String getDataset() {
    return dataset;
  }

  /**
   * Output only. The name of dataset to be labeled. "projects/datasets"
   * @param dataset dataset or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setDataset(java.lang.String dataset) {
    this.dataset = dataset;
    return this;
  }

  /**
   * Details of label image bounding box operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata getImageBoundingBoxDetails() {
    return imageBoundingBoxDetails;
  }

  /**
   * Details of label image bounding box operation.
   * @param imageBoundingBoxDetails imageBoundingBoxDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setImageBoundingBoxDetails(GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata imageBoundingBoxDetails) {
    this.imageBoundingBoxDetails = imageBoundingBoxDetails;
    return this;
  }

  /**
   * Details of label image bounding poly operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata getImageBoundingPolyDetails() {
    return imageBoundingPolyDetails;
  }

  /**
   * Details of label image bounding poly operation.
   * @param imageBoundingPolyDetails imageBoundingPolyDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setImageBoundingPolyDetails(GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata imageBoundingPolyDetails) {
    this.imageBoundingPolyDetails = imageBoundingPolyDetails;
    return this;
  }

  /**
   * Details of label image classification operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata getImageClassificationDetails() {
    return imageClassificationDetails;
  }

  /**
   * Details of label image classification operation.
   * @param imageClassificationDetails imageClassificationDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setImageClassificationDetails(GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata imageClassificationDetails) {
    this.imageClassificationDetails = imageClassificationDetails;
    return this;
  }

  /**
   * Details of label image oriented bounding box operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata getImageOrientedBoundingBoxDetails() {
    return imageOrientedBoundingBoxDetails;
  }

  /**
   * Details of label image oriented bounding box operation.
   * @param imageOrientedBoundingBoxDetails imageOrientedBoundingBoxDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setImageOrientedBoundingBoxDetails(GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata imageOrientedBoundingBoxDetails) {
    this.imageOrientedBoundingBoxDetails = imageOrientedBoundingBoxDetails;
    return this;
  }

  /**
   * Details of label image polyline operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata getImagePolylineDetails() {
    return imagePolylineDetails;
  }

  /**
   * Details of label image polyline operation.
   * @param imagePolylineDetails imagePolylineDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setImagePolylineDetails(GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata imagePolylineDetails) {
    this.imagePolylineDetails = imagePolylineDetails;
    return this;
  }

  /**
   * Details of label image segmentation operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata getImageSegmentationDetails() {
    return imageSegmentationDetails;
  }

  /**
   * Details of label image segmentation operation.
   * @param imageSegmentationDetails imageSegmentationDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setImageSegmentationDetails(GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata imageSegmentationDetails) {
    this.imageSegmentationDetails = imageSegmentationDetails;
    return this;
  }

  /**
   * Output only. Partial failures encountered. E.g. single files that couldn't be read. Status
   * details field will contain standard GCP error details.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleRpcStatus> getPartialFailures() {
    return partialFailures;
  }

  /**
   * Output only. Partial failures encountered. E.g. single files that couldn't be read. Status
   * details field will contain standard GCP error details.
   * @param partialFailures partialFailures or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setPartialFailures(java.util.List<GoogleRpcStatus> partialFailures) {
    this.partialFailures = partialFailures;
    return this;
  }

  /**
   * Output only. Progress of label operation. Range: [0, 100].
   * @return value or {@code null} for none
   */
  public java.lang.Integer getProgressPercent() {
    return progressPercent;
  }

  /**
   * Output only. Progress of label operation. Range: [0, 100].
   * @param progressPercent progressPercent or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setProgressPercent(java.lang.Integer progressPercent) {
    this.progressPercent = progressPercent;
    return this;
  }

  /**
   * Details of label text classification operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata getTextClassificationDetails() {
    return textClassificationDetails;
  }

  /**
   * Details of label text classification operation.
   * @param textClassificationDetails textClassificationDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setTextClassificationDetails(GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata textClassificationDetails) {
    this.textClassificationDetails = textClassificationDetails;
    return this;
  }

  /**
   * Details of label text entity extraction operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata getTextEntityExtractionDetails() {
    return textEntityExtractionDetails;
  }

  /**
   * Details of label text entity extraction operation.
   * @param textEntityExtractionDetails textEntityExtractionDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setTextEntityExtractionDetails(GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata textEntityExtractionDetails) {
    this.textEntityExtractionDetails = textEntityExtractionDetails;
    return this;
  }

  /**
   * Details of label video classification operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata getVideoClassificationDetails() {
    return videoClassificationDetails;
  }

  /**
   * Details of label video classification operation.
   * @param videoClassificationDetails videoClassificationDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setVideoClassificationDetails(GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata videoClassificationDetails) {
    this.videoClassificationDetails = videoClassificationDetails;
    return this;
  }

  /**
   * Details of label video event operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata getVideoEventDetails() {
    return videoEventDetails;
  }

  /**
   * Details of label video event operation.
   * @param videoEventDetails videoEventDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setVideoEventDetails(GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata videoEventDetails) {
    this.videoEventDetails = videoEventDetails;
    return this;
  }

  /**
   * Details of label video object detection operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata getVideoObjectDetectionDetails() {
    return videoObjectDetectionDetails;
  }

  /**
   * Details of label video object detection operation.
   * @param videoObjectDetectionDetails videoObjectDetectionDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setVideoObjectDetectionDetails(GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata videoObjectDetectionDetails) {
    this.videoObjectDetectionDetails = videoObjectDetectionDetails;
    return this;
  }

  /**
   * Details of label video object tracking operation.
   * @return value or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata getVideoObjectTrackingDetails() {
    return videoObjectTrackingDetails;
  }

  /**
   * Details of label video object tracking operation.
   * @param videoObjectTrackingDetails videoObjectTrackingDetails or {@code null} for none
   */
  public GoogleCloudDatalabelingV1alpha1LabelOperationMetadata setVideoObjectTrackingDetails(GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata videoObjectTrackingDetails) {
    this.videoObjectTrackingDetails = videoObjectTrackingDetails;
    return this;
  }

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

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

}
