Skip to content

Commit b7bd9ff

Browse files
committed
Migration tool ObjectMetadata transforms
1 parent f87c076 commit b7bd9ff

File tree

6 files changed

+520
-81
lines changed

6 files changed

+520
-81
lines changed

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3Transforms.java

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,57 @@
1515

1616
package foo.bar;
1717

18+
import java.io.ByteArrayInputStream;
19+
import java.io.InputStream;
20+
import java.util.Date;
1821
import software.amazon.awssdk.core.async.AsyncRequestBody;
22+
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
1923
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
2024
import software.amazon.awssdk.transfer.s3.S3TransferManager;
2125
import software.amazon.awssdk.transfer.s3.model.UploadRequest;
2226

23-
import java.io.ByteArrayInputStream;
24-
import java.io.InputStream;
25-
2627
public class S3Transforms {
2728

28-
void upload(S3TransferManager tm, String bucket, String key) {
29+
void upload_streamWithLiteralLength(S3TransferManager tm, String bucket, String key) {
30+
HeadObjectResponse metadata = HeadObjectResponse.builder()
31+
.build();
32+
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
33+
PutObjectRequest requestWithStreamAndLiteralLength = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location").contentLength(333L)
34+
.build();
35+
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithStreamAndLiteralLength).requestBody(AsyncRequestBody.fromInputStream(inputStream, 333, newExecutorServiceVariableToDefine)).build());
36+
}
37+
38+
void upload_streamWithAssignedLength(S3TransferManager tm, String bucket, String key) {
39+
HeadObjectResponse metadata = HeadObjectResponse.builder()
40+
.build();
41+
long contentLen = 777;
2942
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
30-
PutObjectRequest requestWithInputStream = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location")
43+
PutObjectRequest requestWithStreamAndAssignedLength = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location").contentLength(contentLen)
3144
.build();
32-
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithInputStream).requestBody(AsyncRequestBody.fromInputStream(inputStream, -1L, newExecutorServiceVariableToDefine)).build());
45+
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithStreamAndAssignedLength).requestBody(AsyncRequestBody.fromInputStream(inputStream, contentLen, newExecutorServiceVariableToDefine)).build());
46+
}
47+
48+
void upload_streamWithoutLength(S3TransferManager tm, String bucket, String key) {
49+
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
50+
PutObjectRequest requestWithStreamAndNoLength = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location")
51+
.build();
52+
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithStreamAndNoLength).requestBody(AsyncRequestBody.fromInputStream(inputStream, -1L, newExecutorServiceVariableToDefine)).build());
53+
}
54+
55+
void objectmetadata_unsupportedSetters(Date dateVal) {
56+
HeadObjectResponse metadata = HeadObjectResponse.builder()
57+
.build();
58+
59+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - expirationTimeRuleId - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.expirationTimeRuleId("expirationTimeRuleId");
60+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - ongoingRestore - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.ongoingRestore(false);
61+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - requesterCharged - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.requesterCharged(false);
62+
63+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - lastModified - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.lastModified(dateVal);
64+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - httpExpiresDate - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.httpExpiresDate(dateVal);
65+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - expirationTime - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.expirationTime(dateVal);
66+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - restoreExpirationTime - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.restoreExpirationTime(dateVal);
67+
68+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - header - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.header("key", "val");
69+
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - addUserMetadata - is not supported, please manually migrate the code by setting it on the v2 PutObjectRequest.*/metadata.addUserMetadata("a", "b");
3370
}
3471
}

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/before/src/main/java/foo/bar/S3Transforms.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,54 @@
1515

1616
package foo.bar;
1717

18+
import com.amazonaws.services.s3.model.ObjectMetadata;
1819
import com.amazonaws.services.s3.model.PutObjectRequest;
1920
import com.amazonaws.services.s3.transfer.TransferManager;
2021
import java.io.ByteArrayInputStream;
2122
import java.io.InputStream;
23+
import java.util.Date;
2224

