// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.storage.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecAwsS3DataSourceArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecAzureBlobStorageDataSourceArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecGcsDataSinkArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecGcsDataSourceArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecHttpDataSourceArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecObjectConditionsArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecPosixDataSinkArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecPosixDataSourceArgs;
import com.pulumi.gcp.storage.inputs.TransferJobTransferSpecTransferOptionsArgs;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class TransferJobTransferSpecArgs extends com.pulumi.resources.ResourceArgs {

    public static final TransferJobTransferSpecArgs Empty = new TransferJobTransferSpecArgs();

    /**
     * An AWS S3 data source. Structure documented below.
     * 
     */
    @Import(name="awsS3DataSource")
    private @Nullable Output<TransferJobTransferSpecAwsS3DataSourceArgs> awsS3DataSource;

    /**
     * @return An AWS S3 data source. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecAwsS3DataSourceArgs>> awsS3DataSource() {
        return Optional.ofNullable(this.awsS3DataSource);
    }

    /**
     * An Azure Blob Storage data source. Structure documented below.
     * 
     */
    @Import(name="azureBlobStorageDataSource")
    private @Nullable Output<TransferJobTransferSpecAzureBlobStorageDataSourceArgs> azureBlobStorageDataSource;

    /**
     * @return An Azure Blob Storage data source. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecAzureBlobStorageDataSourceArgs>> azureBlobStorageDataSource() {
        return Optional.ofNullable(this.azureBlobStorageDataSource);
    }

    /**
     * A Google Cloud Storage data sink. Structure documented below.
     * 
     */
    @Import(name="gcsDataSink")
    private @Nullable Output<TransferJobTransferSpecGcsDataSinkArgs> gcsDataSink;

    /**
     * @return A Google Cloud Storage data sink. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecGcsDataSinkArgs>> gcsDataSink() {
        return Optional.ofNullable(this.gcsDataSink);
    }

    /**
     * A Google Cloud Storage data source. Structure documented below.
     * 
     */
    @Import(name="gcsDataSource")
    private @Nullable Output<TransferJobTransferSpecGcsDataSourceArgs> gcsDataSource;

    /**
     * @return A Google Cloud Storage data source. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecGcsDataSourceArgs>> gcsDataSource() {
        return Optional.ofNullable(this.gcsDataSource);
    }

    /**
     * A HTTP URL data source. Structure documented below.
     * 
     */
    @Import(name="httpDataSource")
    private @Nullable Output<TransferJobTransferSpecHttpDataSourceArgs> httpDataSource;

    /**
     * @return A HTTP URL data source. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecHttpDataSourceArgs>> httpDataSource() {
        return Optional.ofNullable(this.httpDataSource);
    }

    /**
     * Only objects that satisfy these object conditions are included in the set of data source and data sink objects. Object conditions based on objects&#39; `last_modification_time` do not exclude objects in a data sink. Structure documented below.
     * 
     */
    @Import(name="objectConditions")
    private @Nullable Output<TransferJobTransferSpecObjectConditionsArgs> objectConditions;

    /**
     * @return Only objects that satisfy these object conditions are included in the set of data source and data sink objects. Object conditions based on objects&#39; `last_modification_time` do not exclude objects in a data sink. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecObjectConditionsArgs>> objectConditions() {
        return Optional.ofNullable(this.objectConditions);
    }

    /**
     * A POSIX data sink. Structure documented below.
     * 
     */
    @Import(name="posixDataSink")
    private @Nullable Output<TransferJobTransferSpecPosixDataSinkArgs> posixDataSink;

    /**
     * @return A POSIX data sink. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecPosixDataSinkArgs>> posixDataSink() {
        return Optional.ofNullable(this.posixDataSink);
    }

    /**
     * A POSIX filesystem data source. Structure documented below.
     * 
     */
    @Import(name="posixDataSource")
    private @Nullable Output<TransferJobTransferSpecPosixDataSourceArgs> posixDataSource;

    /**
     * @return A POSIX filesystem data source. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecPosixDataSourceArgs>> posixDataSource() {
        return Optional.ofNullable(this.posixDataSource);
    }

    /**
     * Specifies the agent pool name associated with the posix data sink. When unspecified, the default name is used.
     * 
     */
    @Import(name="sinkAgentPoolName")
    private @Nullable Output<String> sinkAgentPoolName;

    /**
     * @return Specifies the agent pool name associated with the posix data sink. When unspecified, the default name is used.
     * 
     */
    public Optional<Output<String>> sinkAgentPoolName() {
        return Optional.ofNullable(this.sinkAgentPoolName);
    }

    /**
     * Specifies the agent pool name associated with the posix data source. When unspecified, the default name is used.
     * 
     */
    @Import(name="sourceAgentPoolName")
    private @Nullable Output<String> sourceAgentPoolName;

    /**
     * @return Specifies the agent pool name associated with the posix data source. When unspecified, the default name is used.
     * 
     */
    public Optional<Output<String>> sourceAgentPoolName() {
        return Optional.ofNullable(this.sourceAgentPoolName);
    }

    /**
     * Characteristics of how to treat files from datasource and sink during job. If the option `delete_objects_unique_in_sink` is true, object conditions based on objects&#39; `last_modification_time` are ignored and do not exclude objects in a data source or a data sink. Structure documented below.
     * 
     */
    @Import(name="transferOptions")
    private @Nullable Output<TransferJobTransferSpecTransferOptionsArgs> transferOptions;

    /**
     * @return Characteristics of how to treat files from datasource and sink during job. If the option `delete_objects_unique_in_sink` is true, object conditions based on objects&#39; `last_modification_time` are ignored and do not exclude objects in a data source or a data sink. Structure documented below.
     * 
     */
    public Optional<Output<TransferJobTransferSpecTransferOptionsArgs>> transferOptions() {
        return Optional.ofNullable(this.transferOptions);
    }

    private TransferJobTransferSpecArgs() {}

    private TransferJobTransferSpecArgs(TransferJobTransferSpecArgs $) {
        this.awsS3DataSource = $.awsS3DataSource;
        this.azureBlobStorageDataSource = $.azureBlobStorageDataSource;
        this.gcsDataSink = $.gcsDataSink;
        this.gcsDataSource = $.gcsDataSource;
        this.httpDataSource = $.httpDataSource;
        this.objectConditions = $.objectConditions;
        this.posixDataSink = $.posixDataSink;
        this.posixDataSource = $.posixDataSource;
        this.sinkAgentPoolName = $.sinkAgentPoolName;
        this.sourceAgentPoolName = $.sourceAgentPoolName;
        this.transferOptions = $.transferOptions;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(TransferJobTransferSpecArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private TransferJobTransferSpecArgs $;

        public Builder() {
            $ = new TransferJobTransferSpecArgs();
        }

        public Builder(TransferJobTransferSpecArgs defaults) {
            $ = new TransferJobTransferSpecArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param awsS3DataSource An AWS S3 data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder awsS3DataSource(@Nullable Output<TransferJobTransferSpecAwsS3DataSourceArgs> awsS3DataSource) {
            $.awsS3DataSource = awsS3DataSource;
            return this;
        }

        /**
         * @param awsS3DataSource An AWS S3 data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder awsS3DataSource(TransferJobTransferSpecAwsS3DataSourceArgs awsS3DataSource) {
            return awsS3DataSource(Output.of(awsS3DataSource));
        }

        /**
         * @param azureBlobStorageDataSource An Azure Blob Storage data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder azureBlobStorageDataSource(@Nullable Output<TransferJobTransferSpecAzureBlobStorageDataSourceArgs> azureBlobStorageDataSource) {
            $.azureBlobStorageDataSource = azureBlobStorageDataSource;
            return this;
        }

        /**
         * @param azureBlobStorageDataSource An Azure Blob Storage data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder azureBlobStorageDataSource(TransferJobTransferSpecAzureBlobStorageDataSourceArgs azureBlobStorageDataSource) {
            return azureBlobStorageDataSource(Output.of(azureBlobStorageDataSource));
        }

        /**
         * @param gcsDataSink A Google Cloud Storage data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder gcsDataSink(@Nullable Output<TransferJobTransferSpecGcsDataSinkArgs> gcsDataSink) {
            $.gcsDataSink = gcsDataSink;
            return this;
        }

        /**
         * @param gcsDataSink A Google Cloud Storage data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder gcsDataSink(TransferJobTransferSpecGcsDataSinkArgs gcsDataSink) {
            return gcsDataSink(Output.of(gcsDataSink));
        }

        /**
         * @param gcsDataSource A Google Cloud Storage data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder gcsDataSource(@Nullable Output<TransferJobTransferSpecGcsDataSourceArgs> gcsDataSource) {
            $.gcsDataSource = gcsDataSource;
            return this;
        }

        /**
         * @param gcsDataSource A Google Cloud Storage data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder gcsDataSource(TransferJobTransferSpecGcsDataSourceArgs gcsDataSource) {
            return gcsDataSource(Output.of(gcsDataSource));
        }

        /**
         * @param httpDataSource A HTTP URL data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder httpDataSource(@Nullable Output<TransferJobTransferSpecHttpDataSourceArgs> httpDataSource) {
            $.httpDataSource = httpDataSource;
            return this;
        }

        /**
         * @param httpDataSource A HTTP URL data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder httpDataSource(TransferJobTransferSpecHttpDataSourceArgs httpDataSource) {
            return httpDataSource(Output.of(httpDataSource));
        }

        /**
         * @param objectConditions Only objects that satisfy these object conditions are included in the set of data source and data sink objects. Object conditions based on objects&#39; `last_modification_time` do not exclude objects in a data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder objectConditions(@Nullable Output<TransferJobTransferSpecObjectConditionsArgs> objectConditions) {
            $.objectConditions = objectConditions;
            return this;
        }

        /**
         * @param objectConditions Only objects that satisfy these object conditions are included in the set of data source and data sink objects. Object conditions based on objects&#39; `last_modification_time` do not exclude objects in a data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder objectConditions(TransferJobTransferSpecObjectConditionsArgs objectConditions) {
            return objectConditions(Output.of(objectConditions));
        }

        /**
         * @param posixDataSink A POSIX data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder posixDataSink(@Nullable Output<TransferJobTransferSpecPosixDataSinkArgs> posixDataSink) {
            $.posixDataSink = posixDataSink;
            return this;
        }

        /**
         * @param posixDataSink A POSIX data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder posixDataSink(TransferJobTransferSpecPosixDataSinkArgs posixDataSink) {
            return posixDataSink(Output.of(posixDataSink));
        }

        /**
         * @param posixDataSource A POSIX filesystem data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder posixDataSource(@Nullable Output<TransferJobTransferSpecPosixDataSourceArgs> posixDataSource) {
            $.posixDataSource = posixDataSource;
            return this;
        }

        /**
         * @param posixDataSource A POSIX filesystem data source. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder posixDataSource(TransferJobTransferSpecPosixDataSourceArgs posixDataSource) {
            return posixDataSource(Output.of(posixDataSource));
        }

        /**
         * @param sinkAgentPoolName Specifies the agent pool name associated with the posix data sink. When unspecified, the default name is used.
         * 
         * @return builder
         * 
         */
        public Builder sinkAgentPoolName(@Nullable Output<String> sinkAgentPoolName) {
            $.sinkAgentPoolName = sinkAgentPoolName;
            return this;
        }

        /**
         * @param sinkAgentPoolName Specifies the agent pool name associated with the posix data sink. When unspecified, the default name is used.
         * 
         * @return builder
         * 
         */
        public Builder sinkAgentPoolName(String sinkAgentPoolName) {
            return sinkAgentPoolName(Output.of(sinkAgentPoolName));
        }

        /**
         * @param sourceAgentPoolName Specifies the agent pool name associated with the posix data source. When unspecified, the default name is used.
         * 
         * @return builder
         * 
         */
        public Builder sourceAgentPoolName(@Nullable Output<String> sourceAgentPoolName) {
            $.sourceAgentPoolName = sourceAgentPoolName;
            return this;
        }

        /**
         * @param sourceAgentPoolName Specifies the agent pool name associated with the posix data source. When unspecified, the default name is used.
         * 
         * @return builder
         * 
         */
        public Builder sourceAgentPoolName(String sourceAgentPoolName) {
            return sourceAgentPoolName(Output.of(sourceAgentPoolName));
        }

        /**
         * @param transferOptions Characteristics of how to treat files from datasource and sink during job. If the option `delete_objects_unique_in_sink` is true, object conditions based on objects&#39; `last_modification_time` are ignored and do not exclude objects in a data source or a data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder transferOptions(@Nullable Output<TransferJobTransferSpecTransferOptionsArgs> transferOptions) {
            $.transferOptions = transferOptions;
            return this;
        }

        /**
         * @param transferOptions Characteristics of how to treat files from datasource and sink during job. If the option `delete_objects_unique_in_sink` is true, object conditions based on objects&#39; `last_modification_time` are ignored and do not exclude objects in a data source or a data sink. Structure documented below.
         * 
         * @return builder
         * 
         */
        public Builder transferOptions(TransferJobTransferSpecTransferOptionsArgs transferOptions) {
            return transferOptions(Output.of(transferOptions));
        }

        public TransferJobTransferSpecArgs build() {
            return $;
        }
    }

}
