/*
* Copyright 2010 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.services.s3.model;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.amazonaws.AmazonWebServiceRequest;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.internal.Constants;
/**
* <p>
* Provides options for copying an Amazon S3 object
* from a source location to a new destination.
* </p>
* <p>
* All <code>CopyObjectRequests</code> must specify a source bucket and key, along with a destination
* bucket and key. Beyond that, requests also specify:
* </p>
* <ul>
* <li>Object metadata for new object,</li>
* <li>A {@link CannedAccessControlList} for the new object,</li>
* <li>Constraints controlling if the copy will be performed or not.</li>
* </ul>
*
* @see AmazonS3Client#copyObject(String, String, String, String)
* @see AmazonS3Client#copyObject(com.amazonaws.services.s3.model.CopyObjectRequest)
* @see CopyObjectResult
*/
public class CopyObjectRequest extends AmazonWebServiceRequest {
/** The name of the bucket containing the object to be copied */
private String sourceBucketName;
/**
* The key in the source bucket under which the object to be copied is
* stored
*/
private String sourceKey;
/**
* Optional version Id specifying which version of the source object to
* copy. If not specified, the most recent version of the source object will
* be copied.
* <p>
* For more information about enabling versioning for a bucket, see
* {@link AmazonS3#setBucketVersioningConfiguration(SetBucketVersioningConfigurationRequest)}.
*/
private String sourceVersionId;
/** The name of the bucket to contain the copy of the source object */
private String destinationBucketName;
/**
* The key in the destination bucket under which the source object will be
* copied
*/
private String destinationKey;
/**
* The optional Amazon S3 storage class to use when storing the newly copied
* object. If not specified, the default, standard storage class will be used.
* <p>
* For more information on Amazon S3 storage classes and available values,
* see the {@link StorageClass} enumeration.
*/
private String storageClass;
/** Optional field specifying the object metadata for the new object */
private ObjectMetadata newObjectMetadata;
/** Optional field specifying the ACL for the new object */
private CannedAccessControlList cannedACL;
/**
* Optional list of ETag values that constrain the copy request to only be
* executed if the source object's ETag matches one of the specified ETag
* values.
*/
private List<String> matchingETagConstraints = new ArrayList<String>();
/**
* Optional list of ETag values that constrain the copy request to only be
* executed if the source object's ETag does not match any of the specified
* ETag constraint values.
*/
private List<String> nonmatchingEtagConstraints = new ArrayList<String>();
/**
* Optional field that constrains the copy request to only be executed if
* the source object has not been modified since the specified date.
*/
private Date unmodifiedSinceConstraint;
/**
* Optional field that constrains the copy request to only be executed if
* the source object has been modified since the specified date.
*/
private Date modifiedSinceConstraint;
/**
* <p>
* Constructs a new
* {@link com.amazonaws.services.s3.model#CopyObjectRequest}
* with only basic options.
* </p>
*
* @param sourceBucketName
* The name of the S3 bucket containing the object to copy.
* @param sourceKey
* The source bucket key under which the object to copy is
* stored.
* @param destinationBucketName
* The name of the S3 bucket to which the new object will be
* copied.
* @param destinationKey
* The destination bucket key under which the new object
* will be copied.
*
* @see CopyObjectRequest#CopyObjectRequest(String, String, String, String, String)
*/
public CopyObjectRequest(String sourceBucketName, String sourceKey,
String destinationBucketName, String destinationKey) {
this(sourceBucketName, sourceKey, null, destinationBucketName, destinationKey);
}
/**
* <p>
* Constructs a new {@link CopyObjectRequest} with basic options, providing
* an S3 version ID identifying the specific version of the source object
* to copy.
* </p>
*
* @param sourceBucketName
* The name of the S3 bucket containing the object to copy.
* @param sourceKey
* The key in the source bucket under which the object to copy is
* stored.
* @param sourceVersionId
* The S3 version ID which uniquely identifies a specific version
* of the source object to copy.
* @param destinationBucketName
* The name of the S3 bucket in which the new object will be
* copied.
* @param destinationKey
* The key in the destination bucket under which the new object
* will be copied.
*
* @see CopyObjectRequest#CopyObjectRequest(String sourceBucketName, String sourceKey, String destinationBucketName, String destinationKey)
*/
public CopyObjectRequest(String sourceBucketName, String sourceKey, String sourceVersionId,
String destinationBucketName, String destinationKey) {
this.sourceBucketName = sourceBucketName;
this.sourceKey = sourceKey;
this.sourceVersionId = sourceVersionId;
this.destinationBucketName = destinationBucketName;
this.destinationKey = destinationKey;
}
/**
* Gets the name of the bucket containing the source object to be copied.
*
* @return The name of the bucket containing the source object to be copied.
*
* @see CopyObjectRequest#setSourceBucketName(String sourceBucketName)
*/
public String getSourceBucketName() {
return sourceBucketName;
}
/**
* Sets the name of the bucket containing the source object to be copied.
*
* @param sourceBucketName
* The name of the bucket containing the source object to be
* copied.
* @see CopyObjectRequest#getSourceBucketName()
*/
public void setSourceBucketName(String sourceBucketName) {
this.sourceBucketName = sourceBucketName;
}
/**
* Sets the name of the bucket containing the source object to be copied,
* and returns this object, enabling additional method calls to be chained
* together.
*
* @param sourceBucketName
* The name of the bucket containing the source object to be
* copied.
*
* @return This <code>CopyObjectRequest</code> instance,
* enabling additional method calls to be chained together.
*/
public CopyObjectRequest withSourceBucketName(String sourceBucketName) {
setSourceBucketName(sourceBucketName);
return this;
}
/**
* Gets the source bucket key under which the source object to be
* copied is stored.
*
* @return The source bucket key under which the source object to be
* copied is stored.
*
* @see CopyObjectRequest#setSourceKey(String sourceKey)
*/
public String getSourceKey() {
return sourceKey;
}
/**
* Sets the source bucket key under which the source object to be
* copied is stored.
*
* @param sourceKey
* The source bucket key under which the source object to
* be copied is stored.
*
* @see CopyObjectRequest#setSourceKey(String sourceKey)}
*/
public void setSourceKey(String sourceKey) {
this.sourceKey = sourceKey;
}
/**
* Sets the key in the source bucket under which the source object to be
* copied is stored and returns this object, enabling additional method calls
* to be chained together.
*
* @param sourceKey
* The key in the source bucket under which the source object to
* be copied is stored.
*
* @return This <code>CopyObjectRequest</code> instance, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withSourceKey(String sourceKey) {
setSourceKey(sourceKey);
return this;
}
/**
* <p>
* Gets the version ID specifying which version of the source
* object to copy. If not specified, the most recent version of the source
* object will be copied.
* </p>
* <p>
* Objects created before enabling versioning or when versioning is
* suspended are given the default <code>null</code> version ID (see
* {@link Constants#NULL_VERSION_ID}). Note that the
* <code>null</code> version ID is a valid version ID and is not the
* same as not having a version ID.
* </p>
* <p>
* For more information about enabling versioning for a bucket, see
* {@link AmazonS3#setBucketVersioningConfiguration(SetBucketVersioningConfigurationRequest)}.
* </p>
*
* @return The version ID specifying which version of the source
* object to copy.
*
*
* @see Constants#NULL_VERSION_ID
* @see CopyObjectRequest#setSourceVersionId(String sourceVersionId)
*/
public String getSourceVersionId() {
return sourceVersionId;
}
/**
* <p>
* Sets the optional version ID specifying which version of the source
* object to copy. If not specified, the most recent version of the source
* object will be copied.
* </p>
* <p>
* Objects created before enabling versioning or when versioning is
* suspended are given the default <code>null</code> version ID (see
* {@link Constants#NULL_VERSION_ID}). Note that the
* <code>null</code> version ID is a valid version ID and is not the
* same as not having a version ID.
* </p>
* <p>
* For more information about enabling versioning for a bucket, see
* {@link AmazonS3#setBucketVersioningConfiguration(SetBucketVersioningConfigurationRequest)}.
* </p>
*
* @param sourceVersionId
* The optional version ID specifying which version of the
* source object to copy.
*/
public void setSourceVersionId(String sourceVersionId) {
this.sourceVersionId = sourceVersionId;
}
/**
* <p>
* Sets the optional version ID specifying which version of the source
* object to copy and returns this object, enabling additional method calls
* to be chained together. If not specified, the most recent version of the
* source object will be copied.
* </p>
* <p>
* Objects created before enabling versioning or when versioning is
* suspended are given the default <code>null</code> version ID (see
* {@link Constants#NULL_VERSION_ID}). Note that the
* <code>null</code> version ID is a valid version ID and is not the
* same as not having a version ID.
* </p>
* <p>
* For more information about enabling versioning for a bucket, see
* {@link AmazonS3#setBucketVersioningConfiguration(SetBucketVersioningConfigurationRequest)}.
* </p>
*
* @param sourceVersionId
* The optional version ID specifying which version of the
* source object to copy.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withSourceVersionId(String sourceVersionId) {
setSourceVersionId(sourceVersionId);
return this;
}
/**
* Gets the destination bucket name which will contain the new,
* copied object.
*
* @return The name of the destination bucket which will contain the new,
* copied object.
*
* @see CopyObjectRequest#setDestinationBucketName(String destinationBucketName)
*/
public String getDestinationBucketName() {
return destinationBucketName;
}
/**
* Sets the destination bucket name which will contain the new,
* copied object.
*
* @param destinationBucketName
* The name of the destination bucket which will contain the new,
* copied object.
*
* @see CopyObjectRequest#getDestinationBucketName()
*/
public void setDestinationBucketName(String destinationBucketName) {
this.destinationBucketName = destinationBucketName;
}
/**
* Sets the name of the destination bucket which will contain the new,
* copied object and returns this object, enabling additional method calls
* to be chained together.
*
* @param destinationBucketName
* The name of the destination bucket which will contain the new,
* copied object.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withDestinationBucketName(String destinationBucketName) {
setDestinationBucketName(destinationBucketName);
return this;
}
/**
* Gets the destination bucket key under which the new, copied
* object will be stored.
*
* @return The destination bucket key under which the new, copied
* object will be stored.
*
* @see CopyObjectRequest#setDestinationKey(String destinationKey)
*/
public String getDestinationKey() {
return destinationKey;
}
/**
* Sets the destination bucket key under which the new, copied object
* will be stored.
*
* @param destinationKey
* The destination bucket key under which the new, copied
* object will be stored.
*
* @see CopyObjectRequest#getDestinationKey()
*/
public void setDestinationKey(String destinationKey) {
this.destinationKey = destinationKey;
}
/**
* Sets the destination bucket key under which the new, copied object
* will be stored and returns this object, enabling additional method calls
* can be chained together.
*
* @param destinationKey
* The destination bucket key under which the new, copied
* object will be stored.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withDestinationKey(String destinationKey) {
setDestinationKey(destinationKey);
return this;
}
/*
* Optional Request Properties
*/
/**
* <p>
* Gets the optional Amazon S3 storage class to use when storing the newly
* copied object. If not specified, the default standard storage class is
* used.
* </p>
* <p>
* For more information on available Amazon S3 storage classes, see the
* {@link StorageClass} enumeration.
* </p>
*
* @return The Amazon S3 storage class to use when storing the newly copied
* object.
*
* @see CopyObjectRequest#setStorageClass(String)
* @see CopyObjectRequest#setStorageClass(StorageClass)
*/
public String getStorageClass() {
return storageClass;
}
/**
* <p>
* Sets the optional Amazon S3 storage class to use when storing the newly
* copied object. If not specified, the default standard storage class is
* used.
* </p>
* <p>
* For more information on Amazon S3 storage classes and available values,
* see the {@link StorageClass} enumeration.
* </p>
*
* @return The Amazon S3 storage class to use when storing the newly copied
* object.
*
* @see CopyObjectRequest#getStorageClass()
* @see CopyObjectRequest#setStorageClass(StorageClass)
*/
public void setStorageClass(String storageClass) {
this.storageClass = storageClass;
}
/**
* <p>
* Sets the optional Amazon S3 storage class to use when storing the newly
* copied object and returns this <code>CopyObjectRequest</code>, enabling additional
* method calls to be chained together. If not specified, the default
* standard storage class is used.
* </p>
* <p>
* For more information on Amazon S3 storage classes and available values,
* see the {@link StorageClass} enumeration.
* </p>
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withStorageClass(String storageClass) {
setStorageClass(storageClass);
return this;
}
/**
* <p>
* Sets the optional Amazon S3 storage class to use when storing the newly
* copied object. If not specified, the default standard storage class
* is used.
* </p>
* <p>
* For more information on Amazon S3 storage classes and available values,
* see the {@link StorageClass} enumeration.
* </p>
*
* @return The Amazon S3 storage class to use when storing the newly copied
* object.
*
* @see CopyObjectRequest#getStorageClass()
* @see CopyObjectRequest#setStorageClass(String)
*/
public void setStorageClass(StorageClass storageClass) {
this.storageClass = storageClass.toString();
}
/**
* <p>
* Sets the optional Amazon S3 storage class to use when storing the newly
* copied object and returns this CopyObjectRequest, enabling additional
* method calls to be chained together. If not specified, the default standard storage class
* is used.
* </p>
* <p>
* For more information on Amazon S3 storage classes and available values,
* see the {@link StorageClass} enumeration.
* </p>
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withStorageClass(StorageClass storageClass) {
setStorageClass(storageClass);
return this;
}
/**
* Gets the canned ACL to use for the new, copied object. If no canned
* ACL is specified, S3 will default to using the
* {@link CannedAccessControlList#Private} canned ACL for all copied
* objects.
*
* @return The canned ACL to set for the newly copied object,
* or <code>null</code> if no
* canned ACL has been specified.
*/
public CannedAccessControlList getCannedAccessControlList() {
return cannedACL;
}
/**
* Sets the canned ACL to use for the newly copied object. If no canned ACL
* is specified, S3 will default to using the
* {@link CannedAccessControlList#Private} canned ACL for all copied
* objects.
*
* @param cannedACL
* The canned ACL to set for the newly copied object.
*/
public void setCannedAccessControlList(CannedAccessControlList cannedACL) {
this.cannedACL = cannedACL;
}
/**
* Sets the canned ACL to use for the newly copied object, and returns this
* <code>CopyObjectRequest</code>, enabling additional method calls to be chained
* together.
*
* @param cannedACL
* The canned ACL to set for the newly copied object.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withCannedAccessControlList(CannedAccessControlList cannedACL) {
setCannedAccessControlList(cannedACL);
return this;
}
/**
* Gets the optional object metadata to set for the new, copied object.
*
* @return The object metadata to set for the newly copied object.
* Returns <code>null</code> if no object metadata has been specified.
*
* @see CopyObjectRequest#setNewObjectMetadata(ObjectMetadata newObjectMetadata)
*/
public ObjectMetadata getNewObjectMetadata() {
return newObjectMetadata;
}
/**
* Sets the object metadata to use for the new, copied object. By default
* the object metadata from the source object is copied to the
* destination object, but when setting object metadata with this method,
* no metadata from the source object is copied. Instead, the new
* destination object will have the metadata specified with this call.
*
* @param newObjectMetadata
* The object metadata to use for the newly copied object.
*
* @see CopyObjectRequest#getNewObjectMetadata()
*/
public void setNewObjectMetadata(ObjectMetadata newObjectMetadata) {
this.newObjectMetadata = newObjectMetadata;
}
/**
* Sets the object metadata to use for the new, copied object and returns
* this object, enabling additional method calls to be chained together. By
* default, the object metadata from the source object will be copied to the
* destination object, but if callers set object metadata with this method,
* it will be used instead.
*
* @param newObjectMetadata
* The object metadata to use for the newly copied object.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withNewObjectMetadata(ObjectMetadata newObjectMetadata) {
setNewObjectMetadata(newObjectMetadata);
return this;
}
/*
* Optional Constraints
*/
/**
* <p>
* Gets the optional list of ETag constraints that, when present, <b>must</b>
* include a match for the source object's current ETag in order for the
* copy object request to be executed. Only one ETag in the list needs to
* match for the request to be executed by Amazon S3.
* </p>
* <p>
* Matching ETag constraints may be used with the unmodified since
* constraint, but not with any other type of constraint.
* </p>
*
* @return The optional list of ETag constraints that when present must
* include a match for the source object's current ETag in order for
* this request to be executed.
*/
public List<String> getMatchingETagConstraints() {
return matchingETagConstraints;
}
/**
* <p>
* Sets the optional list of ETag constraints that, when present, <b>must</b>
* include a match for the source object's current ETag in order for the
* copy object request to be executed. If none of the specified ETags match
* the source object's current ETag, the copy object operation will be
* aborted. Only one ETag in the list needs to match for the request to be
* executed by Amazon S3.
* </p>
* <p>
* Matching ETag constraints may be used with the unmodified since
* constraint, but not with any other type of constraint.
* </p>
*
* @param eTagList
* The optional list of ETag constraints that must include a
* match for the source object's current ETag in order for this
* request to be executed.
*/
public void setMatchingETagConstraints(List<String> eTagList) {
this.matchingETagConstraints = eTagList;
}
/**
* <p>
* Adds a single ETag constraint to this request and returns this object,
* enabling additional method calls to be chained together. Multiple ETag
* constraints can be added to a request, but one must match the source
* object's current ETag in order for the copy object request to be
* executed. If none of the ETag constraints added to this request match the
* source object's current ETag, the copy object operation will be aborted.
* </p>
* <p>
* Matching ETag constraints may be used with the unmodified since
* constraint, but not with any other type of constraint.
* </p>
*
* @param eTag
* The matching ETag constraint to add to this request.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withMatchingETagConstraint(String eTag) {
this.matchingETagConstraints.add(eTag);
return this;
}
/**
* <p>
* Gets the optional list of ETag constraints that, when present, <b>must
* not</b> include a match for the source object's current ETag in order for
* the copy object request to be executed. If any entry in the non-matching
* ETag constraint list matches the source object's current ETag, this copy
* request <b>will not</b> be executed by Amazon S3.
* </p>
* <p>
* Non-matching ETag constraints may be used with the modified since
* constraint, but not with any other type of constraint.
* </p>
*
* @return The optional list of ETag constraints that when present <b>must
* not</b> include a match for the source object's current ETag in
* order for this request to be executed.
*/
public List<String> getNonmatchingETagConstraints() {
return nonmatchingEtagConstraints;
}
/**
* <p>
* Sets the optional list of ETag constraints that, when present, <b>must
* not</b> include a match for the source object's current ETag in order for
* the copy object request to be executed. If any entry in the non-matching
* ETag constraint list matches the source object's current ETag, this copy
* request <b>will not</b> be executed by Amazon S3.
* </p>
* <p>
* Non-matching ETag constraints may be used with the modified since
* constraint, but not with any other type of constraint.
* </p>
*
* @param eTagList
* The list of ETag constraints that, when present, <b>must not</b>
* include a match for the source object's current ETag in
* order for this request to be executed.
*/
public void setNonmatchingETagConstraints(List<String> eTagList) {
this.nonmatchingEtagConstraints = eTagList;
}
/**
* <p>
* Adds a single ETag constraint to this request and returns this object, enabling
* additional method calls to be chained together. Multiple ETag
* constraints can be added to a request, but all ETag constraints <b>must
* not</b> match the source object's current ETag in order for the copy
* object request to be executed. If any entry in the non-matching ETag
* constraint list matches the source object's current ETag, this copy
* request <b>will not</b> be executed by Amazon S3.
* </p>
* <p>
* Non-matching ETag constraints may be used with the modified since
* constraint, but not with any other type of constraint.
* </p>
*
* @param eTag
* The non-matching ETag constraint to add to this request.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withNonmatchingETagConstraint(String eTag) {
this.nonmatchingEtagConstraints.add(eTag);
return this;
}
/**
* <p>
* Gets the optional unmodified constraint that restricts this
* request to executing only if the source object has <b>not</b> been
* modified after the specified date.
* </p>
* <p>
* The unmodified since constraint may be used with matching ETag
* constraints, but not with any other type of constraint.
* </p>
*
* @return The optional unmodified constraint that restricts this
* request to executing only if the source object has <b>not</b>
* been modified after the specified date.
*/
public Date getUnmodifiedSinceConstraint() {
return unmodifiedSinceConstraint;
}
/**
* <p>
* Sets the optional unmodified constraint that restricts this request
* to executing only if the source object has <b>not</b> been
* modified after the specified date.
* </p>
* <p>
* The unmodified constraint may be used with matching ETag
* constraints, but not with any other type of constraint.
* </p>
* <p>
* Note that Amazon S3 will ignore any dates occurring in the future.
* </p>
*
* @param date
* The unmodified constraint that restricts this request to
* executing only if the source object has <b>not</b> been
* modified after this date.
*/
public void setUnmodifiedSinceConstraint(Date date) {
this.unmodifiedSinceConstraint = date;
}
/**
* <p>
* Sets the optional unmodified constraint that restricts this request
* to executing only if the source object has <b>not</b> been
* modified after the specified date. Returns this object, enabling
* additional method calls to be chained together.
* </p>
* <p>
* The unmodified constraint may be used with matching ETag
* constraints, but not with any other type of constraint.
* </p>
* <p>
* Note that Amazon S3 will ignore any dates occurring in the future.
* </p>
*
* @param date
* The unmodified constraint that restricts this request to
* executing only if the source object has <b>not</b> been
* modified after this date.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withUnmodifiedSinceConstraint(Date date) {
setUnmodifiedSinceConstraint(date);
return this;
}
/**
* <p>
* Gets the optional modified constraint that restricts this
* request to executing only if the source object <b>has</b> been
* modified after the specified date.
* </p>
* <p>
* The modified constraint may be used with non-matching ETag
* constraints, but not with any other type of constraint.
* </p>
*
* @return The optional modified constraint that restricts this
* request to executing only if the source object <b>has</b>
* been modified after the specified date.
*/
public Date getModifiedSinceConstraint() {
return modifiedSinceConstraint;
}
/**
* <p>
* Sets the optional modified constraint that restricts this request
* to executing only if the source object <b>has</b> been modified
* after the specified date.
* </p>
* <p>
* The modified constraint may be used with non-matching ETag
* constraints, but not with any other type of constraint.
* </p>
* <p>
* Note that Amazon S3 will ignore any dates occurring in the future.
* </p>
*
* @param date
* The modified constraint that restricts this request to
* executing only if the source object <b>has</b> been
* modified after the specified date.
*/
public void setModifiedSinceConstraint(Date date) {
this.modifiedSinceConstraint = date;
}
/**
* <p>
* Sets the optional modified constraint that restricts this request
* to executing only if the source object <b>has</b> been modified
* after the specified date. Returns this object, enabling additional
* method calls to be chained together.
* </p>
* <p>
* The modified constraint may be used with non-matching ETag
* constraints, but not with any other type of constraint.
* </p>
* <p>
* Note that Amazon S3 will ignore any dates occurring in the future.
* </p>
*
* @param date
* The modified constraint that restricts this request to
* executing only if the source object <b>has</b> been
* modified after the specified date.
*
* @return This <code>CopyObjectRequest</code>, enabling additional method calls to be
* chained together.
*/
public CopyObjectRequest withModifiedSinceConstraint(Date date) {
setModifiedSinceConstraint(date);
return this;
}
}