2325
public class S3Transforms {
2426

25-
void upload(TransferManager tm, String bucket, String key) {
27+
void upload_streamWithLiteralLength(TransferManager tm, String bucket, String key) {
28+
ObjectMetadata metadata = new ObjectMetadata();
29+
metadata.setContentLength(333);
2630
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
27-
PutObjectRequest requestWithInputStream = new PutObjectRequest(bucket, key, "location");
28-
requestWithInputStream.setInputStream(inputStream);
29-
tm.upload(requestWithInputStream);
31+
PutObjectRequest requestWithStreamAndLiteralLength = new PutObjectRequest(bucket, key, "location").withMetadata(metadata);
32+
requestWithStreamAndLiteralLength.setInputStream(inputStream);
33+
tm.upload(requestWithStreamAndLiteralLength);
34+
}
35+
36+
void upload_streamWithAssignedLength(TransferManager tm, String bucket, String key) {
37+
ObjectMetadata metadata = new ObjectMetadata();
38+
long contentLen = 777;
39+
metadata.setContentLength(contentLen);
40+
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
41+
PutObjectRequest requestWithStreamAndAssignedLength = new PutObjectRequest(bucket, key, "location").withMetadata(metadata);
42+
requestWithStreamAndAssignedLength.setInputStream(inputStream);
43+
tm.upload(requestWithStreamAndAssignedLength);
44+
}
45+
46+
void upload_streamWithoutLength(TransferManager tm, String bucket, String key) {
47+
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
48+
PutObjectRequest requestWithStreamAndNoLength = new PutObjectRequest(bucket, key, "location");
49+
requestWithStreamAndNoLength.setInputStream(inputStream);
50+
tm.upload(requestWithStreamAndNoLength);
51+
}
52+
53+
void objectmetadata_unsupportedSetters(Date dateVal) {
54+
ObjectMetadata metadata = new ObjectMetadata();
55+
56+
metadata.setExpirationTimeRuleId("expirationTimeRuleId");
57+
metadata.setOngoingRestore(false);
58+
metadata.setRequesterCharged(false);
59+
60+
metadata.setLastModified(dateVal);
61+
metadata.setHttpExpiresDate(dateVal);
62+
metadata.setExpirationTime(dateVal);
63+
metadata.setRestoreExpirationTime(dateVal);
64+
65+
metadata.setHeader("key", "val");
66+
metadata.addUserMetadata("a", "b");
3067
}
3168
}

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3Streaming.java

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
import java.io.ByteArrayInputStream;
1919
import java.io.File;
2020
import java.io.InputStream;
21+
import java.util.HashMap;
22+
import java.util.Map;
2123
import software.amazon.awssdk.core.ResponseInputStream;
2224
import software.amazon.awssdk.core.sync.RequestBody;
2325
import software.amazon.awssdk.services.s3.S3Client;
2426
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
2527
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
28+
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
2629
import software.amazon.awssdk.services.s3.model.ObjectCannedACL;
2730
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
2831
import software.amazon.awssdk.services.s3.model.RequestPayer;
@@ -47,6 +50,13 @@ void putObject_bucketKeyFile(String bucket, String key, File file) {
4750
.build(), RequestBody.fromFile(file));
4851
}
4952

53+
void putObject_bucketKeyStreamMetadata(String bucket, String key, InputStream stream) {
54+
HeadObjectResponse metadata = HeadObjectResponse.builder()
55+
.build();
56+
s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key).contentLength(22L)
57+
.build(), RequestBody.fromInputStream(stream, 22L));
58+
}
59+
5060
/**
5161
* Mixed ordering to ensure the files are assigned correctly
5262
*/
@@ -76,10 +86,12 @@ void putObject_requestPojoWithInputStream(String bucket, String key) {
7686

7787
PutObjectRequest request1 = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location")
7888
.build();
79-
/*AWS SDK for Java v2 migration: When using InputStream to upload with S3Client, Content-Length should be specified and used with RequestBody.fromInputStream(). Otherwise, the entire stream will be buffered in memory.*/s3.putObject(request1, RequestBody.fromContentProvider(() -> inputStream1, "binary/octet-stream"));
89+
/*AWS SDK for Java v2 migration: When using InputStream to upload with S3Client, Content-Length should be specified and used with RequestBody.fromInputStream(). Otherwise, the entire stream will be buffered in memory.*/s3.putObject(request1, RequestBody.fromContentProvider(() -> inputStream1, "application/octet-stream"));
8090

81-
/*AWS SDK for Java v2 migration: When using InputStream to upload with S3Client, Content-Length should be specified and used with RequestBody.fromInputStream(). Otherwise, the entire stream will be buffered in memory.*/s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location")
82-
.build(), RequestBody.fromContentProvider(() -> inputStream2, "binary/octet-stream"));
91+
HeadObjectResponse metadata = HeadObjectResponse.builder()
92+
.build();
93+
s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location").contentLength(11L)
94+
.build(), RequestBody.fromInputStream(inputStream2, 11L));
8395
}
8496

