AmazonWebServiceRequest originalRequest = request.getOriginalRequest();
if (originalRequest instanceof CopySnapshotRequest) {
String serviceName = "ec2";
CopySnapshotRequest originalCopySnapshotRequest = (CopySnapshotRequest) originalRequest;
// The source regions where the snapshot currently resides.
String sourceRegion = originalCopySnapshotRequest.getSourceRegion();
String sourceSnapshotId = originalCopySnapshotRequest
.getSourceSnapshotId();
/*
* The region where the snapshot has to be copied from the source.
* The original copy snap shot request will have the end point set
* as the destination region in the client before calling this
* request.
*/
URI endPointDestination = request.getEndpoint();
String destinationRegion = originalCopySnapshotRequest
.getDestinationRegion() != null ? originalCopySnapshotRequest
.getDestinationRegion() : RegionUtils.getRegionByEndpoint(
endPointDestination.getHost()).toString();
URI endPointSource = toURI(RegionUtils.getRegion(sourceRegion)
.getServiceEndpoint(serviceName));
Request<CopySnapshotRequest> requestForPresigning = generateRequestForPresigning(
sourceSnapshotId, sourceRegion, destinationRegion);
requestForPresigning.setEndpoint(endPointSource);
requestForPresigning.setHttpMethod(HttpMethodName.GET);
AWS4Signer signer = new AWS4Signer();
signer.presignRequest(requestForPresigning, awsCredentials, null);
originalCopySnapshotRequest
.setPresignedUrl(generateUrl(requestForPresigning));
originalCopySnapshotRequest.setDestinationRegion(destinationRegion);
request.addParameter("DestinationRegion", StringUtils
.fromString(originalCopySnapshotRequest
.getDestinationRegion()));
request.addParameter("PresignedUrl", StringUtils
.fromString(originalCopySnapshotRequest.getPresignedUrl()));
}
}