/**
 * 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 com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Specifies how a Job should be assigned to a Pool.
 */
public class PoolInformation {
    /**
     * The ID of an existing Pool. All the Tasks of the Job will run on the
     * specified Pool.
     * You must ensure that the Pool referenced by this property exists. If the
     * Pool does not exist at the time the Batch service tries to schedule a
     * Job, no Tasks for the Job will run until you create a Pool with that id.
     * Note that the Batch service will not reject the Job request; it will
     * simply not run Tasks until the Pool exists. You must specify either the
     * Pool ID or the auto Pool specification, but not both.
     */
    @JsonProperty(value = "poolId")
    private String poolId;

    /**
     * Characteristics for a temporary 'auto pool'. The Batch service will
     * create this auto Pool when the Job is submitted.
     * If auto Pool creation fails, the Batch service moves the Job to a
     * completed state, and the Pool creation error is set in the Job's
     * scheduling error property. The Batch service manages the lifetime (both
     * creation and, unless keepAlive is specified, deletion) of the auto Pool.
     * Any user actions that affect the lifetime of the auto Pool while the Job
     * is active will result in unexpected behavior. You must specify either
     * the Pool ID or the auto Pool specification, but not both.
     */
    @JsonProperty(value = "autoPoolSpecification")
    private AutoPoolSpecification autoPoolSpecification;

    /**
     * Get you must ensure that the Pool referenced by this property exists. If the Pool does not exist at the time the Batch service tries to schedule a Job, no Tasks for the Job will run until you create a Pool with that id. Note that the Batch service will not reject the Job request; it will simply not run Tasks until the Pool exists. You must specify either the Pool ID or the auto Pool specification, but not both.
     *
     * @return the poolId value
     */
    public String poolId() {
        return this.poolId;
    }

    /**
     * Set you must ensure that the Pool referenced by this property exists. If the Pool does not exist at the time the Batch service tries to schedule a Job, no Tasks for the Job will run until you create a Pool with that id. Note that the Batch service will not reject the Job request; it will simply not run Tasks until the Pool exists. You must specify either the Pool ID or the auto Pool specification, but not both.
     *
     * @param poolId the poolId value to set
     * @return the PoolInformation object itself.
     */
    public PoolInformation withPoolId(String poolId) {
        this.poolId = poolId;
        return this;
    }

    /**
     * Get if auto Pool creation fails, the Batch service moves the Job to a completed state, and the Pool creation error is set in the Job's scheduling error property. The Batch service manages the lifetime (both creation and, unless keepAlive is specified, deletion) of the auto Pool. Any user actions that affect the lifetime of the auto Pool while the Job is active will result in unexpected behavior. You must specify either the Pool ID or the auto Pool specification, but not both.
     *
     * @return the autoPoolSpecification value
     */
    public AutoPoolSpecification autoPoolSpecification() {
        return this.autoPoolSpecification;
    }

    /**
     * Set if auto Pool creation fails, the Batch service moves the Job to a completed state, and the Pool creation error is set in the Job's scheduling error property. The Batch service manages the lifetime (both creation and, unless keepAlive is specified, deletion) of the auto Pool. Any user actions that affect the lifetime of the auto Pool while the Job is active will result in unexpected behavior. You must specify either the Pool ID or the auto Pool specification, but not both.
     *
     * @param autoPoolSpecification the autoPoolSpecification value to set
     * @return the PoolInformation object itself.
     */
    public PoolInformation withAutoPoolSpecification(AutoPoolSpecification autoPoolSpecification) {
        this.autoPoolSpecification = autoPoolSpecification;
        return this;
    }

}