8597
void putObject_requestPojoWithoutPayload(String bucket, String key) {
@@ -104,4 +116,39 @@ void putObjectRequesterPaysSetter() {
104116
PutObjectRequest requestWithFalse =PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location")
105117
.build();
106118
}
119+
120+
void putObjectRequest_setMetadata() {
121+
HeadObjectResponse metadata = HeadObjectResponse.builder()
122+
.build();
123+
124+
PutObjectRequest request = PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location")
125+
.build();
126+
request = request.toBuilder().contentLength(66L)
127+
.contentEncoding("UTF-8")
128+
.contentType("text/plain")
129+
.build();
130+
}
131+
132+
void putObjectRequest_withMetadata() {
133+
HeadObjectResponse metadata = HeadObjectResponse.builder()
134+
.build();
135+
long contentLen = 66;
136+
137+
Map<String, String> userMetadata = new HashMap<>();
138+
userMetadata.put("key", "value");
139+
140+
PutObjectRequest request = PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location").contentLength(contentLen)
141+
.contentEncoding("UTF-8")
142+
.contentType("text/plain")
143+
.contentLanguage("en-US")
144+
.cacheControl("must-revalidate")
145+
.contentDisposition("inline")
146+
.contentMD5("md5Val")
147+
.serverSideEncryption("sseEncryptionVal")
148+
.serverSideEncryption("sseAlgorithmVal")
149+
.sseCustomerKeyMD5("sseCustomerKeyMd5Val")
150+
.bucketKeyEnabled(true)
151+
.metadata(userMetadata)
152+
.build();
153+
}
107154
}

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/before/src/main/java/foo/bar/S3Streaming.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
import com.amazonaws.services.s3.AmazonS3;
1919
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
2020
import com.amazonaws.services.s3.model.CannedAccessControlList;
21+
import com.amazonaws.services.s3.model.ObjectMetadata;
2122
import com.amazonaws.services.s3.model.PutObjectRequest;
2223
import com.amazonaws.services.s3.model.S3Object;
2324
import java.io.ByteArrayInputStream;
2425
import java.io.File;
2526
import java.io.InputStream;
27+
import java.util.HashMap;
28+
import java.util.Map;
2629

2730
public class S3Streaming {
2831

@@ -41,6 +44,12 @@ void putObject_bucketKeyFile(String bucket, String key, File file) {
4144
s3.putObject(bucket, key, file);
4245
}
4346

47+
void putObject_bucketKeyStreamMetadata(String bucket, String key, InputStream stream) {
48+
ObjectMetadata metadata = new ObjectMetadata();
49+
metadata.setContentLength(22);
50+
s3.putObject(bucket, key, stream, metadata);
51+
}
52+
4453
/**
4554
* Mixed ordering to ensure the files are assigned correctly
4655
*/
@@ -69,7 +78,9 @@ void putObject_requestPojoWithInputStream(String bucket, String key) {
6978
request1.setInputStream(inputStream1);
7079
s3.putObject(request1);
7180

72-
s3.putObject(new PutObjectRequest(bucket, key, "location").withInputStream(inputStream2));
81+
ObjectMetadata metadata = new ObjectMetadata();
82+
metadata.setContentLength(11);
83+
s3.putObject(new PutObjectRequest(bucket, key, "location").withInputStream(inputStream2).withMetadata(metadata));
7384
}
7485

7586
void putObject_requestPojoWithoutPayload(String bucket, String key) {
@@ -90,4 +101,36 @@ void putObjectRequesterPaysSetter() {
90101

91102
PutObjectRequest requestWithFalse = new PutObjectRequest("bucket", "key", "location").withRequesterPays(false);
92103
}
104+
105+
void putObjectRequest_setMetadata() {
106+
ObjectMetadata metadata = new ObjectMetadata();
107+
metadata.setContentLength(66);
108+
metadata.setContentType("text/plain");
109+
metadata.setContentEncoding("UTF-8");
110+
111+
PutObjectRequest request = new PutObjectRequest("bucket", "key", "location");
112+
request.setMetadata(metadata);
113+
}
114+
115+
void putObjectRequest_withMetadata() {
116+
ObjectMetadata metadata = new ObjectMetadata();
117+
long contentLen = 66;
118+
metadata.setContentLength(contentLen);
119+
metadata.setContentType("text/plain");
120+
metadata.setContentEncoding("UTF-8");
121+
metadata.setContentLanguage("en-US");
122+
metadata.setCacheControl("must-revalidate");
123+
metadata.setContentDisposition("inline");
124+
metadata.setContentMD5("md5Val");
125+
metadata.setSSEAlgorithm("sseAlgorithmVal");
126+
metadata.setServerSideEncryption("sseEncryptionVal");
127+
metadata.setSSECustomerKeyMd5("sseCustomerKeyMd5Val");
128+
metadata.setBucketKeyEnabled(true);
129+
130+
Map<String, String> userMetadata = new HashMap<>();
131+
userMetadata.put("key", "value");
132+
metadata.setUserMetadata(userMetadata);
133+
134+
PutObjectRequest request = new PutObjectRequest("bucket", "key", "location").withMetadata(metadata);
135+
}
93136
}

0 commit comments

Comments
 (0)