/*
* Copyright 2010-2013 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.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.S3.Model
{
///
/// Container for the parameters to the GetObject operation.
/// Retrieves objects from Amazon S3.
///
public partial class GetObjectRequest : AmazonWebServiceRequest
{
private string bucketName;
DateTime? modifiedSinceDate;
DateTime? unmodifiedSinceDate;
DateTime? modifiedSinceDateUtc;
DateTime? unmodifiedSinceDateUtc;
string etagToMatch;
string etagToNotMatch;
private string key;
private ByteRange byteRange;
private DateTime? responseExpires;
private DateTime? responseExpiresUtc;
private string versionId;
private ResponseHeaderOverrides responseHeaders;
private ServerSideEncryptionCustomerMethod serverSideCustomerEncryption;
private string serverSideEncryptionCustomerProvidedKey;
private string serverSideEncryptionCustomerProvidedKeyMD5;
private RequestPayer requestPayer;
private int? partNumber;
///
/// The bucket name containing the object.
/// When using this API with an access point, you must direct requests to the access point hostname.
/// The access point hostname takes the form AccessPointName-AccountId.s3-accesspoint.Region.amazonaws.com.
/// When using this operation using an access point through the AWS SDKs, you provide the access point
/// ARN in place of the bucket name. For more information about access point ARNs, see
/// Using Access Points
/// in the Amazon Simple Storage Service Developer Guide.
///
public string BucketName
{
get { return this.bucketName; }
set { this.bucketName = value; }
}
// Check to see if Bucket property is set
internal bool IsSetBucketName()
{
return this.bucketName != null;
}
///
/// ETag to be matched as a pre-condition for returning the object,
/// otherwise a PreconditionFailed signal is returned.
///
public string EtagToMatch
{
get { return this.etagToMatch; }
set { this.etagToMatch = value; }
}
// Check to see if EtagToMatch property is set
internal bool IsSetEtagToMatch()
{
return this.etagToMatch != null;
}
///
///
/// This property is deprecated. Setting this property results in non-UTC DateTimes not
/// being marshalled correctly. Use ModifiedSinceDateUtc instead. Setting either ModifiedSinceDate or
/// ModifiedSinceDateUtc results in both ModifiedSinceDate and ModifiedSinceDateUtc being assigned,
/// the latest assignment to either one of the two property is reflected in the value of both.
/// ModifiedSinceDate is provided for backwards compatibility only and assigning a non-Utc DateTime
/// to it results in the wrong timestamp being passed to the service.
///
/// Returns the object only if it has been modified since the specified time,
/// otherwise returns a PreconditionFailed.
///
[Obsolete("Setting this property results in non-UTC DateTimes not being marshalled correctly. " +
"Use ModifiedSinceDateUtc instead. Setting either ModifiedSinceDate or ModifiedSinceDateUtc results in both ModifiedSinceDate and " +
"ModifiedSinceDateUtc being assigned, the latest assignment to either one of the two property is " +
"reflected in the value of both. ModifiedSinceDate is provided for backwards compatibility only and " +
"assigning a non-Utc DateTime to it results in the wrong timestamp being passed to the service.", false)]
public DateTime ModifiedSinceDate
{
get { return this.modifiedSinceDate ?? default(DateTime); }
set
{
this.modifiedSinceDate = value;
this.modifiedSinceDateUtc = new DateTime(value.Ticks, DateTimeKind.Utc);
}
}
///
/// Returns the object only if it has been modified since the specified time,
/// otherwise returns a PreconditionFailed.
///
public DateTime ModifiedSinceDateUtc
{
get { return this.modifiedSinceDateUtc.GetValueOrDefault(); }
set
{
this.modifiedSinceDateUtc = value;
this.modifiedSinceDate = value;
}
}
// Check to see if ModifiedSinceDateUtc property is set
internal bool IsSetModifiedSinceDateUtc()
{
return this.modifiedSinceDateUtc.HasValue;
}
///
/// ETag that should not be matched as a pre-condition for returning the object,
/// otherwise a PreconditionFailed signal is returned.
///
public string EtagToNotMatch
{
get { return this.etagToNotMatch; }
set { this.etagToNotMatch = value; }
}
// Check to see if EtagToNotMatch property is set
internal bool IsSetEtagToNotMatch()
{
return this.etagToNotMatch != null;
}
///
///
/// This property is deprecated. Setting this property results in non-UTC DateTimes not
/// being marshalled correctly. Use UnmodifiedSinceDateUtc instead. Setting either UnmodifiedSinceDate or
/// UnmodifiedSinceDateUtc results in both UnmodifiedSinceDate and UnmodifiedSinceDateUtc being assigned,
/// the latest assignment to either one of the two property is reflected in the value of both.
/// UnmodifiedSinceDate is provided for backwards compatibility only and assigning a non-Utc DateTime
/// to it results in the wrong timestamp being passed to the service.
///
/// Returns the object only if it has not been modified since the specified time,
/// otherwise returns a PreconditionFailed.
///
[Obsolete("Setting this property results in non-UTC DateTimes not being marshalled correctly. " +
"Use UnmodifiedSinceDateUtc instead. Setting either UnmodifiedSinceDate or UnmodifiedSinceDateUtc results in both UnmodifiedSinceDate and " +
"UnmodifiedSinceDateUtc being assigned, the latest assignment to either one of the two property is " +
"reflected in the value of both. UnmodifiedSinceDate is provided for backwards compatibility only and " +
"assigning a non-Utc DateTime to it results in the wrong timestamp being passed to the service.", false)]
public DateTime UnmodifiedSinceDate
{
get { return this.unmodifiedSinceDate.GetValueOrDefault(); }
set
{
this.unmodifiedSinceDate = value;
this.unmodifiedSinceDateUtc = new DateTime(value.Ticks, DateTimeKind.Utc);
}
}
///
/// Returns the object only if it has not been modified since the specified time,
/// otherwise returns a PreconditionFailed.
///
public DateTime UnmodifiedSinceDateUtc
{
get { return this.unmodifiedSinceDateUtc ?? default(DateTime); }
set
{
this.unmodifiedSinceDateUtc = value;
this.unmodifiedSinceDate = value;
}
}
// Check to see if UnmodifiedSinceDateUtc property is set
internal bool IsSetUnmodifiedSinceDateUtc()
{
return this.unmodifiedSinceDateUtc.HasValue;
}
///
/// Gets and sets the Key property. This is the user defined key that identifies the object in the bucket.
///
public string Key
{
get { return this.key; }
set { this.key = value; }
}
// Check to see if Key property is set
internal bool IsSetKey()
{
return this.key != null;
}
///
/// Downloads the specified range bytes of an object.
///
public ByteRange ByteRange
{
get { return this.byteRange; }
set { this.byteRange = value; }
}
// Check to see if ByteRange property is set
internal bool IsSetByteRange()
{
return this.byteRange != null && this.byteRange.FormattedByteRange != null;
}
///
/// A set of response headers that should be returned with the object.
///
public ResponseHeaderOverrides ResponseHeaderOverrides
{
get
{
if (this.responseHeaders == null)
{
this.responseHeaders = new ResponseHeaderOverrides();
}
return this.responseHeaders;
}
set
{
this.responseHeaders = value;
}
}
///
///
/// This property is deprecated. Setting this property results in non-UTC DateTimes not
/// being marshalled correctly. Use ResponseExpiresUtc instead. Setting either ResponseExpires or
/// ResponseExpiresUtc results in both ResponseExpires and ResponseExpiresUtc being assigned,
/// the latest assignment to either one of the two property is reflected in the value of both.
/// ResponseExpires is provided for backwards compatibility only and assigning a non-Utc DateTime
/// to it results in the wrong timestamp being passed to the service.
///
/// Sets the Expires header of the response.
///
[Obsolete("Setting this property results in non-UTC DateTimes not being marshalled correctly. " +
"Use ResponseExpiresUtc instead. Setting either ResponseExpires or ResponseExpiresUtc results in both ResponseExpires and " +
"ResponseExpiresUtc being assigned, the latest assignment to either one of the two property is " +
"reflected in the value of both. ResponseExpires is provided for backwards compatibility only and " +
"assigning a non-Utc DateTime to it results in the wrong timestamp being passed to the service.", false)]
public DateTime ResponseExpires
{
get { return this.responseExpires.GetValueOrDefault(); }
set
{
this.responseExpires = value;
this.responseExpiresUtc = new DateTime(value.Ticks, DateTimeKind.Utc);
}
}
///
/// Sets the Expires header of the response.
///
public DateTime ResponseExpiresUtc
{
get { return this.responseExpiresUtc ?? default(DateTime); }
set
{
this.responseExpiresUtc = value;
this.responseExpires = value;
}
}
// Check to see if ResponseExpiresUtc property is set
internal bool IsSetResponseExpiresUtc()
{
return this.responseExpiresUtc.HasValue;
}
///
/// VersionId used to reference a specific version of the object.
///
public string VersionId
{
get { return this.versionId; }
set { this.versionId = value; }
}
// Check to see if VersionId property is set
internal bool IsSetVersionId()
{
return this.versionId != null;
}
///
/// The Server-side encryption algorithm to be used with the customer provided key.
///
///
public ServerSideEncryptionCustomerMethod ServerSideEncryptionCustomerMethod
{
get { return this.serverSideCustomerEncryption; }
set { this.serverSideCustomerEncryption = value; }
}
// Check to see if ServerSideEncryptionCustomerMethod property is set
internal bool IsSetServerSideEncryptionCustomerMethod()
{
return this.serverSideCustomerEncryption != null && this.serverSideCustomerEncryption != ServerSideEncryptionCustomerMethod.None;
}
///
/// The base64-encoded encryption key for Amazon S3 to use to decrypt the object
///
/// Using the encryption key you provide as part of your request Amazon S3 manages both the encryption, as it writes
/// to disks, and decryption, when you access your objects. Therefore, you don't need to maintain any data encryption code. The only
/// thing you do is manage the encryption keys you provide.
///
///
/// When you retrieve an object, you must provide the same encryption key as part of your request. Amazon S3 first verifies
/// the encryption key you provided matches, and then decrypts the object before returning the object data to you.
///
///
/// Important: Amazon S3 does not store the encryption key you provide.
///
///
public string ServerSideEncryptionCustomerProvidedKey
{
get { return this.serverSideEncryptionCustomerProvidedKey; }
set { this.serverSideEncryptionCustomerProvidedKey = value; }
}
///
/// Checks if ServerSideEncryptionCustomerProvidedKey property is set.
///
/// true if ServerSideEncryptionCustomerProvidedKey property is set.
internal bool IsSetServerSideEncryptionCustomerProvidedKey()
{
return !System.String.IsNullOrEmpty(this.serverSideEncryptionCustomerProvidedKey);
}
///
/// The MD5 of the customer encryption key specified in the ServerSideEncryptionCustomerProvidedKey property. The MD5 is
/// base 64 encoded. This field is optional, the SDK will calculate the MD5 if this is not set.
///
public string ServerSideEncryptionCustomerProvidedKeyMD5
{
get { return this.serverSideEncryptionCustomerProvidedKeyMD5; }
set { this.serverSideEncryptionCustomerProvidedKeyMD5 = value; }
}
///
/// Checks if ServerSideEncryptionCustomerProvidedKeyMD5 property is set.
///
/// true if ServerSideEncryptionCustomerProvidedKey property is set.
internal bool IsSetServerSideEncryptionCustomerProvidedKeyMD5()
{
return !System.String.IsNullOrEmpty(this.serverSideEncryptionCustomerProvidedKeyMD5);
}
///
/// Part number of the object being read. This is a positive integer between 1 and 10,000.
/// Effectively performs a 'ranged' GET request for the part specified. Useful for downloading just a part of an object.
///
public int? PartNumber
{
get { return this.partNumber; }
set
{
if (value.HasValue)
{
if (value < 1 || 10000 < value)
{
throw new ArgumentException("PartNumber must be a positve integer between 1 and 10,000.");
}
}
this.partNumber = value;
}
}
///
/// Checks if PartNumber property is set.
///
/// true if PartNumber property is set.
internal bool IsSetPartNumber()
{
return this.partNumber.HasValue;
}
///
/// Confirms that the requester knows that she or he will be charged for the list objects request.
/// Bucket owners need not specify this parameter in their requests.
///
public RequestPayer RequestPayer
{
get { return this.requestPayer; }
set { this.requestPayer = value; }
}
///
/// Checks to see if RequetsPayer is set.
///
/// true, if RequestPayer property is set.
internal bool IsSetRequestPayer()
{
return requestPayer != null;
}
}
}