/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 */

package com.microsoft.azure.batch.protocol.models;

import org.joda.time.DateTime;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Contains information about the execution of a Job Release Task on a Compute
 * Node.
 */
public class JobReleaseTaskExecutionInformation {
    /**
     * The time at which the Task started running.
     * If the Task has been restarted or retried, this is the most recent time
     * at which the Task started running.
     */
    @JsonProperty(value = "startTime", required = true)
    private DateTime startTime;

    /**
     * The time at which the Job Release Task completed.
     * This property is set only if the Task is in the Completed state.
     */
    @JsonProperty(value = "endTime")
    private DateTime endTime;

    /**
     * The current state of the Job Release Task on the Compute Node.
     * Possible values include: 'running', 'completed'.
     */
    @JsonProperty(value = "state", required = true)
    private JobReleaseTaskState state;

    /**
     * The root directory of the Job Release Task on the Compute Node. You can
     * use this path to retrieve files created by the Task, such as log files.
     */
    @JsonProperty(value = "taskRootDirectory")
    private String taskRootDirectory;

    /**
     * The URL to the root directory of the Job Release Task on the Compute
     * Node.
     */
    @JsonProperty(value = "taskRootDirectoryUrl")
    private String taskRootDirectoryUrl;

    /**
     * The exit code of the program specified on the Task command line.
     * This parameter is returned only if the Task is in the completed state.
     * The exit code for a process reflects the specific convention implemented
     * by the application developer for that process. If you use the exit code
     * value to make decisions in your code, be sure that you know the exit
     * code convention used by the application process. Note that the exit code
     * may also be generated by the Compute Node operating system, such as when
     * a process is forcibly terminated.
     */
    @JsonProperty(value = "exitCode")
    private Integer exitCode;

    /**
     * Information about the container under which the Task is executing.
     * This property is set only if the Task runs in a container context.
     */
    @JsonProperty(value = "containerInfo")
    private TaskContainerExecutionInformation containerInfo;

    /**
     * Information describing the Task failure, if any.
     * This property is set only if the Task is in the completed state and
     * encountered a failure.
     */
    @JsonProperty(value = "failureInfo")
    private TaskFailureInformation failureInfo;

    /**
     * The result of the Task execution.
     * If the value is 'failed', then the details of the failure can be found
     * in the failureInfo property. Possible values include: 'success',
     * 'failure'.
     */
    @JsonProperty(value = "result")
    private TaskExecutionResult result;

    /**
     * Get if the Task has been restarted or retried, this is the most recent time at which the Task started running.
     *
     * @return the startTime value
     */
    public DateTime startTime() {
        return this.startTime;
    }

    /**
     * Set if the Task has been restarted or retried, this is the most recent time at which the Task started running.
     *
     * @param startTime the startTime value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withStartTime(DateTime startTime) {
        this.startTime = startTime;
        return this;
    }

    /**
     * Get this property is set only if the Task is in the Completed state.
     *
     * @return the endTime value
     */
    public DateTime endTime() {
        return this.endTime;
    }

    /**
     * Set this property is set only if the Task is in the Completed state.
     *
     * @param endTime the endTime value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withEndTime(DateTime endTime) {
        this.endTime = endTime;
        return this;
    }

    /**
     * Get possible values include: 'running', 'completed'.
     *
     * @return the state value
     */
    public JobReleaseTaskState state() {
        return this.state;
    }

    /**
     * Set possible values include: 'running', 'completed'.
     *
     * @param state the state value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withState(JobReleaseTaskState state) {
        this.state = state;
        return this;
    }

    /**
     * Get the taskRootDirectory value.
     *
     * @return the taskRootDirectory value
     */
    public String taskRootDirectory() {
        return this.taskRootDirectory;
    }

    /**
     * Set the taskRootDirectory value.
     *
     * @param taskRootDirectory the taskRootDirectory value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withTaskRootDirectory(String taskRootDirectory) {
        this.taskRootDirectory = taskRootDirectory;
        return this;
    }

    /**
     * Get the taskRootDirectoryUrl value.
     *
     * @return the taskRootDirectoryUrl value
     */
    public String taskRootDirectoryUrl() {
        return this.taskRootDirectoryUrl;
    }

    /**
     * Set the taskRootDirectoryUrl value.
     *
     * @param taskRootDirectoryUrl the taskRootDirectoryUrl value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withTaskRootDirectoryUrl(String taskRootDirectoryUrl) {
        this.taskRootDirectoryUrl = taskRootDirectoryUrl;
        return this;
    }

    /**
     * Get this parameter is returned only if the Task is in the completed state. The exit code for a process reflects the specific convention implemented by the application developer for that process. If you use the exit code value to make decisions in your code, be sure that you know the exit code convention used by the application process. Note that the exit code may also be generated by the Compute Node operating system, such as when a process is forcibly terminated.
     *
     * @return the exitCode value
     */
    public Integer exitCode() {
        return this.exitCode;
    }

    /**
     * Set this parameter is returned only if the Task is in the completed state. The exit code for a process reflects the specific convention implemented by the application developer for that process. If you use the exit code value to make decisions in your code, be sure that you know the exit code convention used by the application process. Note that the exit code may also be generated by the Compute Node operating system, such as when a process is forcibly terminated.
     *
     * @param exitCode the exitCode value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withExitCode(Integer exitCode) {
        this.exitCode = exitCode;
        return this;
    }

    /**
     * Get this property is set only if the Task runs in a container context.
     *
     * @return the containerInfo value
     */
    public TaskContainerExecutionInformation containerInfo() {
        return this.containerInfo;
    }

    /**
     * Set this property is set only if the Task runs in a container context.
     *
     * @param containerInfo the containerInfo value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withContainerInfo(TaskContainerExecutionInformation containerInfo) {
        this.containerInfo = containerInfo;
        return this;
    }

    /**
     * Get this property is set only if the Task is in the completed state and encountered a failure.
     *
     * @return the failureInfo value
     */
    public TaskFailureInformation failureInfo() {
        return this.failureInfo;
    }

    /**
     * Set this property is set only if the Task is in the completed state and encountered a failure.
     *
     * @param failureInfo the failureInfo value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withFailureInfo(TaskFailureInformation failureInfo) {
        this.failureInfo = failureInfo;
        return this;
    }

    /**
     * Get if the value is 'failed', then the details of the failure can be found in the failureInfo property. Possible values include: 'success', 'failure'.
     *
     * @return the result value
     */
    public TaskExecutionResult result() {
        return this.result;
    }

    /**
     * Set if the value is 'failed', then the details of the failure can be found in the failureInfo property. Possible values include: 'success', 'failure'.
     *
     * @param result the result value to set
     * @return the JobReleaseTaskExecutionInformation object itself.
     */
    public JobReleaseTaskExecutionInformation withResult(TaskExecutionResult result) {
        this.result = result;
        return this;
    }

}
