Skip to content

Commit 884f46c

Browse files
authored
Fix v1 S3 getUserMetaDataOf transform (#6831)
1 parent a5cdcb8 commit 884f46c

File tree

6 files changed

+31
-0
lines changed

6 files changed

+31
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "AWS SDK for Java v2 Migration Tool",
4+
"contributor": "",
5+
"description": "Fix bug for v1 getUserMetaDataOf transform"
6+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ void getObject(String bucket, String key, File file) throws Exception {
5050

5151
String etag = /*AWS SDK for Java v2 migration: NOTE: V2's eTag() preserves surrounding quotes in the response, whereas V1's getETag() strips them - https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/migration-s3-client.html#V1s-ObjectMetadata-using-V1s-getETag*/
5252
objectMetadata.eTag().replaceAll("^\"|\"$", "");
53+
54+
String value = s3Object.response().metadata().get("key");
5355
}
5456

5557
void putObject_bucketKeyContent(String bucket, String key, String content) {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ void getObject(String bucket, String key, File file) throws Exception {
4545
ObjectMetadata objectMetadata = s3.getObject(new GetObjectRequest(bucket, key), file);
4646

4747
String etag = objectMetadata.getETag();
48+
49+
String value = s3Object.getObjectMetadata().getUserMetaDataOf("key");
4850
}
4951

5052
void putObject_bucketKeyContent(String bucket, String key, String content) {

v2-migration/src/main/java/software/amazon/awssdk/v2migration/S3PutObjectRequestToV2.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,9 @@ private Expression retrieveContentLengthForMetadataIfSet(String metadataName) {
420420
}
421421

422422
private J.MethodInvocation saveMetadataValueAndRemoveStatement(J.MethodInvocation method) {
423+
if (!(method.getSelect() instanceof J.Identifier)) {
424+
return method;
425+
}
423426
J.Identifier metadataPojo = (J.Identifier) method.getSelect();
424427
String variableName = metadataPojo.getSimpleName();
425428

v2-migration/src/main/java/software/amazon/awssdk/v2migration/V1GetterToV2.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.changeBucketNameToBucket;
1919
import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.isS3ETagGetter;
20+
import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.isS3UserMetaDataOfGetter;
2021
import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.transformETagGetter;
22+
import static software.amazon.awssdk.v2migration.internal.utils.S3TransformUtils.transformUserMetaDataOfGetter;
2123
import static software.amazon.awssdk.v2migration.internal.utils.SdkTypeUtils.isV2ModelClass;
2224

2325
import org.openrewrite.ExecutionContext;
@@ -69,6 +71,10 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, Execu
6971
return transformETagGetter(getCursor(), method);
7072
}
7173

74+
if (isS3UserMetaDataOfGetter(methodName, fullyQualified)) {
75+
return transformUserMetaDataOfGetter(getCursor(), method);
76+
}
77+
7278
methodName = changeBucketNameToBucket(methodName);
7379

7480
if (NamingUtils.isGetter(methodName)) {

v2-migration/src/main/java/software/amazon/awssdk/v2migration/internal/utils/S3TransformUtils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,18 @@ public static J.MethodInvocation transformETagGetter(Cursor cursor, J.MethodInvo
315315
.withComments(createCommentsWithNewline(comment));
316316
}
317317

318+
public static boolean isS3UserMetaDataOfGetter(String methodName, JavaType.FullyQualified declaringType) {
319+
return "getUserMetaDataOf".equals(methodName)
320+
&& declaringType.getFullyQualifiedName().startsWith(V2_S3_MODEL_PKG);
321+
}
322+
323+
public static J.MethodInvocation transformUserMetaDataOfGetter(Cursor cursor, J.MethodInvocation method) {
324+
String template = "#{any()}.metadata().get(#{any()})";
325+
return JavaTemplate.builder(template).build()
326+
.apply(cursor, method.getCoordinates().replace(),
327+
method.getSelect(), method.getArguments().get(0));
328+
}
329+
318330
public static List<Comment> inputStreamBufferingWarningComment() {
319331
String warning = "When using InputStream to upload with S3Client, Content-Length should be specified and used "
320332
+ "with RequestBody.fromInputStream(). Otherwise, the entire stream will be buffered in memory. If"

0 commit comments

Comments
 (0)