protected InitiateMultipartUploadRequest newInitiateMultipartUploadRequest(
        UploadObjectRequest req) {
        return new EncryptedInitiateMultipartUploadRequest(
            req.getBucketName(), req.getKey(), req.getMetadata())
            .withMaterialsDescription(req.getMaterialsDescription())
            .withRedirectLocation(req.getRedirectLocation())
            .withSSEAwsKeyManagementParams(req.getSSEAwsKeyManagementParams())
            .withSSECustomerKey(req.getSSECustomerKey())
            .withStorageClass(req.getStorageClass())
            .withAccessControlList(req.getAccessControlList())
            .withCannedACL(req.getCannedAcl())
            .withGeneralProgressListener(req.getGeneralProgressListener())
            .withRequestMetricCollector(req.getRequestMetricCollector())
            .withRequestCredentialsProvider(req.getRequestCredentialsProvider())
            ;
    }
Used to initialized this observer. This method is an SPI (service
provider interface) that is called from
<code>AmazonS3EncryptionClient</code>.
<p>
Implementation of this method should never block.

@param req
           the upload object request
@param s3direct
           used to perform non-encrypting s3 operation via the current
           instance of s3 (encryption) client
@param s3
           the current instance of s3 (encryption) client
@param es
           the executor service to be used for concurrent uploads
@return this object
aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/UploadObjectObserver.java