text:
package com.amazonaws.services.datasync.model;

import java.io.Serializable;
import javax.annotation.Generated;
import com.amazonaws.protocol.StructuredPojo;
import com.amazonaws.protocol.ProtocolMarshaller;

/**
 *

 * Represents the options that are available to control the behavior of a StartTaskExecution
 * operation. Behavior includes preserving metadata such as user ID (UID), group ID (GID), and file permissions, and
 * also overwriting files in the destination, data integrity verification, and so on.
 *

 *

 * A task has a set of default options associated with it. If you don't specify an option in StartTaskExecution, the
 * default value is used. You can override the defaults options on each task execution by specifying an overriding
 * Options value to StartTaskExecution.
 *

 *
 * @see AWS API
 *      Documentation
 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class Options implements Serializable, Cloneable, StructuredPojo {

    /**
     *

     * A value that determines whether a data integrity verification should be performed at the end of a task execution
     * after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     * Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     * ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were transferred.
     *

     *

     * POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the transfer
     * to verify that source and destination are fully synchronized. This option isn't supported when transferring to S3
     * Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     * NONE: No additional verification is done at the end of the transfer, but all data transmissions are
     * integrity-checked with checksum verification during the transfer.
     *

     */
    private String verifyMode;
    /**
     *

     * A value that determines whether files at the destination should be overwritten or preserved when copying files.
     * If set to NEVER a destination file will not be replaced by a source file, even if the destination
     * file differs from the source file. If you modify files in the destination and you sync the files, you can use
     * this value to protect against overwriting those changes.
     *

     *

     * Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed information, see
     *
     * Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     */
    private String overwriteMode;
    /**
     *

     * A file metadata value that shows the last time a file was accessed (that is, when the file was read or written
     * to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the original
     * Atime attribute on all source files (that is, the version before the PREPARING phase).
     * However, Atime's behavior is not fully standard across platforms, so DataSync can only do this on a
     * best-effort basis.
     *

     *

     * Default value: BEST_EFFORT
     *

     *

     * BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     * NONE: Ignore Atime.
     *

     * <note>
     *

     * If Atime is set to BEST_EFFORT, Mtime must be set to PRESERVE
     * .
     *

     *

     * If Atime is set to NONE, Mtime must also be NONE.
     *

     * </note>
     */
    private String atime;
    /**
     *

     * A value that indicates the last time that a file was modified (that is, a file was written to) before the
     * PREPARING phase. This option is required for cases when you need to run the same task more than one
     * time.
     *

     *

     * Default Value: PRESERVE
     *

     *

     * PRESERVE: Preserve original Mtime (recommended)
     *

     *

     * NONE: Ignore Mtime.
     *

     * <note>
     *

     * If Mtime is set to PRESERVE, Atime must be set to BEST_EFFORT
     * .
     *

     *

     * If Mtime is set to NONE, Atime must also be set to NONE.
     *

     * </note>
     */
    private String mtime;
    /**
     *

     * The POSIX user ID (UID) of the file's owner.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     */
    private String uid;
    /**
     *

     * The POSIX group ID (GID) of the file's owners.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     */
    private String gid;
    /**
     *

     * A value that specifies whether files in the destination that don't exist in the source file system should be
     * preserved. This option can affect your storage cost. If your task deletes objects, you might incur minimum
     * storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Ignore such destination files (recommended).
     *

     *

     * REMOVE: Delete destination files that aren't present in the source.
     *

     */
    private String preserveDeletedFiles;
    /**
     *

     * A value that determines whether DataSync should preserve the metadata of block and character devices in the
     * source file system, and re-create the files with that device name and metadata on the destination. DataSync does
     * not copy the contents of such devices, only the name and metadata.
     *

     * <note>
     *

     * DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     * end-of-file (EOF) marker.
     *

     * </note>
     *

     * Default value: NONE
     *

     *

     * NONE: Ignore special devices (recommended).
     *

     *

     * PRESERVE: Preserve character and block device metadata. This option isn't currently supported for
     * Amazon EFS.
     *

     */
    private String preserveDevices;
    /**
     *

     * A value that determines which users or groups can access a file for a specific purpose such as reading, writing,
     * or execution of the file.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     * NONE: Ignore permissions.
     *

     * <note>
     *

     * DataSync can preserve extant permissions of a source location.
     *

     * </note>
     */
    private String posixPermissions;
    /**
     *

     * A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of 1 MB,
     * set this value to 1048576 (=1024*1024).
     *

     */
    private Long bytesPerSecond;
    /**
     *

     * A value that determines whether tasks should be queued before executing the tasks. If set to ENABLED
     * , the tasks will be queued. The default is ENABLED.
     *

     *

     * If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more information,
     * see Queueing
     * task executions.
     *

     */
    private String taskQueueing;
    /**
     *

     * A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch log
     * group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC publishes logs
     * on errors for individual files transferred, and TRANSFER publishes logs for every file or object
     * that is transferred and integrity checked.
     *

     */
    private String logLevel;
    /**
     *

     * A value that determines whether DataSync transfers only the data and metadata that differ between the source and
     * the destination location, or whether DataSync transfers all the content from the source, without comparing to the
     * destination location.
     *

     *

     * CHANGED: DataSync copies only data or metadata that is new or different content from the source
     * location to the destination location.
     *

     *

     * ALL: DataSync copies all source location content to the destination, without comparing to existing
     * content on the destination.
     *

     */
    private String transferMode;
    /**
     *

     * A value that determines which components of the SMB security descriptor are copied from source to destination
     * objects.
     *

     *

     * This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or between
     * two Amazon FSx for Windows File Server locations. For more information about how DataSync handles metadata, see
     * How DataSync Handles Metadata
     * and Special Files.
     *

     *

     * Default value: OWNER_DACL
     *

     *

     * OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are used by
     * administrators to log attempts to access a secured object.
     *

     *

     * OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a secured
     * object.
     *

     *

     *

     *

     * Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access your SMB
     * location. For information about choosing a user that ensures sufficient permissions to files, folders, and
     * metadata, see user.
     *

     *

     * NONE: None of the SMB security descriptor components are copied. Destination objects are owned by
     * the user that was provided for accessing the destination location. DACLs and SACLs are set based on the
     * destination server's configuration.
     *

     */
    private String securityDescriptorCopyFlags;
    /**
     *

     * Specifies whether object tags are maintained when transferring between object storage systems. If you want your
     * DataSync task to ignore object tags, specify the NONE value.
     *

     *

     * Default Value: PRESERVE
     *

     */
    private String objectTags;

    /**
     *

     * A value that determines whether a data integrity verification should be performed at the end of a task execution
     * after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     * Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     * ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were transferred.
     *

     *

     * POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the transfer
     * to verify that source and destination are fully synchronized. This option isn't supported when transferring to S3
     * Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     * NONE: No additional verification is done at the end of the transfer, but all data transmissions are
     * integrity-checked with checksum verification during the transfer.
     *

     *
     * @param verifyMode
     *        A value that determines whether a data integrity verification should be performed at the end of a task
     *        execution after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     *        Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     *        ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were
     *        transferred.
     *

     *

     *        POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the
     *        transfer to verify that source and destination are fully synchronized. This option isn't supported when
     *        transferring to S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     *        NONE: No additional verification is done at the end of the transfer, but all data
     *        transmissions are integrity-checked with checksum verification during the transfer.
     * @see VerifyMode
     */

    public void setVerifyMode(String verifyMode) {
        this.verifyMode = verifyMode;
    }

    /**
     *

     * A value that determines whether a data integrity verification should be performed at the end of a task execution
     * after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     * Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     * ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were transferred.
     *

     *

     * POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the transfer
     * to verify that source and destination are fully synchronized. This option isn't supported when transferring to S3
     * Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     * NONE: No additional verification is done at the end of the transfer, but all data transmissions are
     * integrity-checked with checksum verification during the transfer.
     *

     *
     * @return A value that determines whether a data integrity verification should be performed at the end of a task
     *         execution after all data and metadata have been transferred. For more information, see Configure task
     *         settings.

     *

     *         Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     *         ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were
     *         transferred.
     *

     *

     *         POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the
     *         transfer to verify that source and destination are fully synchronized. This option isn't supported when
     *         transferring to S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     *         NONE: No additional verification is done at the end of the transfer, but all data
     *         transmissions are integrity-checked with checksum verification during the transfer.
     * @see VerifyMode
     */

    public String getVerifyMode() {
        return this.verifyMode;
    }

    /**
     *

     * A value that determines whether a data integrity verification should be performed at the end of a task execution
     * after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     * Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     * ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were transferred.
     *

     *

     * POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the transfer
     * to verify that source and destination are fully synchronized. This option isn't supported when transferring to S3
     * Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     * NONE: No additional verification is done at the end of the transfer, but all data transmissions are
     * integrity-checked with checksum verification during the transfer.
     *

     *
     * @param verifyMode
     *        A value that determines whether a data integrity verification should be performed at the end of a task
     *        execution after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     *        Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     *        ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were
     *        transferred.
     *

     *

     *        POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the
     *        transfer to verify that source and destination are fully synchronized. This option isn't supported when
     *        transferring to S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     *        NONE: No additional verification is done at the end of the transfer, but all data
     *        transmissions are integrity-checked with checksum verification during the transfer.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see VerifyMode
     */

    public Options withVerifyMode(String verifyMode) {
        setVerifyMode(verifyMode);
        return this;
    }

    /**
     *

     * A value that determines whether a data integrity verification should be performed at the end of a task execution
     * after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     * Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     * ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were transferred.
     *

     *

     * POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the transfer
     * to verify that source and destination are fully synchronized. This option isn't supported when transferring to S3
     * Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     * NONE: No additional verification is done at the end of the transfer, but all data transmissions are
     * integrity-checked with checksum verification during the transfer.
     *

     *
     * @param verifyMode
     *        A value that determines whether a data integrity verification should be performed at the end of a task
     *        execution after all data and metadata have been transferred. For more information, see Configure task settings.
     *

     *

     *        Default value: POINT_IN_TIME_CONSISTENT
     *

     *

     *        ONLY_FILES_TRANSFERRED (recommended): Perform verification only on files that were
     *        transferred.
     *

     *

     *        POINT_IN_TIME_CONSISTENT: Scan the entire source and entire destination at the end of the
     *        transfer to verify that source and destination are fully synchronized. This option isn't supported when
     *        transferring to S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes.
     *

     *

     *        NONE: No additional verification is done at the end of the transfer, but all data
     *        transmissions are integrity-checked with checksum verification during the transfer.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see VerifyMode
     */

    public Options withVerifyMode(VerifyMode verifyMode) {
        this.verifyMode = verifyMode.toString();
        return this;
    }

    /**
     *

     * A value that determines whether files at the destination should be overwritten or preserved when copying files.
     * If set to NEVER a destination file will not be replaced by a source file, even if the destination
     * file differs from the source file. If you modify files in the destination and you sync the files, you can use
     * this value to protect against overwriting those changes.
     *

     *

     * Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed information, see
     *
     * Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *
     * @param overwriteMode
     *        A value that determines whether files at the destination should be overwritten or preserved when copying
     *        files. If set to NEVER a destination file will not be replaced by a source file, even if the
     *        destination file differs from the source file. If you modify files in the destination and you sync the
     *        files, you can use this value to protect against overwriting those changes.

     *

     *        Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed
     *        information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *        Guide.
     * @see OverwriteMode
     */

    public void setOverwriteMode(String overwriteMode) {
        this.overwriteMode = overwriteMode;
    }

    /**
     *

     * A value that determines whether files at the destination should be overwritten or preserved when copying files.
     * If set to NEVER a destination file will not be replaced by a source file, even if the destination
     * file differs from the source file. If you modify files in the destination and you sync the files, you can use
     * this value to protect against overwriting those changes.
     *

     *

     * Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed information, see
     *
     * Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *
     * @return A value that determines whether files at the destination should be overwritten or preserved when copying
     *         files. If set to NEVER a destination file will not be replaced by a source file, even if the
     *         destination file differs from the source file. If you modify files in the destination and you sync the
     *         files, you can use this value to protect against overwriting those changes.

     *

     *         Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed
     *         information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *         Guide.
     * @see OverwriteMode
     */

    public String getOverwriteMode() {
        return this.overwriteMode;
    }

    /**
     *

     * A value that determines whether files at the destination should be overwritten or preserved when copying files.
     * If set to NEVER a destination file will not be replaced by a source file, even if the destination
     * file differs from the source file. If you modify files in the destination and you sync the files, you can use
     * this value to protect against overwriting those changes.
     *

     *

     * Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed information, see
     *
     * Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *
     * @param overwriteMode
     *        A value that determines whether files at the destination should be overwritten or preserved when copying
     *        files. If set to NEVER a destination file will not be replaced by a source file, even if the
     *        destination file differs from the source file. If you modify files in the destination and you sync the
     *        files, you can use this value to protect against overwriting those changes.

     *

     *        Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed
     *        information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *        Guide.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see OverwriteMode
     */

    public Options withOverwriteMode(String overwriteMode) {
        setOverwriteMode(overwriteMode);
        return this;
    }

    /**
     *

     * A value that determines whether files at the destination should be overwritten or preserved when copying files.
     * If set to NEVER a destination file will not be replaced by a source file, even if the destination
     * file differs from the source file. If you modify files in the destination and you sync the files, you can use
     * this value to protect against overwriting those changes.
     *

     *

     * Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed information, see
     *
     * Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *
     * @param overwriteMode
     *        A value that determines whether files at the destination should be overwritten or preserved when copying
     *        files. If set to NEVER a destination file will not be replaced by a source file, even if the
     *        destination file differs from the source file. If you modify files in the destination and you sync the
     *        files, you can use this value to protect against overwriting those changes.

     *

     *        Some storage classes have specific behaviors that can affect your S3 storage cost. For detailed
     *        information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *        Guide.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see OverwriteMode
     */

    public Options withOverwriteMode(OverwriteMode overwriteMode) {
        this.overwriteMode = overwriteMode.toString();
        return this;
    }

    /**
     *

     * A file metadata value that shows the last time a file was accessed (that is, when the file was read or written
     * to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the original
     * Atime attribute on all source files (that is, the version before the PREPARING phase).
     * However, Atime's behavior is not fully standard across platforms, so DataSync can only do this on a
     * best-effort basis.
     *

     *

     * Default value: BEST_EFFORT
     *

     *

     * BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     * NONE: Ignore Atime.
     *

     * <note>
     *

     * If Atime is set to BEST_EFFORT, Mtime must be set to PRESERVE
     * .
     *

     *

     * If Atime is set to NONE, Mtime must also be NONE.
     *

     * </note>
     *
     * @param atime
     *        A file metadata value that shows the last time a file was accessed (that is, when the file was read or
     *        written to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the
     *        original Atime attribute on all source files (that is, the version before the
     *        PREPARING phase). However, Atime's behavior is not fully standard across
     *        platforms, so DataSync can only do this on a best-effort basis.

     *

     *        Default value: BEST_EFFORT
     *

     *

     *        BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     *        NONE: Ignore Atime.
     *

     *        <note>
     *

     *        If Atime is set to BEST_EFFORT, Mtime must be set to
     *        PRESERVE.
     *

     *

     *        If Atime is set to NONE, Mtime must also be NONE.
     *

     * @see Atime
     */

    public void setAtime(String atime) {
        this.atime = atime;
    }

    /**
     *

     * A file metadata value that shows the last time a file was accessed (that is, when the file was read or written
     * to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the original
     * Atime attribute on all source files (that is, the version before the PREPARING phase).
     * However, Atime's behavior is not fully standard across platforms, so DataSync can only do this on a
     * best-effort basis.
     *

     *

     * Default value: BEST_EFFORT
     *

     *

     * BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     * NONE: Ignore Atime.
     *

     * <note>
     *

     * If Atime is set to BEST_EFFORT, Mtime must be set to PRESERVE
     * .
     *

     *

     * If Atime is set to NONE, Mtime must also be NONE.
     *

     * </note>
     *
     * @return A file metadata value that shows the last time a file was accessed (that is, when the file was read or
     *         written to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the
     *         original Atime attribute on all source files (that is, the version before the
     *         PREPARING phase). However, Atime's behavior is not fully standard across
     *         platforms, so DataSync can only do this on a best-effort basis.

     *

     *         Default value: BEST_EFFORT
     *

     *

     *         BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     *         NONE: Ignore Atime.
     *

     *         <note>
     *

     *         If Atime is set to BEST_EFFORT, Mtime must be set to
     *         PRESERVE.
     *

     *

     *         If Atime is set to NONE, Mtime must also be NONE.
     *

     * @see Atime
     */

    public String getAtime() {
        return this.atime;
    }

    /**
     *

     * A file metadata value that shows the last time a file was accessed (that is, when the file was read or written
     * to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the original
     * Atime attribute on all source files (that is, the version before the PREPARING phase).
     * However, Atime's behavior is not fully standard across platforms, so DataSync can only do this on a
     * best-effort basis.
     *

     *

     * Default value: BEST_EFFORT
     *

     *

     * BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     * NONE: Ignore Atime.
     *

     * <note>
     *

     * If Atime is set to BEST_EFFORT, Mtime must be set to PRESERVE
     * .
     *

     *

     * If Atime is set to NONE, Mtime must also be NONE.
     *

     * </note>
     *
     * @param atime
     *        A file metadata value that shows the last time a file was accessed (that is, when the file was read or
     *        written to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the
     *        original Atime attribute on all source files (that is, the version before the
     *        PREPARING phase). However, Atime's behavior is not fully standard across
     *        platforms, so DataSync can only do this on a best-effort basis.

     *

     *        Default value: BEST_EFFORT
     *

     *

     *        BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     *        NONE: Ignore Atime.
     *

     *        <note>
     *

     *        If Atime is set to BEST_EFFORT, Mtime must be set to
     *        PRESERVE.
     *

     *

     *        If Atime is set to NONE, Mtime must also be NONE.
     *

     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Atime
     */

    public Options withAtime(String atime) {
        setAtime(atime);
        return this;
    }

    /**
     *

     * A file metadata value that shows the last time a file was accessed (that is, when the file was read or written
     * to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the original
     * Atime attribute on all source files (that is, the version before the PREPARING phase).
     * However, Atime's behavior is not fully standard across platforms, so DataSync can only do this on a
     * best-effort basis.
     *

     *

     * Default value: BEST_EFFORT
     *

     *

     * BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     * NONE: Ignore Atime.
     *

     * <note>
     *

     * If Atime is set to BEST_EFFORT, Mtime must be set to PRESERVE
     * .
     *

     *

     * If Atime is set to NONE, Mtime must also be NONE.
     *

     * </note>
     *
     * @param atime
     *        A file metadata value that shows the last time a file was accessed (that is, when the file was read or
     *        written to). If you set Atime to BEST_EFFORT, DataSync attempts to preserve the
     *        original Atime attribute on all source files (that is, the version before the
     *        PREPARING phase). However, Atime's behavior is not fully standard across
     *        platforms, so DataSync can only do this on a best-effort basis.

     *

     *        Default value: BEST_EFFORT
     *

     *

     *        BEST_EFFORT: Attempt to preserve the per-file Atime value (recommended).
     *

     *

     *        NONE: Ignore Atime.
     *

     *        <note>
     *

     *        If Atime is set to BEST_EFFORT, Mtime must be set to
     *        PRESERVE.
     *

     *

     *        If Atime is set to NONE, Mtime must also be NONE.
     *

     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Atime
     */

    public Options withAtime(Atime atime) {
        this.atime = atime.toString();
        return this;
    }

    /**
     *

     * A value that indicates the last time that a file was modified (that is, a file was written to) before the
     * PREPARING phase. This option is required for cases when you need to run the same task more than one
     * time.
     *

     *

     * Default Value: PRESERVE
     *

     *

     * PRESERVE: Preserve original Mtime (recommended)
     *

     *

     * NONE: Ignore Mtime.
     *

     * <note>
     *

     * If Mtime is set to PRESERVE, Atime must be set to BEST_EFFORT
     * .
     *

     *

     * If Mtime is set to NONE, Atime must also be set to NONE.
     *

     * </note>
     *
     * @param mtime
     *        A value that indicates the last time that a file was modified (that is, a file was written to) before the
     *        PREPARING phase. This option is required for cases when you need to run the same task more
     *        than one time.

     *

     *        Default Value: PRESERVE
     *

     *

     *        PRESERVE: Preserve original Mtime (recommended)
     *

     *

     *        NONE: Ignore Mtime.
     *

     *        <note>
     *

     *        If Mtime is set to PRESERVE, Atime must be set to
     *        BEST_EFFORT.
     *

     *

     *        If Mtime is set to NONE, Atime must also be set to
     *        NONE.
     *

     * @see Mtime
     */

    public void setMtime(String mtime) {
        this.mtime = mtime;
    }

    /**
     *

     * A value that indicates the last time that a file was modified (that is, a file was written to) before the
     * PREPARING phase. This option is required for cases when you need to run the same task more than one
     * time.
     *

     *

     * Default Value: PRESERVE
     *

     *

     * PRESERVE: Preserve original Mtime (recommended)
     *

     *

     * NONE: Ignore Mtime.
     *

     * <note>
     *

     * If Mtime is set to PRESERVE, Atime must be set to BEST_EFFORT
     * .
     *

     *

     * If Mtime is set to NONE, Atime must also be set to NONE.
     *

     * </note>
     *
     * @return A value that indicates the last time that a file was modified (that is, a file was written to) before the
     *         PREPARING phase. This option is required for cases when you need to run the same task more
     *         than one time.

     *

     *         Default Value: PRESERVE
     *

     *

     *         PRESERVE: Preserve original Mtime (recommended)
     *

     *

     *         NONE: Ignore Mtime.
     *

     *         <note>
     *

     *         If Mtime is set to PRESERVE, Atime must be set to
     *         BEST_EFFORT.
     *

     *

     *         If Mtime is set to NONE, Atime must also be set to
     *         NONE.
     *

     * @see Mtime
     */

    public String getMtime() {
        return this.mtime;
    }

    /**
     *

     * A value that indicates the last time that a file was modified (that is, a file was written to) before the
     * PREPARING phase. This option is required for cases when you need to run the same task more than one
     * time.
     *

     *

     * Default Value: PRESERVE
     *

     *

     * PRESERVE: Preserve original Mtime (recommended)
     *

     *

     * NONE: Ignore Mtime.
     *

     * <note>
     *

     * If Mtime is set to PRESERVE, Atime must be set to BEST_EFFORT
     * .
     *

     *

     * If Mtime is set to NONE, Atime must also be set to NONE.
     *

     * </note>
     *
     * @param mtime
     *        A value that indicates the last time that a file was modified (that is, a file was written to) before the
     *        PREPARING phase. This option is required for cases when you need to run the same task more
     *        than one time.

     *

     *        Default Value: PRESERVE
     *

     *

     *        PRESERVE: Preserve original Mtime (recommended)
     *

     *

     *        NONE: Ignore Mtime.
     *

     *        <note>
     *

     *        If Mtime is set to PRESERVE, Atime must be set to
     *        BEST_EFFORT.
     *

     *

     *        If Mtime is set to NONE, Atime must also be set to
     *        NONE.
     *

     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Mtime
     */

    public Options withMtime(String mtime) {
        setMtime(mtime);
        return this;
    }

    /**
     *

     * A value that indicates the last time that a file was modified (that is, a file was written to) before the
     * PREPARING phase. This option is required for cases when you need to run the same task more than one
     * time.
     *

     *

     * Default Value: PRESERVE
     *

     *

     * PRESERVE: Preserve original Mtime (recommended)
     *

     *

     * NONE: Ignore Mtime.
     *

     * <note>
     *

     * If Mtime is set to PRESERVE, Atime must be set to BEST_EFFORT
     * .
     *

     *

     * If Mtime is set to NONE, Atime must also be set to NONE.
     *

     * </note>
     *
     * @param mtime
     *        A value that indicates the last time that a file was modified (that is, a file was written to) before the
     *        PREPARING phase. This option is required for cases when you need to run the same task more
     *        than one time.

     *

     *        Default Value: PRESERVE
     *

     *

     *        PRESERVE: Preserve original Mtime (recommended)
     *

     *

     *        NONE: Ignore Mtime.
     *

     *        <note>
     *

     *        If Mtime is set to PRESERVE, Atime must be set to
     *        BEST_EFFORT.
     *

     *

     *        If Mtime is set to NONE, Atime must also be set to
     *        NONE.
     *

     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Mtime
     */

    public Options withMtime(Mtime mtime) {
        this.mtime = mtime.toString();
        return this;
    }

    /**
     *

     * The POSIX user ID (UID) of the file's owner.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @param uid
     *        The POSIX user ID (UID) of the file's owner.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *        INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     *        NONE: Ignore UID and GID.
     * @see Uid
     */

    public void setUid(String uid) {
        this.uid = uid;
    }

    /**
     *

     * The POSIX user ID (UID) of the file's owner.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @return The POSIX user ID (UID) of the file's owner.

     *

     *         For more information, see Metadata
     *         copied by DataSync.
     *

     *

     *         Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *         INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     *         NONE: Ignore UID and GID.
     * @see Uid
     */

    public String getUid() {
        return this.uid;
    }

    /**
     *

     * The POSIX user ID (UID) of the file's owner.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @param uid
     *        The POSIX user ID (UID) of the file's owner.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *        INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     *        NONE: Ignore UID and GID.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Uid
     */

    public Options withUid(String uid) {
        setUid(uid);
        return this;
    }

    /**
     *

     * The POSIX user ID (UID) of the file's owner.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @param uid
     *        The POSIX user ID (UID) of the file's owner.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *        INT_VALUE: Preserve the integer value of UID and group ID (GID) (recommended).
     *

     *

     *        NONE: Ignore UID and GID.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Uid
     */

    public Options withUid(Uid uid) {
        this.uid = uid.toString();
        return this;
    }

    /**
     *

     * The POSIX group ID (GID) of the file's owners.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @param gid
     *        The POSIX group ID (GID) of the file's owners.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *        INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     *        NONE: Ignore UID and GID.
     * @see Gid
     */

    public void setGid(String gid) {
        this.gid = gid;
    }

    /**
     *

     * The POSIX group ID (GID) of the file's owners.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @return The POSIX group ID (GID) of the file's owners.

     *

     *         For more information, see Metadata
     *         copied by DataSync.
     *

     *

     *         Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *         INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     *         NONE: Ignore UID and GID.
     * @see Gid
     */

    public String getGid() {
        return this.gid;
    }

    /**
     *

     * The POSIX group ID (GID) of the file's owners.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @param gid
     *        The POSIX group ID (GID) of the file's owners.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *        INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     *        NONE: Ignore UID and GID.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Gid
     */

    public Options withGid(String gid) {
        setGid(gid);
        return this;
    }

    /**
     *

     * The POSIX group ID (GID) of the file's owners.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     * INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     * NONE: Ignore UID and GID.
     *

     *
     * @param gid
     *        The POSIX group ID (GID) of the file's owners.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: INT_VALUE. This preserves the integer value of the ID.
     *

     *

     *        INT_VALUE: Preserve the integer value of user ID (UID) and GID (recommended).
     *

     *

     *        NONE: Ignore UID and GID.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see Gid
     */

    public Options withGid(Gid gid) {
        this.gid = gid.toString();
        return this;
    }

    /**
     *

     * A value that specifies whether files in the destination that don't exist in the source file system should be
     * preserved. This option can affect your storage cost. If your task deletes objects, you might incur minimum
     * storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Ignore such destination files (recommended).
     *

     *

     * REMOVE: Delete destination files that aren't present in the source.
     *

     *
     * @param preserveDeletedFiles
     *        A value that specifies whether files in the destination that don't exist in the source file system should
     *        be preserved. This option can affect your storage cost. If your task deletes objects, you might incur
     *        minimum storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *        Guide.

     *

     *        Default value: PRESERVE
     *

     *

     *        PRESERVE: Ignore such destination files (recommended).
     *

     *

     *        REMOVE: Delete destination files that aren't present in the source.
     * @see PreserveDeletedFiles
     */

    public void setPreserveDeletedFiles(String preserveDeletedFiles) {
        this.preserveDeletedFiles = preserveDeletedFiles;
    }

    /**
     *

     * A value that specifies whether files in the destination that don't exist in the source file system should be
     * preserved. This option can affect your storage cost. If your task deletes objects, you might incur minimum
     * storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Ignore such destination files (recommended).
     *

     *

     * REMOVE: Delete destination files that aren't present in the source.
     *

     *
     * @return A value that specifies whether files in the destination that don't exist in the source file system should
     *         be preserved. This option can affect your storage cost. If your task deletes objects, you might incur
     *         minimum storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *         Guide.

     *

     *         Default value: PRESERVE
     *

     *

     *         PRESERVE: Ignore such destination files (recommended).
     *

     *

     *         REMOVE: Delete destination files that aren't present in the source.
     * @see PreserveDeletedFiles
     */

    public String getPreserveDeletedFiles() {
        return this.preserveDeletedFiles;
    }

    /**
     *

     * A value that specifies whether files in the destination that don't exist in the source file system should be
     * preserved. This option can affect your storage cost. If your task deletes objects, you might incur minimum
     * storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Ignore such destination files (recommended).
     *

     *

     * REMOVE: Delete destination files that aren't present in the source.
     *

     *
     * @param preserveDeletedFiles
     *        A value that specifies whether files in the destination that don't exist in the source file system should
     *        be preserved. This option can affect your storage cost. If your task deletes objects, you might incur
     *        minimum storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *        Guide.

     *

     *        Default value: PRESERVE
     *

     *

     *        PRESERVE: Ignore such destination files (recommended).
     *

     *

     *        REMOVE: Delete destination files that aren't present in the source.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see PreserveDeletedFiles
     */

    public Options withPreserveDeletedFiles(String preserveDeletedFiles) {
        setPreserveDeletedFiles(preserveDeletedFiles);
        return this;
    }

    /**
     *

     * A value that specifies whether files in the destination that don't exist in the source file system should be
     * preserved. This option can affect your storage cost. If your task deletes objects, you might incur minimum
     * storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User Guide.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Ignore such destination files (recommended).
     *

     *

     * REMOVE: Delete destination files that aren't present in the source.
     *

     *
     * @param preserveDeletedFiles
     *        A value that specifies whether files in the destination that don't exist in the source file system should
     *        be preserved. This option can affect your storage cost. If your task deletes objects, you might incur
     *        minimum storage duration charges for certain storage classes. For detailed information, see Considerations when working with Amazon S3 storage classes in DataSync  in the DataSync User
     *        Guide.

     *

     *        Default value: PRESERVE
     *

     *

     *        PRESERVE: Ignore such destination files (recommended).
     *

     *

     *        REMOVE: Delete destination files that aren't present in the source.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see PreserveDeletedFiles
     */

    public Options withPreserveDeletedFiles(PreserveDeletedFiles preserveDeletedFiles) {
        this.preserveDeletedFiles = preserveDeletedFiles.toString();
        return this;
    }

    /**
     *

     * A value that determines whether DataSync should preserve the metadata of block and character devices in the
     * source file system, and re-create the files with that device name and metadata on the destination. DataSync does
     * not copy the contents of such devices, only the name and metadata.
     *

     * <note>
     *

     * DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     * end-of-file (EOF) marker.
     *

     * </note>
     *

     * Default value: NONE
     *

     *

     * NONE: Ignore special devices (recommended).
     *

     *

     * PRESERVE: Preserve character and block device metadata. This option isn't currently supported for
     * Amazon EFS.
     *

     *
     * @param preserveDevices
     *        A value that determines whether DataSync should preserve the metadata of block and character devices in
     *        the source file system, and re-create the files with that device name and metadata on the destination.
     *        DataSync does not copy the contents of such devices, only the name and metadata.
 <note>
     *

     *        DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     *        end-of-file (EOF) marker.
     *

     *        </note>
     *

     *        Default value: NONE
     *

     *

     *        NONE: Ignore special devices (recommended).
     *

     *

     *        PRESERVE: Preserve character and block device metadata. This option isn't currently supported
     *        for Amazon EFS.
     * @see PreserveDevices
     */

    public void setPreserveDevices(String preserveDevices) {
        this.preserveDevices = preserveDevices;
    }

    /**
     *

     * A value that determines whether DataSync should preserve the metadata of block and character devices in the
     * source file system, and re-create the files with that device name and metadata on the destination. DataSync does
     * not copy the contents of such devices, only the name and metadata.
     *

     * <note>
     *

     * DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     * end-of-file (EOF) marker.
     *

     * </note>
     *

     * Default value: NONE
     *

     *

     * NONE: Ignore special devices (recommended).
     *

     *

     * PRESERVE: Preserve character and block device metadata. This option isn't currently supported for
     * Amazon EFS.
     *

     *
     * @return A value that determines whether DataSync should preserve the metadata of block and character devices in
     *         the source file system, and re-create the files with that device name and metadata on the destination.
     *         DataSync does not copy the contents of such devices, only the name and metadata.
 <note>
     *

     *         DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     *         end-of-file (EOF) marker.
     *

     *         </note>
     *

     *         Default value: NONE
     *

     *

     *         NONE: Ignore special devices (recommended).
     *

     *

     *         PRESERVE: Preserve character and block device metadata. This option isn't currently
     *         supported for Amazon EFS.
     * @see PreserveDevices
     */

    public String getPreserveDevices() {
        return this.preserveDevices;
    }

    /**
     *

     * A value that determines whether DataSync should preserve the metadata of block and character devices in the
     * source file system, and re-create the files with that device name and metadata on the destination. DataSync does
     * not copy the contents of such devices, only the name and metadata.
     *

     * <note>
     *

     * DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     * end-of-file (EOF) marker.
     *

     * </note>
     *

     * Default value: NONE
     *

     *

     * NONE: Ignore special devices (recommended).
     *

     *

     * PRESERVE: Preserve character and block device metadata. This option isn't currently supported for
     * Amazon EFS.
     *

     *
     * @param preserveDevices
     *        A value that determines whether DataSync should preserve the metadata of block and character devices in
     *        the source file system, and re-create the files with that device name and metadata on the destination.
     *        DataSync does not copy the contents of such devices, only the name and metadata.
 <note>
     *

     *        DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     *        end-of-file (EOF) marker.
     *

     *        </note>
     *

     *        Default value: NONE
     *

     *

     *        NONE: Ignore special devices (recommended).
     *

     *

     *        PRESERVE: Preserve character and block device metadata. This option isn't currently supported
     *        for Amazon EFS.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see PreserveDevices
     */

    public Options withPreserveDevices(String preserveDevices) {
        setPreserveDevices(preserveDevices);
        return this;
    }

    /**
     *

     * A value that determines whether DataSync should preserve the metadata of block and character devices in the
     * source file system, and re-create the files with that device name and metadata on the destination. DataSync does
     * not copy the contents of such devices, only the name and metadata.
     *

     * <note>
     *

     * DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     * end-of-file (EOF) marker.
     *

     * </note>
     *

     * Default value: NONE
     *

     *

     * NONE: Ignore special devices (recommended).
     *

     *

     * PRESERVE: Preserve character and block device metadata. This option isn't currently supported for
     * Amazon EFS.
     *

     *
     * @param preserveDevices
     *        A value that determines whether DataSync should preserve the metadata of block and character devices in
     *        the source file system, and re-create the files with that device name and metadata on the destination.
     *        DataSync does not copy the contents of such devices, only the name and metadata.
 <note>
     *

     *        DataSync can't sync the actual contents of such devices, because they are nonterminal and don't return an
     *        end-of-file (EOF) marker.
     *

     *        </note>
     *

     *        Default value: NONE
     *

     *

     *        NONE: Ignore special devices (recommended).
     *

     *

     *        PRESERVE: Preserve character and block device metadata. This option isn't currently supported
     *        for Amazon EFS.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see PreserveDevices
     */

    public Options withPreserveDevices(PreserveDevices preserveDevices) {
        this.preserveDevices = preserveDevices.toString();
        return this;
    }

    /**
     *

     * A value that determines which users or groups can access a file for a specific purpose such as reading, writing,
     * or execution of the file.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     * NONE: Ignore permissions.
     *

     * <note>
     *

     * DataSync can preserve extant permissions of a source location.
     *

     * </note>
     *
     * @param posixPermissions
     *        A value that determines which users or groups can access a file for a specific purpose such as reading,
     *        writing, or execution of the file.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: PRESERVE
     *

     *

     *        PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     *        NONE: Ignore permissions.
     *

     *        <note>
     *

     *        DataSync can preserve extant permissions of a source location.
     *

     * @see PosixPermissions
     */

    public void setPosixPermissions(String posixPermissions) {
        this.posixPermissions = posixPermissions;
    }

    /**
     *

     * A value that determines which users or groups can access a file for a specific purpose such as reading, writing,
     * or execution of the file.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     * NONE: Ignore permissions.
     *

     * <note>
     *

     * DataSync can preserve extant permissions of a source location.
     *

     * </note>
     *
     * @return A value that determines which users or groups can access a file for a specific purpose such as reading,
     *         writing, or execution of the file.

     *

     *         For more information, see Metadata
     *         copied by DataSync.
     *

     *

     *         Default value: PRESERVE
     *

     *

     *         PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     *         NONE: Ignore permissions.
     *

     *         <note>
     *

     *         DataSync can preserve extant permissions of a source location.
     *

     * @see PosixPermissions
     */

    public String getPosixPermissions() {
        return this.posixPermissions;
    }

    /**
     *

     * A value that determines which users or groups can access a file for a specific purpose such as reading, writing,
     * or execution of the file.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     * NONE: Ignore permissions.
     *

     * <note>
     *

     * DataSync can preserve extant permissions of a source location.
     *

     * </note>
     *
     * @param posixPermissions
     *        A value that determines which users or groups can access a file for a specific purpose such as reading,
     *        writing, or execution of the file.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: PRESERVE
     *

     *

     *        PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     *        NONE: Ignore permissions.
     *

     *        <note>
     *

     *        DataSync can preserve extant permissions of a source location.
     *

     * @return Returns a reference to this object so that method calls can be chained together.
     * @see PosixPermissions
     */

    public Options withPosixPermissions(String posixPermissions) {
        setPosixPermissions(posixPermissions);
        return this;
    }

    /**
     *

     * A value that determines which users or groups can access a file for a specific purpose such as reading, writing,
     * or execution of the file.
     *

     *

     * For more information, see Metadata copied
     * by DataSync.
     *

     *

     * Default value: PRESERVE
     *

     *

     * PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     * NONE: Ignore permissions.
     *

     * <note>
     *

     * DataSync can preserve extant permissions of a source location.
     *

     * </note>
     *
     * @param posixPermissions
     *        A value that determines which users or groups can access a file for a specific purpose such as reading,
     *        writing, or execution of the file.

     *

     *        For more information, see Metadata
     *        copied by DataSync.
     *

     *

     *        Default value: PRESERVE
     *

     *

     *        PRESERVE: Preserve POSIX-style permissions (recommended).
     *

     *

     *        NONE: Ignore permissions.
     *

     *        <note>
     *

     *        DataSync can preserve extant permissions of a source location.
     *

     * @return Returns a reference to this object so that method calls can be chained together.
     * @see PosixPermissions
     */

    public Options withPosixPermissions(PosixPermissions posixPermissions) {
        this.posixPermissions = posixPermissions.toString();
        return this;
    }

    /**
     *

     * A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of 1 MB,
     * set this value to 1048576 (=1024*1024).
     *

     *
     * @param bytesPerSecond
     *        A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of
     *        1 MB, set this value to 1048576 (=1024*1024).
     */

    public void setBytesPerSecond(Long bytesPerSecond) {
        this.bytesPerSecond = bytesPerSecond;
    }

    /**
     *

     * A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of 1 MB,
     * set this value to 1048576 (=1024*1024).
     *

     *
     * @return A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of
     *         1 MB, set this value to 1048576 (=1024*1024).
     */

    public Long getBytesPerSecond() {
        return this.bytesPerSecond;
    }

    /**
     *

     * A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of 1 MB,
     * set this value to 1048576 (=1024*1024).
     *

     *
     * @param bytesPerSecond
     *        A value that limits the bandwidth used by DataSync. For example, if you want DataSync to use a maximum of
     *        1 MB, set this value to 1048576 (=1024*1024).
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public Options withBytesPerSecond(Long bytesPerSecond) {
        setBytesPerSecond(bytesPerSecond);
        return this;
    }

    /**
     *

     * A value that determines whether tasks should be queued before executing the tasks. If set to ENABLED
     * , the tasks will be queued. The default is ENABLED.
     *

     *

     * If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more information,
     * see Queueing
     * task executions.
     *

     *
     * @param taskQueueing
     *        A value that determines whether tasks should be queued before executing the tasks. If set to
     *        ENABLED, the tasks will be queued. The default is ENABLED.

     *

     *        If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more
     *        information, see Queueing
     *        task executions.
     * @see TaskQueueing
     */

    public void setTaskQueueing(String taskQueueing) {
        this.taskQueueing = taskQueueing;
    }

    /**
     *

     * A value that determines whether tasks should be queued before executing the tasks. If set to ENABLED
     * , the tasks will be queued. The default is ENABLED.
     *

     *

     * If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more information,
     * see Queueing
     * task executions.
     *

     *
     * @return A value that determines whether tasks should be queued before executing the tasks. If set to
     *         ENABLED, the tasks will be queued. The default is ENABLED.

     *

     *         If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more
     *         information, see Queueing
     *         task executions.
     * @see TaskQueueing
     */

    public String getTaskQueueing() {
        return this.taskQueueing;
    }

    /**
     *

     * A value that determines whether tasks should be queued before executing the tasks. If set to ENABLED
     * , the tasks will be queued. The default is ENABLED.
     *

     *

     * If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more information,
     * see Queueing
     * task executions.
     *

     *
     * @param taskQueueing
     *        A value that determines whether tasks should be queued before executing the tasks. If set to
     *        ENABLED, the tasks will be queued. The default is ENABLED.

     *

     *        If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more
     *        information, see Queueing
     *        task executions.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see TaskQueueing
     */

    public Options withTaskQueueing(String taskQueueing) {
        setTaskQueueing(taskQueueing);
        return this;
    }

    /**
     *

     * A value that determines whether tasks should be queued before executing the tasks. If set to ENABLED
     * , the tasks will be queued. The default is ENABLED.
     *

     *

     * If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more information,
     * see Queueing
     * task executions.
     *

     *
     * @param taskQueueing
     *        A value that determines whether tasks should be queued before executing the tasks. If set to
     *        ENABLED, the tasks will be queued. The default is ENABLED.

     *

     *        If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more
     *        information, see Queueing
     *        task executions.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see TaskQueueing
     */

    public Options withTaskQueueing(TaskQueueing taskQueueing) {
        this.taskQueueing = taskQueueing.toString();
        return this;
    }

    /**
     *

     * A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch log
     * group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC publishes logs
     * on errors for individual files transferred, and TRANSFER publishes logs for every file or object
     * that is transferred and integrity checked.
     *

     *
     * @param logLevel
     *        A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch
     *        log group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC
     *        publishes logs on errors for individual files transferred, and TRANSFER publishes logs for
     *        every file or object that is transferred and integrity checked.
     * @see LogLevel
     */

    public void setLogLevel(String logLevel) {
        this.logLevel = logLevel;
    }

    /**
     *

     * A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch log
     * group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC publishes logs
     * on errors for individual files transferred, and TRANSFER publishes logs for every file or object
     * that is transferred and integrity checked.
     *

     *
     * @return A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch
     *         log group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC
     *         publishes logs on errors for individual files transferred, and TRANSFER publishes logs for
     *         every file or object that is transferred and integrity checked.
     * @see LogLevel
     */

    public String getLogLevel() {
        return this.logLevel;
    }

    /**
     *

     * A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch log
     * group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC publishes logs
     * on errors for individual files transferred, and TRANSFER publishes logs for every file or object
     * that is transferred and integrity checked.
     *

     *
     * @param logLevel
     *        A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch
     *        log group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC
     *        publishes logs on errors for individual files transferred, and TRANSFER publishes logs for
     *        every file or object that is transferred and integrity checked.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see LogLevel
     */

    public Options withLogLevel(String logLevel) {
        setLogLevel(logLevel);
        return this;
    }

    /**
     *

     * A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch log
     * group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC publishes logs
     * on errors for individual files transferred, and TRANSFER publishes logs for every file or object
     * that is transferred and integrity checked.
     *

     *
     * @param logLevel
     *        A value that determines the type of logs that DataSync publishes to a log stream in the Amazon CloudWatch
     *        log group that you provide. For more information about providing a log group for DataSync, see CloudWatchLogGroupArn. If set to OFF, no logs are published. BASIC
     *        publishes logs on errors for individual files transferred, and TRANSFER publishes logs for
     *        every file or object that is transferred and integrity checked.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see LogLevel
     */

    public Options withLogLevel(LogLevel logLevel) {
        this.logLevel = logLevel.toString();
        return this;
    }

    /**
     *

     * A value that determines whether DataSync transfers only the data and metadata that differ between the source and
     * the destination location, or whether DataSync transfers all the content from the source, without comparing to the
     * destination location.
     *

     *

     * CHANGED: DataSync copies only data or metadata that is new or different content from the source
     * location to the destination location.
     *

     *

     * ALL: DataSync copies all source location content to the destination, without comparing to existing
     * content on the destination.
     *

     *
     * @param transferMode
     *        A value that determines whether DataSync transfers only the data and metadata that differ between the
     *        source and the destination location, or whether DataSync transfers all the content from the source,
     *        without comparing to the destination location.

     *

     *        CHANGED: DataSync copies only data or metadata that is new or different content from the
     *        source location to the destination location.
     *

     *

     *        ALL: DataSync copies all source location content to the destination, without comparing to
     *        existing content on the destination.
     * @see TransferMode
     */

    public void setTransferMode(String transferMode) {
        this.transferMode = transferMode;
    }

    /**
     *

     * A value that determines whether DataSync transfers only the data and metadata that differ between the source and
     * the destination location, or whether DataSync transfers all the content from the source, without comparing to the
     * destination location.
     *

     *

     * CHANGED: DataSync copies only data or metadata that is new or different content from the source
     * location to the destination location.
     *

     *

     * ALL: DataSync copies all source location content to the destination, without comparing to existing
     * content on the destination.
     *

     *
     * @return A value that determines whether DataSync transfers only the data and metadata that differ between the
     *         source and the destination location, or whether DataSync transfers all the content from the source,
     *         without comparing to the destination location.

     *

     *         CHANGED: DataSync copies only data or metadata that is new or different content from the
     *         source location to the destination location.
     *

     *

     *         ALL: DataSync copies all source location content to the destination, without comparing to
     *         existing content on the destination.
     * @see TransferMode
     */

    public String getTransferMode() {
        return this.transferMode;
    }

    /**
     *

     * A value that determines whether DataSync transfers only the data and metadata that differ between the source and
     * the destination location, or whether DataSync transfers all the content from the source, without comparing to the
     * destination location.
     *

     *

     * CHANGED: DataSync copies only data or metadata that is new or different content from the source
     * location to the destination location.
     *

     *

     * ALL: DataSync copies all source location content to the destination, without comparing to existing
     * content on the destination.
     *

     *
     * @param transferMode
     *        A value that determines whether DataSync transfers only the data and metadata that differ between the
     *        source and the destination location, or whether DataSync transfers all the content from the source,
     *        without comparing to the destination location.

     *

     *        CHANGED: DataSync copies only data or metadata that is new or different content from the
     *        source location to the destination location.
     *

     *

     *        ALL: DataSync copies all source location content to the destination, without comparing to
     *        existing content on the destination.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see TransferMode
     */

    public Options withTransferMode(String transferMode) {
        setTransferMode(transferMode);
        return this;
    }

    /**
     *

     * A value that determines whether DataSync transfers only the data and metadata that differ between the source and
     * the destination location, or whether DataSync transfers all the content from the source, without comparing to the
     * destination location.
     *

     *

     * CHANGED: DataSync copies only data or metadata that is new or different content from the source
     * location to the destination location.
     *

     *

     * ALL: DataSync copies all source location content to the destination, without comparing to existing
     * content on the destination.
     *

     *
     * @param transferMode
     *        A value that determines whether DataSync transfers only the data and metadata that differ between the
     *        source and the destination location, or whether DataSync transfers all the content from the source,
     *        without comparing to the destination location.

     *

     *        CHANGED: DataSync copies only data or metadata that is new or different content from the
     *        source location to the destination location.
     *

     *

     *        ALL: DataSync copies all source location content to the destination, without comparing to
     *        existing content on the destination.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see TransferMode
     */

    public Options withTransferMode(TransferMode transferMode) {
        this.transferMode = transferMode.toString();
        return this;
    }

    /**
     *

     * A value that determines which components of the SMB security descriptor are copied from source to destination
     * objects.
     *

     *

     * This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or between
     * two Amazon FSx for Windows File Server locations. For more information about how DataSync handles metadata, see
     * How DataSync Handles Metadata
     * and Special Files.
     *

     *

     * Default value: OWNER_DACL
     *

     *

     * OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are used by
     * administrators to log attempts to access a secured object.
     *

     *

     * OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a secured
     * object.
     *

     *

     *

     *

     * Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access your SMB
     * location. For information about choosing a user that ensures sufficient permissions to files, folders, and
     * metadata, see user.
     *

     *

     * NONE: None of the SMB security descriptor components are copied. Destination objects are owned by
     * the user that was provided for accessing the destination location. DACLs and SACLs are set based on the
     * destination server's configuration.
     *

     *
     * @param securityDescriptorCopyFlags
     *        A value that determines which components of the SMB security descriptor are copied from source to
     *        destination objects.

     *

     *        This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or
     *        between two Amazon FSx for Windows File Server locations. For more information about how DataSync handles
     *        metadata, see How
     *        DataSync Handles Metadata and Special Files.
     *

     *

     *        Default value: OWNER_DACL
     *

     *

     *        OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *        Object owner.
     *

     *

     *

     *

     *        NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *        When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are
     *        used by administrators to log attempts to access a secured object.
     *

     *

     *        OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *        Object owner.
     *

     *

     *

     *

     *        NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *        NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a
     *        secured object.
     *

     *

     *

     *

     *        Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access
     *        your SMB location. For information about choosing a user that ensures sufficient permissions to files,
     *        folders, and metadata, see user.
     *

     *

     *        NONE: None of the SMB security descriptor components are copied. Destination objects are
     *        owned by the user that was provided for accessing the destination location. DACLs and SACLs are set based
     *        on the destination server's configuration.
     * @see SmbSecurityDescriptorCopyFlags
     */

    public void setSecurityDescriptorCopyFlags(String securityDescriptorCopyFlags) {
        this.securityDescriptorCopyFlags = securityDescriptorCopyFlags;
    }

    /**
     *

     * A value that determines which components of the SMB security descriptor are copied from source to destination
     * objects.
     *

     *

     * This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or between
     * two Amazon FSx for Windows File Server locations. For more information about how DataSync handles metadata, see
     * How DataSync Handles Metadata
     * and Special Files.
     *

     *

     * Default value: OWNER_DACL
     *

     *

     * OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are used by
     * administrators to log attempts to access a secured object.
     *

     *

     * OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a secured
     * object.
     *

     *

     *

     *

     * Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access your SMB
     * location. For information about choosing a user that ensures sufficient permissions to files, folders, and
     * metadata, see user.
     *

     *

     * NONE: None of the SMB security descriptor components are copied. Destination objects are owned by
     * the user that was provided for accessing the destination location. DACLs and SACLs are set based on the
     * destination server's configuration.
     *

     *
     * @return A value that determines which components of the SMB security descriptor are copied from source to
     *         destination objects.

     *

     *         This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or
     *         between two Amazon FSx for Windows File Server locations. For more information about how DataSync handles
     *         metadata, see How
     *         DataSync Handles Metadata and Special Files.
     *

     *

     *         Default value: OWNER_DACL
     *

     *

     *         OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *         Object owner.
     *

     *

     *

     *

     *         NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *         When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are
     *         used by administrators to log attempts to access a secured object.
     *

     *

     *         OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *         Object owner.
     *

     *

     *

     *

     *         NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *         NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a
     *         secured object.
     *

     *

     *

     *

     *         Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access
     *         your SMB location. For information about choosing a user that ensures sufficient permissions to files,
     *         folders, and metadata, see user.
     *

     *

     *         NONE: None of the SMB security descriptor components are copied. Destination objects are
     *         owned by the user that was provided for accessing the destination location. DACLs and SACLs are set based
     *         on the destination server's configuration.
     * @see SmbSecurityDescriptorCopyFlags
     */

    public String getSecurityDescriptorCopyFlags() {
        return this.securityDescriptorCopyFlags;
    }

    /**
     *

     * A value that determines which components of the SMB security descriptor are copied from source to destination
     * objects.
     *

     *

     * This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or between
     * two Amazon FSx for Windows File Server locations. For more information about how DataSync handles metadata, see
     * How DataSync Handles Metadata
     * and Special Files.
     *

     *

     * Default value: OWNER_DACL
     *

     *

     * OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are used by
     * administrators to log attempts to access a secured object.
     *

     *

     * OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a secured
     * object.
     *

     *

     *

     *

     * Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access your SMB
     * location. For information about choosing a user that ensures sufficient permissions to files, folders, and
     * metadata, see user.
     *

     *

     * NONE: None of the SMB security descriptor components are copied. Destination objects are owned by
     * the user that was provided for accessing the destination location. DACLs and SACLs are set based on the
     * destination server's configuration.
     *

     *
     * @param securityDescriptorCopyFlags
     *        A value that determines which components of the SMB security descriptor are copied from source to
     *        destination objects.

     *

     *        This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or
     *        between two Amazon FSx for Windows File Server locations. For more information about how DataSync handles
     *        metadata, see How
     *        DataSync Handles Metadata and Special Files.
     *

     *

     *        Default value: OWNER_DACL
     *

     *

     *        OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *        Object owner.
     *

     *

     *

     *

     *        NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *        When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are
     *        used by administrators to log attempts to access a secured object.
     *

     *

     *        OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *        Object owner.
     *

     *

     *

     *

     *        NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *        NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a
     *        secured object.
     *

     *

     *

     *

     *        Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access
     *        your SMB location. For information about choosing a user that ensures sufficient permissions to files,
     *        folders, and metadata, see user.
     *

     *

     *        NONE: None of the SMB security descriptor components are copied. Destination objects are
     *        owned by the user that was provided for accessing the destination location. DACLs and SACLs are set based
     *        on the destination server's configuration.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see SmbSecurityDescriptorCopyFlags
     */

    public Options withSecurityDescriptorCopyFlags(String securityDescriptorCopyFlags) {
        setSecurityDescriptorCopyFlags(securityDescriptorCopyFlags);
        return this;
    }

    /**
     *

     * A value that determines which components of the SMB security descriptor are copied from source to destination
     * objects.
     *

     *

     * This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or between
     * two Amazon FSx for Windows File Server locations. For more information about how DataSync handles metadata, see
     * How DataSync Handles Metadata
     * and Special Files.
     *

     *

     * Default value: OWNER_DACL
     *

     *

     * OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are used by
     * administrators to log attempts to access a secured object.
     *

     *

     * OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     * Object owner.
     *

     *

     *

     *

     * NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     * NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a secured
     * object.
     *

     *

     *

     *

     * Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access your SMB
     * location. For information about choosing a user that ensures sufficient permissions to files, folders, and
     * metadata, see user.
     *

     *

     * NONE: None of the SMB security descriptor components are copied. Destination objects are owned by
     * the user that was provided for accessing the destination location. DACLs and SACLs are set based on the
     * destination server's configuration.
     *

     *
     * @param securityDescriptorCopyFlags
     *        A value that determines which components of the SMB security descriptor are copied from source to
     *        destination objects.

     *

     *        This value is only used for transfers between SMB and Amazon FSx for Windows File Server locations, or
     *        between two Amazon FSx for Windows File Server locations. For more information about how DataSync handles
     *        metadata, see How
     *        DataSync Handles Metadata and Special Files.
     *

     *

     *        Default value: OWNER_DACL
     *

     *

     *        OWNER_DACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *        Object owner.
     *

     *

     *

     *

     *        NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *        When choosing this option, DataSync does NOT copy the NTFS system access control lists (SACLs), which are
     *        used by administrators to log attempts to access a secured object.
     *

     *

     *        OWNER_DACL_SACL: For each copied object, DataSync copies the following metadata:
     *

     *

     *

     *

     *        Object owner.
     *

     *

     *

     *

     *        NTFS discretionary access control lists (DACLs), which determine whether to grant access to an object.
     *

     *

     *

     *

     *        NTFS system access control lists (SACLs), which are used by administrators to log attempts to access a
     *        secured object.
     *

     *

     *

     *

     *        Copying SACLs requires granting additional permissions to the Windows user that DataSync uses to access
     *        your SMB location. For information about choosing a user that ensures sufficient permissions to files,
     *        folders, and metadata, see user.
     *

     *

     *        NONE: None of the SMB security descriptor components are copied. Destination objects are
     *        owned by the user that was provided for accessing the destination location. DACLs and SACLs are set based
     *        on the destination server's configuration.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see SmbSecurityDescriptorCopyFlags
     */

    public Options withSecurityDescriptorCopyFlags(SmbSecurityDescriptorCopyFlags securityDescriptorCopyFlags) {
        this.securityDescriptorCopyFlags = securityDescriptorCopyFlags.toString();
        return this;
    }

    /**
     *

     * Specifies whether object tags are maintained when transferring between object storage systems. If you want your
     * DataSync task to ignore object tags, specify the NONE value.
     *

     *

     * Default Value: PRESERVE
     *

     *
     * @param objectTags
     *        Specifies whether object tags are maintained when transferring between object storage systems. If you want
     *        your DataSync task to ignore object tags, specify the NONE value.

     *

     *        Default Value: PRESERVE
     * @see ObjectTags
     */

    public void setObjectTags(String objectTags) {
        this.objectTags = objectTags;
    }

    /**
     *

     * Specifies whether object tags are maintained when transferring between object storage systems. If you want your
     * DataSync task to ignore object tags, specify the NONE value.
     *

     *

     * Default Value: PRESERVE
     *

     *
     * @return Specifies whether object tags are maintained when transferring between object storage systems. If you
     *         want your DataSync task to ignore object tags, specify the NONE value.

     *

     *         Default Value: PRESERVE
     * @see ObjectTags
     */

    public String getObjectTags() {
        return this.objectTags;
    }

    /**
     *

     * Specifies whether object tags are maintained when transferring between object storage systems. If you want your
     * DataSync task to ignore object tags, specify the NONE value.
     *

     *

     * Default Value: PRESERVE
     *

     *
     * @param objectTags
     *        Specifies whether object tags are maintained when transferring between object storage systems. If you want
     *        your DataSync task to ignore object tags, specify the NONE value.

     *

     *        Default Value: PRESERVE
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see ObjectTags
     */

    public Options withObjectTags(String objectTags) {
        setObjectTags(objectTags);
        return this;
    }

    /**
     *

     * Specifies whether object tags are maintained when transferring between object storage systems. If you want your
     * DataSync task to ignore object tags, specify the NONE value.
     *

     *

     * Default Value: PRESERVE
     *

     *
     * @param objectTags
     *        Specifies whether object tags are maintained when transferring between object storage systems. If you want
     *        your DataSync task to ignore object tags, specify the NONE value.

     *

     *        Default Value: PRESERVE
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see ObjectTags
     */

    public Options withObjectTags(ObjectTags objectTags) {
        this.objectTags = objectTags.toString();
        return this;
    }

    /**
     * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
     * redacted from this string using a placeholder value.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getVerifyMode() != null)
            sb.append("VerifyMode: ").append(getVerifyMode()).append(",");
        if (getOverwriteMode() != null)
            sb.append("OverwriteMode: ").append(getOverwriteMode()).append(",");
        if (getAtime() != null)
            sb.append("Atime: ").append(getAtime()).append(",");
        if (getMtime() != null)
            sb.append("Mtime: ").append(getMtime()).append(",");
        if (getUid() != null)
            sb.append("Uid: ").append(getUid()).append(",");
        if (getGid() != null)
            sb.append("Gid: ").append(getGid()).append(",");
        if (getPreserveDeletedFiles() != null)
            sb.append("PreserveDeletedFiles: ").append(getPreserveDeletedFiles()).append(",");
        if (getPreserveDevices() != null)
            sb.append("PreserveDevices: ").append(getPreserveDevices()).append(",");
        if (getPosixPermissions() != null)
            sb.append("PosixPermissions: ").append(getPosixPermissions()).append(",");
        if (getBytesPerSecond() != null)
            sb.append("BytesPerSecond: ").append(getBytesPerSecond()).append(",");
        if (getTaskQueueing() != null)
            sb.append("TaskQueueing: ").append(getTaskQueueing()).append(",");
        if (getLogLevel() != null)
            sb.append("LogLevel: ").append(getLogLevel()).append(",");
        if (getTransferMode() != null)
            sb.append("TransferMode: ").append(getTransferMode()).append(",");
        if (getSecurityDescriptorCopyFlags() != null)
            sb.append("SecurityDescriptorCopyFlags: ").append(getSecurityDescriptorCopyFlags()).append(",");
        if (getObjectTags() != null)
            sb.append("ObjectTags: ").append(getObjectTags());
        sb.append("}");
        return sb.toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (obj instanceof Options == false)
            return false;
        Options other = (Options) obj;
        if (other.getVerifyMode() == null ^ this.getVerifyMode() == null)
            return false;
        if (other.getVerifyMode() != null && other.getVerifyMode().equals(this.getVerifyMode()) == false)
            return false;
        if (other.getOverwriteMode() == null ^ this.getOverwriteMode() == null)
            return false;
        if (other.getOverwriteMode() != null && other.getOverwriteMode().equals(this.getOverwriteMode()) == false)
            return false;
        if (other.getAtime() == null ^ this.getAtime() == null)
            return false;
        if (other.getAtime() != null && other.getAtime().equals(this.getAtime()) == false)
            return false;
        if (other.getMtime() == null ^ this.getMtime() == null)
            return false;
        if (other.getMtime() != null && other.getMtime().equals(this.getMtime()) == false)
            return false;
        if (other.getUid() == null ^ this.getUid() == null)
            return false;
        if (other.getUid() != null && other.getUid().equals(this.getUid()) == false)
            return false;
        if (other.getGid() == null ^ this.getGid() == null)
            return false;
        if (other.getGid() != null && other.getGid().equals(this.getGid()) == false)
            return false;
        if (other.getPreserveDeletedFiles() == null ^ this.getPreserveDeletedFiles() == null)
            return false;
        if (other.getPreserveDeletedFiles() != null && other.getPreserveDeletedFiles().equals(this.getPreserveDeletedFiles()) == false)
            return false;
        if (other.getPreserveDevices() == null ^ this.getPreserveDevices() == null)
            return false;
        if (other.getPreserveDevices() != null && other.getPreserveDevices().equals(this.getPreserveDevices()) == false)
            return false;
        if (other.getPosixPermissions() == null ^ this.getPosixPermissions() == null)
            return false;
        if (other.getPosixPermissions() != null && other.getPosixPermissions().equals(this.getPosixPermissions()) == false)
            return false;
        if (other.getBytesPerSecond() == null ^ this.getBytesPerSecond() == null)
            return false;
        if (other.getBytesPerSecond() != null && other.getBytesPerSecond().equals(this.getBytesPerSecond()) == false)
            return false;
        if (other.getTaskQueueing() == null ^ this.getTaskQueueing() == null)
            return false;
        if (other.getTaskQueueing() != null && other.getTaskQueueing().equals(this.getTaskQueueing()) == false)
            return false;
        if (other.getLogLevel() == null ^ this.getLogLevel() == null)
            return false;
        if (other.getLogLevel() != null && other.getLogLevel().equals(this.getLogLevel()) == false)
            return false;
        if (other.getTransferMode() == null ^ this.getTransferMode() == null)
            return false;
        if (other.getTransferMode() != null && other.getTransferMode().equals(this.getTransferMode()) == false)
            return false;
        if (other.getSecurityDescriptorCopyFlags() == null ^ this.getSecurityDescriptorCopyFlags() == null)
            return false;
        if (other.getSecurityDescriptorCopyFlags() != null && other.getSecurityDescriptorCopyFlags().equals(this.getSecurityDescriptorCopyFlags()) == false)
            return false;
        if (other.getObjectTags() == null ^ this.getObjectTags() == null)
            return false;
        if (other.getObjectTags() != null && other.getObjectTags().equals(this.getObjectTags()) == false)
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;

        hashCode = prime * hashCode + ((getVerifyMode() == null) ? 0 : getVerifyMode().hashCode());
        hashCode = prime * hashCode + ((getOverwriteMode() == null) ? 0 : getOverwriteMode().hashCode());
        hashCode = prime * hashCode + ((getAtime() == null) ? 0 : getAtime().hashCode());
        hashCode = prime * hashCode + ((getMtime() == null) ? 0 : getMtime().hashCode());
        hashCode = prime * hashCode + ((getUid() == null) ? 0 : getUid().hashCode());
        hashCode = prime * hashCode + ((getGid() == null) ? 0 : getGid().hashCode());
        hashCode = prime * hashCode + ((getPreserveDeletedFiles() == null) ? 0 : getPreserveDeletedFiles().hashCode());
        hashCode = prime * hashCode + ((getPreserveDevices() == null) ? 0 : getPreserveDevices().hashCode());
        hashCode = prime * hashCode + ((getPosixPermissions() == null) ? 0 : getPosixPermissions().hashCode());
        hashCode = prime * hashCode + ((getBytesPerSecond() == null) ? 0 : getBytesPerSecond().hashCode());
        hashCode = prime * hashCode + ((getTaskQueueing() == null) ? 0 : getTaskQueueing().hashCode());
        hashCode = prime * hashCode + ((getLogLevel() == null) ? 0 : getLogLevel().hashCode());
        hashCode = prime * hashCode + ((getTransferMode() == null) ? 0 : getTransferMode().hashCode());
        hashCode = prime * hashCode + ((getSecurityDescriptorCopyFlags() == null) ? 0 : getSecurityDescriptorCopyFlags().hashCode());
        hashCode = prime * hashCode + ((getObjectTags() == null) ? 0 : getObjectTags().hashCode());
        return hashCode;
    }

    @Override
    public Options clone() {
        try {
            return (Options) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException("Got a CloneNotSupportedException from Object.clone() " + "even though we're Cloneable!", e);
        }
    }

    @com.amazonaws.annotation.SdkInternalApi
    @Override
    public void marshall(ProtocolMarshaller protocolMarshaller) {
        com.amazonaws.services.datasync.model.transform.OptionsMarshaller.getInstance().marshall(this, protocolMarshaller);
    }
}