com.amazonaws.services.elastictranscoder.model.Job Maven / Gradle / Ivy
Show all versions of aws-java-sdk-osgi Show documentation
/*
 * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights
 * Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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.
 */
package com.amazonaws.services.elastictranscoder.model;
import java.io.Serializable;
/**
 * 
 * A section of the response body that provides information about the job that
 * is created.
 * 
 */
public class Job implements Serializable, Cloneable {
    /**
     * 
     * The identifier that Elastic Transcoder assigned to the job. You use this
     * value to get settings for the job or to delete the job.
     * 
     */
    private String id;
    /**
     * 
     * The Amazon Resource Name (ARN) for the job.
     * 
     */
    private String arn;
    /**
     * 
     * The Id of the pipeline that you want Elastic Transcoder to
     * use for transcoding. The pipeline determines several settings, including
     * the Amazon S3 bucket from which Elastic Transcoder gets the files to
     * transcode and the bucket into which Elastic Transcoder puts the
     * transcoded files.
     * 
     */
    private String pipelineId;
    /**
     * 
     * A section of the request or response body that provides information about
     * the file that is being transcoded.
     * 
     */
    private JobInput input;
    /**
     * 
     * If you specified one output for a job, information about that output. If
     * you specified multiple outputs for a job, the Output object lists
     * information about the first output. This duplicates the information that
     * is listed for the first output in the Outputs object.
     * 
     * 
     * Outputs recommended instead.  A section of the
     * request or response body that provides information about the transcoded
     * (target) file.
     * 
     */
    private JobOutput output;
    /**
     * 
     * Information about the output files. We recommend that you use the
     * Outputs syntax for all jobs, even when you want Elastic
     * Transcoder to transcode a file into only one format. Do not use both the
     * Outputs and Output syntaxes in the same
     * request. You can create a maximum of 30 outputs per job.
     * 
     * 
     * If you specify more than one output for a job, Elastic Transcoder creates
     * the files for each output in the order in which you specify them in the
     * job.
     * 
     */
    private com.amazonaws.internal.SdkInternalList outputs;
    /**
     * 
     * The value, if any, that you want Elastic Transcoder to prepend to the
     * names of all files that this job creates, including output files,
     * thumbnails, and playlists. We recommend that you add a / or some other
     * delimiter to the end of the OutputKeyPrefix.
     * 
     */
    private String outputKeyPrefix;
    /**
     * 
     * Outputs in Fragmented MP4 or MPEG-TS format
     * only. If you specify a preset in PresetId for
     * which the value of Container is fmp4 (Fragmented MP4) or ts
     * (MPEG-TS), Playlists contains information about the master
     * playlists that you want Elastic Transcoder to create.
     * 
     * 
     * The maximum number of master playlists in a job is 30.
     * 
     */
    private com.amazonaws.internal.SdkInternalList playlists;
    /**
     * 
     * The status of the job: Submitted, Progressing,
     * Complete, Canceled, or Error.
     * 
     */
    private String status;
    /**
     * 
     * User-defined metadata that you want to associate with an Elastic
     * Transcoder job. You specify metadata in key/value pairs, and
     * you can add up to 10 key/value pairs per job. Elastic
     * Transcoder does not guarantee that key/value pairs will be
     * returned in the same order in which you specify them.
     * 
     * 
     * Metadata keys and values must use characters
     * from the following list:
     * 
     * 
     * - 
     * 
     * 0-9
     * 
     *  
     * - 
     * 
     * A-Z and a-z
     * 
     *  
     * - 
     * 
     * Space
     * 
     *  
     * - 
     * 
     * The following symbols: _.:/=+-%@
     * 
     *  
     * 
     */
    private com.amazonaws.internal.SdkInternalMap userMetadata;
    /**
     * 
     * Details about the timing of a job.
     * 
     */
    private Timing timing;
    /**
     * 
     * The identifier that Elastic Transcoder assigned to the job. You use this
     * value to get settings for the job or to delete the job.
     * 
     * 
     * @param id
     *        The identifier that Elastic Transcoder assigned to the job. You
     *        use this value to get settings for the job or to delete the job.
     */
    public void setId(String id) {
        this.id = id;
    }
    /**
     * 
     * The identifier that Elastic Transcoder assigned to the job. You use this
     * value to get settings for the job or to delete the job.
     * 
     * 
     * @return The identifier that Elastic Transcoder assigned to the job. You
     *         use this value to get settings for the job or to delete the job.
     */
    public String getId() {
        return this.id;
    }
    /**
     * 
     * The identifier that Elastic Transcoder assigned to the job. You use this
     * value to get settings for the job or to delete the job.
     * 
     * 
     * @param id
     *        The identifier that Elastic Transcoder assigned to the job. You
     *        use this value to get settings for the job or to delete the job.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withId(String id) {
        setId(id);
        return this;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) for the job.
     * 
     * 
     * @param arn
     *        The Amazon Resource Name (ARN) for the job.
     */
    public void setArn(String arn) {
        this.arn = arn;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) for the job.
     * 
     * 
     * @return The Amazon Resource Name (ARN) for the job.
     */
    public String getArn() {
        return this.arn;
    }
    /**
     * 
     * The Amazon Resource Name (ARN) for the job.
     * 
     * 
     * @param arn
     *        The Amazon Resource Name (ARN) for the job.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withArn(String arn) {
        setArn(arn);
        return this;
    }
    /**
     * 
     * The Id of the pipeline that you want Elastic Transcoder to
     * use for transcoding. The pipeline determines several settings, including
     * the Amazon S3 bucket from which Elastic Transcoder gets the files to
     * transcode and the bucket into which Elastic Transcoder puts the
     * transcoded files.
     * 
     * 
     * @param pipelineId
     *        The Id of the pipeline that you want Elastic
     *        Transcoder to use for transcoding. The pipeline determines several
     *        settings, including the Amazon S3 bucket from which Elastic
     *        Transcoder gets the files to transcode and the bucket into which
     *        Elastic Transcoder puts the transcoded files.
     */
    public void setPipelineId(String pipelineId) {
        this.pipelineId = pipelineId;
    }
    /**
     * 
     * The Id of the pipeline that you want Elastic Transcoder to
     * use for transcoding. The pipeline determines several settings, including
     * the Amazon S3 bucket from which Elastic Transcoder gets the files to
     * transcode and the bucket into which Elastic Transcoder puts the
     * transcoded files.
     * 
     * 
     * @return The Id of the pipeline that you want Elastic
     *         Transcoder to use for transcoding. The pipeline determines
     *         several settings, including the Amazon S3 bucket from which
     *         Elastic Transcoder gets the files to transcode and the bucket
     *         into which Elastic Transcoder puts the transcoded files.
     */
    public String getPipelineId() {
        return this.pipelineId;
    }
    /**
     * 
     * The Id of the pipeline that you want Elastic Transcoder to
     * use for transcoding. The pipeline determines several settings, including
     * the Amazon S3 bucket from which Elastic Transcoder gets the files to
     * transcode and the bucket into which Elastic Transcoder puts the
     * transcoded files.
     * 
     * 
     * @param pipelineId
     *        The Id of the pipeline that you want Elastic
     *        Transcoder to use for transcoding. The pipeline determines several
     *        settings, including the Amazon S3 bucket from which Elastic
     *        Transcoder gets the files to transcode and the bucket into which
     *        Elastic Transcoder puts the transcoded files.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withPipelineId(String pipelineId) {
        setPipelineId(pipelineId);
        return this;
    }
    /**
     * 
     * A section of the request or response body that provides information about
     * the file that is being transcoded.
     * 
     * 
     * @param input
     *        A section of the request or response body that provides
     *        information about the file that is being transcoded.
     */
    public void setInput(JobInput input) {
        this.input = input;
    }
    /**
     * 
     * A section of the request or response body that provides information about
     * the file that is being transcoded.
     * 
     * 
     * @return A section of the request or response body that provides
     *         information about the file that is being transcoded.
     */
    public JobInput getInput() {
        return this.input;
    }
    /**
     * 
     * A section of the request or response body that provides information about
     * the file that is being transcoded.
     * 
     * 
     * @param input
     *        A section of the request or response body that provides
     *        information about the file that is being transcoded.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withInput(JobInput input) {
        setInput(input);
        return this;
    }
    /**
     * 
     * If you specified one output for a job, information about that output. If
     * you specified multiple outputs for a job, the Output object lists
     * information about the first output. This duplicates the information that
     * is listed for the first output in the Outputs object.
     * 
     * 
     * Outputs recommended instead.  A section of the
     * request or response body that provides information about the transcoded
     * (target) file.
     * 
     * 
     * @param output
     *        If you specified one output for a job, information about that
     *        output. If you specified multiple outputs for a job, the Output
     *        object lists information about the first output. This duplicates
     *        the information that is listed for the first output in the Outputs
     *        object.
     *        
     *        Outputs recommended instead.  A section of
     *        the request or response body that provides information about the
     *        transcoded (target) file.
     */
    public void setOutput(JobOutput output) {
        this.output = output;
    }
    /**
     * 
     * If you specified one output for a job, information about that output. If
     * you specified multiple outputs for a job, the Output object lists
     * information about the first output. This duplicates the information that
     * is listed for the first output in the Outputs object.
     * 
     * 
     * Outputs recommended instead.  A section of the
     * request or response body that provides information about the transcoded
     * (target) file.
     * 
     * 
     * @return If you specified one output for a job, information about that
     *         output. If you specified multiple outputs for a job, the Output
     *         object lists information about the first output. This duplicates
     *         the information that is listed for the first output in the
     *         Outputs object.
     *         
     *         Outputs recommended instead.  A section of
     *         the request or response body that provides information about the
     *         transcoded (target) file.
     */
    public JobOutput getOutput() {
        return this.output;
    }
    /**
     * 
     * If you specified one output for a job, information about that output. If
     * you specified multiple outputs for a job, the Output object lists
     * information about the first output. This duplicates the information that
     * is listed for the first output in the Outputs object.
     * 
     * 
     * Outputs recommended instead.  A section of the
     * request or response body that provides information about the transcoded
     * (target) file.
     * 
     * 
     * @param output
     *        If you specified one output for a job, information about that
     *        output. If you specified multiple outputs for a job, the Output
     *        object lists information about the first output. This duplicates
     *        the information that is listed for the first output in the Outputs
     *        object.
     *        
     *        Outputs recommended instead.  A section of
     *        the request or response body that provides information about the
     *        transcoded (target) file.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withOutput(JobOutput output) {
        setOutput(output);
        return this;
    }
    /**
     * 
     * Information about the output files. We recommend that you use the
     * Outputs syntax for all jobs, even when you want Elastic
     * Transcoder to transcode a file into only one format. Do not use both the
     * Outputs and Output syntaxes in the same
     * request. You can create a maximum of 30 outputs per job.
     * 
     * 
     * If you specify more than one output for a job, Elastic Transcoder creates
     * the files for each output in the order in which you specify them in the
     * job.
     * 
     * 
     * @return Information about the output files. We recommend that you use the
     *         Outputs syntax for all jobs, even when you want
     *         Elastic Transcoder to transcode a file into only one format. Do
     *         not use both the Outputs and Output
     *         syntaxes in the same request. You can create a maximum of 30
     *         outputs per job. 
     *         
     *         If you specify more than one output for a job, Elastic Transcoder
     *         creates the files for each output in the order in which you
     *         specify them in the job.
     */
    public java.util.List getOutputs() {
        if (outputs == null) {
            outputs = new com.amazonaws.internal.SdkInternalList();
        }
        return outputs;
    }
    /**
     * 
     * Information about the output files. We recommend that you use the
     * Outputs syntax for all jobs, even when you want Elastic
     * Transcoder to transcode a file into only one format. Do not use both the
     * Outputs and Output syntaxes in the same
     * request. You can create a maximum of 30 outputs per job.
     * 
     * 
     * If you specify more than one output for a job, Elastic Transcoder creates
     * the files for each output in the order in which you specify them in the
     * job.
     * 
     * 
     * @param outputs
     *        Information about the output files. We recommend that you use the
     *        Outputs syntax for all jobs, even when you want
     *        Elastic Transcoder to transcode a file into only one format. Do
     *        not use both the Outputs and Output
     *        syntaxes in the same request. You can create a maximum of 30
     *        outputs per job.   
     *        
     *        If you specify more than one output for a job, Elastic Transcoder
     *        creates the files for each output in the order in which you
     *        specify them in the job.
     */
    public void setOutputs(java.util.Collection outputs) {
        if (outputs == null) {
            this.outputs = null;
            return;
        }
        this.outputs = new com.amazonaws.internal.SdkInternalList(
                outputs);
    }
    /**
     * 
     * Information about the output files. We recommend that you use the
     * Outputs syntax for all jobs, even when you want Elastic
     * Transcoder to transcode a file into only one format. Do not use both the
     * Outputs and Output syntaxes in the same
     * request. You can create a maximum of 30 outputs per job.
     * 
     * 
     * If you specify more than one output for a job, Elastic Transcoder creates
     * the files for each output in the order in which you specify them in the
     * job.
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setOutputs(java.util.Collection)} or
     * {@link #withOutputs(java.util.Collection)} if you want to override the
     * existing values.
     * 
     * 
     * @param outputs
     *        Information about the output files. We recommend that you use the
     *        Outputs syntax for all jobs, even when you want
     *        Elastic Transcoder to transcode a file into only one format. Do
     *        not use both the Outputs and Output
     *        syntaxes in the same request. You can create a maximum of 30
     *        outputs per job.   
     *        
     *        If you specify more than one output for a job, Elastic Transcoder
     *        creates the files for each output in the order in which you
     *        specify them in the job.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withOutputs(JobOutput... outputs) {
        if (this.outputs == null) {
            setOutputs(new com.amazonaws.internal.SdkInternalList(
                    outputs.length));
        }
        for (JobOutput ele : outputs) {
            this.outputs.add(ele);
        }
        return this;
    }
    /**
     * 
     * Information about the output files. We recommend that you use the
     * Outputs syntax for all jobs, even when you want Elastic
     * Transcoder to transcode a file into only one format. Do not use both the
     * Outputs and Output syntaxes in the same
     * request. You can create a maximum of 30 outputs per job.
     * 
     * 
     * If you specify more than one output for a job, Elastic Transcoder creates
     * the files for each output in the order in which you specify them in the
     * job.
     * 
     * 
     * @param outputs
     *        Information about the output files. We recommend that you use the
     *        Outputs syntax for all jobs, even when you want
     *        Elastic Transcoder to transcode a file into only one format. Do
     *        not use both the Outputs and Output
     *        syntaxes in the same request. You can create a maximum of 30
     *        outputs per job.  
     *        
     *        If you specify more than one output for a job, Elastic Transcoder
     *        creates the files for each output in the order in which you
     *        specify them in the job.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withOutputs(java.util.Collection outputs) {
        setOutputs(outputs);
        return this;
    }
    /**
     * 
     * The value, if any, that you want Elastic Transcoder to prepend to the
     * names of all files that this job creates, including output files,
     * thumbnails, and playlists. We recommend that you add a / or some other
     * delimiter to the end of the OutputKeyPrefix.
     * 
     * 
     * @param outputKeyPrefix
     *        The value, if any, that you want Elastic Transcoder to prepend to
     *        the names of all files that this job creates, including output
     *        files, thumbnails, and playlists. We recommend that you add a / or
     *        some other delimiter to the end of the
     *        OutputKeyPrefix.
     */
    public void setOutputKeyPrefix(String outputKeyPrefix) {
        this.outputKeyPrefix = outputKeyPrefix;
    }
    /**
     * 
     * The value, if any, that you want Elastic Transcoder to prepend to the
     * names of all files that this job creates, including output files,
     * thumbnails, and playlists. We recommend that you add a / or some other
     * delimiter to the end of the OutputKeyPrefix.
     * 
     * 
     * @return The value, if any, that you want Elastic Transcoder to prepend to
     *         the names of all files that this job creates, including output
     *         files, thumbnails, and playlists. We recommend that you add a /
     *         or some other delimiter to the end of the
     *         OutputKeyPrefix.
     */
    public String getOutputKeyPrefix() {
        return this.outputKeyPrefix;
    }
    /**
     * 
     * The value, if any, that you want Elastic Transcoder to prepend to the
     * names of all files that this job creates, including output files,
     * thumbnails, and playlists. We recommend that you add a / or some other
     * delimiter to the end of the OutputKeyPrefix.
     * 
     * 
     * @param outputKeyPrefix
     *        The value, if any, that you want Elastic Transcoder to prepend to
     *        the names of all files that this job creates, including output
     *        files, thumbnails, and playlists. We recommend that you add a / or
     *        some other delimiter to the end of the
     *        OutputKeyPrefix.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withOutputKeyPrefix(String outputKeyPrefix) {
        setOutputKeyPrefix(outputKeyPrefix);
        return this;
    }
    /**
     * 
     * Outputs in Fragmented MP4 or MPEG-TS format
     * only. If you specify a preset in PresetId for
     * which the value of Container is fmp4 (Fragmented MP4) or ts
     * (MPEG-TS), Playlists contains information about the master
     * playlists that you want Elastic Transcoder to create.
     * 
     * 
     * The maximum number of master playlists in a job is 30.
     * 
     * 
     * @return Outputs in Fragmented MP4 or MPEG-TS format only.If
     *         you specify a preset in PresetId for which the value
     *         of Container is fmp4 (Fragmented MP4) or ts
     *         (MPEG-TS), Playlists contains information about the
     *         master playlists that you want Elastic Transcoder to create. 
     */
    public java.util.List getPlaylists() {
        if (playlists == null) {
            playlists = new com.amazonaws.internal.SdkInternalList();
        }
        return playlists;
    }
    /**
     * 
     * Outputs in Fragmented MP4 or MPEG-TS format
     * only. If you specify a preset in PresetId for
     * which the value of Container is fmp4 (Fragmented MP4) or ts
     * (MPEG-TS), Playlists contains information about the master
     * playlists that you want Elastic Transcoder to create.
     * 
     * 
     * The maximum number of master playlists in a job is 30.
     * 
     * 
     * @param playlists
     *        Outputs in Fragmented MP4 or MPEG-TS format only.If
     *        you specify a preset in PresetId for which the value
     *        of Container is fmp4 (Fragmented MP4) or ts
     *        (MPEG-TS), Playlists contains information about the
     *        master playlists that you want Elastic Transcoder to create.
     */
    public void setPlaylists(java.util.Collection playlists) {
        if (playlists == null) {
            this.playlists = null;
            return;
        }
        this.playlists = new com.amazonaws.internal.SdkInternalList(
                playlists);
    }
    /**
     * 
     * Outputs in Fragmented MP4 or MPEG-TS format
     * only. If you specify a preset in PresetId for
     * which the value of Container is fmp4 (Fragmented MP4) or ts
     * (MPEG-TS), Playlists contains information about the master
     * playlists that you want Elastic Transcoder to create.
     * 
     * 
     * The maximum number of master playlists in a job is 30.
     * 
     * 
     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setPlaylists(java.util.Collection)} or
     * {@link #withPlaylists(java.util.Collection)} if you want to override the
     * existing values.
     * 
     * 
     * @param playlists
     *        Outputs in Fragmented MP4 or MPEG-TS format only.If
     *        you specify a preset in PresetId for which the value
     *        of Container is fmp4 (Fragmented MP4) or ts
     *        (MPEG-TS), Playlists contains information about the
     *        master playlists that you want Elastic Transcoder to create.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withPlaylists(Playlist... playlists) {
        if (this.playlists == null) {
            setPlaylists(new com.amazonaws.internal.SdkInternalList(
                    playlists.length));
        }
        for (Playlist ele : playlists) {
            this.playlists.add(ele);
        }
        return this;
    }
    /**
     * 
     * Outputs in Fragmented MP4 or MPEG-TS format
     * only. If you specify a preset in PresetId for
     * which the value of Container is fmp4 (Fragmented MP4) or ts
     * (MPEG-TS), Playlists contains information about the master
     * playlists that you want Elastic Transcoder to create.
     * 
     * 
     * The maximum number of master playlists in a job is 30.
     * 
     * 
     * @param playlists
     *        Outputs in Fragmented MP4 or MPEG-TS format only.If
     *        you specify a preset in PresetId for which the value
     *        of Container is fmp4 (Fragmented MP4) or ts
     *        (MPEG-TS), Playlists contains information about the
     *        master playlists that you want Elastic Transcoder to create.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withPlaylists(java.util.Collection playlists) {
        setPlaylists(playlists);
        return this;
    }
    /**
     * 
     * The status of the job: Submitted, Progressing,
     * Complete, Canceled, or Error.
     * 
     * 
     * @param status
     *        The status of the job: Submitted,
     *        Progressing, Complete,
     *        Canceled, or Error.
     */
    public void setStatus(String status) {
        this.status = status;
    }
    /**
     * 
     * The status of the job: Submitted, Progressing,
     * Complete, Canceled, or Error.
     * 
     * 
     * @return The status of the job: Submitted,
     *         Progressing, Complete,
     *         Canceled, or Error.
     */
    public String getStatus() {
        return this.status;
    }
    /**
     * 
     * The status of the job: Submitted, Progressing,
     * Complete, Canceled, or Error.
     * 
     * 
     * @param status
     *        The status of the job: Submitted,
     *        Progressing, Complete,
     *        Canceled, or Error.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withStatus(String status) {
        setStatus(status);
        return this;
    }
    /**
     * 
     * User-defined metadata that you want to associate with an Elastic
     * Transcoder job. You specify metadata in key/value pairs, and
     * you can add up to 10 key/value pairs per job. Elastic
     * Transcoder does not guarantee that key/value pairs will be
     * returned in the same order in which you specify them.
     * 
     * 
     * Metadata keys and values must use characters
     * from the following list:
     * 
     * 
     * - 
     * 
     * 0-9
     * 
     *  
     * - 
     * 
     * A-Z and a-z
     * 
     *  
     * - 
     * 
     * Space
     * 
     *  
     * - 
     * 
     * The following symbols: _.:/=+-%@
     * 
     *  
     * 
     * 
     * @return User-defined metadata that you want to associate with an Elastic
     *         Transcoder job. You specify metadata in key/value
     *         pairs, and you can add up to 10 key/value pairs per
     *         job. Elastic Transcoder does not guarantee that
     *         key/value pairs will be returned in the same order
     *         in which you specify them.
     *         
     *         Metadata keys and values must use
     *         characters from the following list:
     *         
     *         
     *         - 
     *         
     *         0-9
     *         
     *          
     *         - 
     *         
     *         A-Z and a-z
     *         
     *          
     *         - 
     *         
     *         Space
     *         
     *          
     *         - 
     *         
     *         The following symbols: _.:/=+-%@
     *         
     *          
     */
    public java.util.Map getUserMetadata() {
        if (userMetadata == null) {
            userMetadata = new com.amazonaws.internal.SdkInternalMap();
        }
        return userMetadata;
    }
    /**
     * 
     * User-defined metadata that you want to associate with an Elastic
     * Transcoder job. You specify metadata in key/value pairs, and
     * you can add up to 10 key/value pairs per job. Elastic
     * Transcoder does not guarantee that key/value pairs will be
     * returned in the same order in which you specify them.
     * 
     * 
     * Metadata keys and values must use characters
     * from the following list:
     * 
     * 
     * - 
     * 
     * 0-9
     * 
     *  
     * - 
     * 
     * A-Z and a-z
     * 
     *  
     * - 
     * 
     * Space
     * 
     *  
     * - 
     * 
     * The following symbols: _.:/=+-%@
     * 
     *  
     * 
     * 
     * @param userMetadata
     *        User-defined metadata that you want to associate with an Elastic
     *        Transcoder job. You specify metadata in key/value
     *        pairs, and you can add up to 10 key/value pairs per
     *        job. Elastic Transcoder does not guarantee that
     *        key/value pairs will be returned in the same order in
     *        which you specify them.
     *        
     *        Metadata keys and values must use
     *        characters from the following list:
     *        
     *        
     *        - 
     *        
     *        0-9
     *        
     *         
     *        - 
     *        
     *        A-Z and a-z
     *        
     *         
     *        - 
     *        
     *        Space
     *        
     *         
     *        - 
     *        
     *        The following symbols: _.:/=+-%@
     *        
     *         
     */
    public void setUserMetadata(java.util.Map userMetadata) {
        this.userMetadata = userMetadata == null ? null
                : new com.amazonaws.internal.SdkInternalMap(
                        userMetadata);
    }
    /**
     * 
     * User-defined metadata that you want to associate with an Elastic
     * Transcoder job. You specify metadata in key/value pairs, and
     * you can add up to 10 key/value pairs per job. Elastic
     * Transcoder does not guarantee that key/value pairs will be
     * returned in the same order in which you specify them.
     * 
     * 
     * Metadata keys and values must use characters
     * from the following list:
     * 
     * 
     * - 
     * 
     * 0-9
     * 
     *  
     * - 
     * 
     * A-Z and a-z
     * 
     *  
     * - 
     * 
     * Space
     * 
     *  
     * - 
     * 
     * The following symbols: _.:/=+-%@
     * 
     *  
     * 
     * 
     * @param userMetadata
     *        User-defined metadata that you want to associate with an Elastic
     *        Transcoder job. You specify metadata in key/value
     *        pairs, and you can add up to 10 key/value pairs per
     *        job. Elastic Transcoder does not guarantee that
     *        key/value pairs will be returned in the same order in
     *        which you specify them.
     *        
     *        Metadata keys and values must use
     *        characters from the following list:
     *        
     *        
     *        - 
     *        
     *        0-9
     *        
     *         
     *        - 
     *        
     *        A-Z and a-z
     *        
     *         
     *        - 
     *        
     *        Space
     *        
     *         
     *        - 
     *        
     *        The following symbols: _.:/=+-%@
     *        
     *         
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withUserMetadata(java.util.Map userMetadata) {
        setUserMetadata(userMetadata);
        return this;
    }
    public Job addUserMetadataEntry(String key, String value) {
        if (null == this.userMetadata) {
            this.userMetadata = new com.amazonaws.internal.SdkInternalMap();
        }
        if (this.userMetadata.containsKey(key))
            throw new IllegalArgumentException("Duplicated keys ("
                    + key.toString() + ") are provided.");
        this.userMetadata.put(key, value);
        return this;
    }
    /**
     * Removes all the entries added into UserMetadata. <p> Returns a
     * reference to this object so that method calls can be chained together.
     */
    public Job clearUserMetadataEntries() {
        this.userMetadata = null;
        return this;
    }
    /**
     * 
     * Details about the timing of a job.
     * 
     * 
     * @param timing
     *        Details about the timing of a job.
     */
    public void setTiming(Timing timing) {
        this.timing = timing;
    }
    /**
     * 
     * Details about the timing of a job.
     * 
     * 
     * @return Details about the timing of a job.
     */
    public Timing getTiming() {
        return this.timing;
    }
    /**
     * 
     * Details about the timing of a job.
     * 
     * 
     * @param timing
     *        Details about the timing of a job.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */
    public Job withTiming(Timing timing) {
        setTiming(timing);
        return this;
    }
    /**
     * Returns a string representation of this object; useful for testing and
     * debugging.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getId() != null)
            sb.append("Id: " + getId() + ",");
        if (getArn() != null)
            sb.append("Arn: " + getArn() + ",");
        if (getPipelineId() != null)
            sb.append("PipelineId: " + getPipelineId() + ",");
        if (getInput() != null)
            sb.append("Input: " + getInput() + ",");
        if (getOutput() != null)
            sb.append("Output: " + getOutput() + ",");
        if (getOutputs() != null)
            sb.append("Outputs: " + getOutputs() + ",");
        if (getOutputKeyPrefix() != null)
            sb.append("OutputKeyPrefix: " + getOutputKeyPrefix() + ",");
        if (getPlaylists() != null)
            sb.append("Playlists: " + getPlaylists() + ",");
        if (getStatus() != null)
            sb.append("Status: " + getStatus() + ",");
        if (getUserMetadata() != null)
            sb.append("UserMetadata: " + getUserMetadata() + ",");
        if (getTiming() != null)
            sb.append("Timing: " + getTiming());
        sb.append("}");
        return sb.toString();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (obj instanceof Job == false)
            return false;
        Job other = (Job) obj;
        if (other.getId() == null ^ this.getId() == null)
            return false;
        if (other.getId() != null
                && other.getId().equals(this.getId()) == false)
            return false;
        if (other.getArn() == null ^ this.getArn() == null)
            return false;
        if (other.getArn() != null
                && other.getArn().equals(this.getArn()) == false)
            return false;
        if (other.getPipelineId() == null ^ this.getPipelineId() == null)
            return false;
        if (other.getPipelineId() != null
                && other.getPipelineId().equals(this.getPipelineId()) == false)
            return false;
        if (other.getInput() == null ^ this.getInput() == null)
            return false;
        if (other.getInput() != null
                && other.getInput().equals(this.getInput()) == false)
            return false;
        if (other.getOutput() == null ^ this.getOutput() == null)
            return false;
        if (other.getOutput() != null
                && other.getOutput().equals(this.getOutput()) == false)
            return false;
        if (other.getOutputs() == null ^ this.getOutputs() == null)
            return false;
        if (other.getOutputs() != null
                && other.getOutputs().equals(this.getOutputs()) == false)
            return false;
        if (other.getOutputKeyPrefix() == null
                ^ this.getOutputKeyPrefix() == null)
            return false;
        if (other.getOutputKeyPrefix() != null
                && other.getOutputKeyPrefix().equals(this.getOutputKeyPrefix()) == false)
            return false;
        if (other.getPlaylists() == null ^ this.getPlaylists() == null)
            return false;
        if (other.getPlaylists() != null
                && other.getPlaylists().equals(this.getPlaylists()) == false)
            return false;
        if (other.getStatus() == null ^ this.getStatus() == null)
            return false;
        if (other.getStatus() != null
                && other.getStatus().equals(this.getStatus()) == false)
            return false;
        if (other.getUserMetadata() == null ^ this.getUserMetadata() == null)
            return false;
        if (other.getUserMetadata() != null
                && other.getUserMetadata().equals(this.getUserMetadata()) == false)
            return false;
        if (other.getTiming() == null ^ this.getTiming() == null)
            return false;
        if (other.getTiming() != null
                && other.getTiming().equals(this.getTiming()) == false)
            return false;
        return true;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;
        hashCode = prime * hashCode
                + ((getId() == null) ? 0 : getId().hashCode());
        hashCode = prime * hashCode
                + ((getArn() == null) ? 0 : getArn().hashCode());
        hashCode = prime * hashCode
                + ((getPipelineId() == null) ? 0 : getPipelineId().hashCode());
        hashCode = prime * hashCode
                + ((getInput() == null) ? 0 : getInput().hashCode());
        hashCode = prime * hashCode
                + ((getOutput() == null) ? 0 : getOutput().hashCode());
        hashCode = prime * hashCode
                + ((getOutputs() == null) ? 0 : getOutputs().hashCode());
        hashCode = prime
                * hashCode
                + ((getOutputKeyPrefix() == null) ? 0 : getOutputKeyPrefix()
                        .hashCode());
        hashCode = prime * hashCode
                + ((getPlaylists() == null) ? 0 : getPlaylists().hashCode());
        hashCode = prime * hashCode
                + ((getStatus() == null) ? 0 : getStatus().hashCode());
        hashCode = prime
                * hashCode
                + ((getUserMetadata() == null) ? 0 : getUserMetadata()
                        .hashCode());
        hashCode = prime * hashCode
                + ((getTiming() == null) ? 0 : getTiming().hashCode());
        return hashCode;
    }
    @Override
    public Job clone() {
        try {
            return (Job) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException(
                    "Got a CloneNotSupportedException from Object.clone() "
                            + "even though we're Cloneable!", e);
        }
    }
}