Skip to content

Commit 8a17bf9

Browse files
authored
Merge pull request #62 from EMCECS/task-SDK-567-enhance-getobjectmetadata-to-retrieve-object-lock-info
SDK-567: Enhance getObjectMetadata to retrieve Object Lock info.
2 parents e4dc3a9 + 44f613a commit 8a17bf9

File tree

5 files changed

+76
-119
lines changed

5 files changed

+76
-119
lines changed

src/main/java/com/emc/object/s3/S3ObjectMetadata.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@
2626
*/
2727
package com.emc.object.s3;
2828

29+
import com.emc.object.s3.bean.ObjectLockLegalHold;
30+
import com.emc.object.s3.bean.ObjectLockRetention;
31+
import com.emc.object.s3.bean.ObjectLockRetentionMode;
2932
import com.emc.object.util.RestUtil;
3033

34+
import java.time.ZonedDateTime;
3135
import java.util.*;
3236

3337
public class S3ObjectMetadata {
@@ -48,6 +52,8 @@ public class S3ObjectMetadata {
4852
private Date httpExpires;
4953
private Date lastModified;
5054
private String versionId;
55+
private ObjectLockLegalHold objectLockLegalHold;
56+
private ObjectLockRetention objectLockRetention;
5157
private Map<String, String> userMetadata = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
5258

5359
public static <T> S3ObjectMetadata fromHeaders(Map<String, List<T>> headers) {
@@ -77,6 +83,8 @@ public static <T> S3ObjectMetadata fromHeaders(Map<String, List<T>> headers) {
7783
objectMetadata.expirationDate = getExpirationDate(headers);
7884
objectMetadata.expirationRuleId = getExpirationRuleId(headers);
7985
objectMetadata.userMetadata = getUserMetadata(headers);
86+
objectMetadata.objectLockLegalHold = getObjectLockLegalHold(headers);
87+
objectMetadata.objectLockRetention = getObjectLockRetention(headers);
8088
return objectMetadata;
8189
}
8290

@@ -124,6 +132,24 @@ protected static String getUserMetadataKey(String headerName) {
124132
return null;
125133
}
126134

135+
protected static <T> ObjectLockLegalHold getObjectLockLegalHold(Map<String, List<T>> headers) {
136+
String objectLockLegalHold = RestUtil.getFirstAsString(headers, S3Constants.AMZ_OBJECT_LOCK_LEGAL_HOLD);
137+
if (objectLockLegalHold != null) {
138+
return new ObjectLockLegalHold().withStatus(ObjectLockLegalHold.Status.valueOf(objectLockLegalHold));
139+
}
140+
return null;
141+
}
142+
143+
protected static <T> ObjectLockRetention getObjectLockRetention(Map<String, List<T>> headers) {
144+
String objectLockRetentionMode = RestUtil.getFirstAsString(headers, S3Constants.AMZ_OBJECT_LOCK_MODE);
145+
String retainUntilDate = RestUtil.getFirstAsString(headers, S3Constants.AMZ_OBJECT_LOCK_RETAIN_UNTIL_DATE);
146+
if (objectLockRetentionMode != null && retainUntilDate != null) {
147+
return new ObjectLockRetention().withMode(ObjectLockRetentionMode.valueOf(objectLockRetentionMode))
148+
.withRetainUntilDate(Date.from(ZonedDateTime.parse(retainUntilDate, RestUtil.iso8601MillisecondFormatter).toInstant()));
149+
}
150+
return null;
151+
}
152+
127153
public Map<String, List<Object>> toHeaders() {
128154
Map<String, List<Object>> headers = new HashMap<String, List<Object>>();
129155
RestUtil.putSingle(headers, RestUtil.HEADER_CACHE_CONTROL, cacheControl);
@@ -134,6 +160,15 @@ public Map<String, List<Object>> toHeaders() {
134160
RestUtil.putSingle(headers, RestUtil.HEADER_EXPIRES, RestUtil.headerFormat(httpExpires));
135161
RestUtil.putSingle(headers, RestUtil.EMC_RETENTION_PERIOD, retentionPeriod);
136162
RestUtil.putSingle(headers, RestUtil.EMC_RETENTION_POLICY, retentionPolicy);
163+
if (objectLockLegalHold != null)
164+
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_LEGAL_HOLD, objectLockLegalHold.getStatus());
165+
//Object Lock Mode and RetainUntilDate must both be supplied
166+
if (objectLockRetention != null && objectLockRetention.getMode() != null && objectLockRetention.getRetainUntilDate() != null) {
167+
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_MODE, objectLockRetention.getMode());
168+
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_RETAIN_UNTIL_DATE,
169+
RestUtil.iso8601MillisecondFormatter.format(objectLockRetention.getRetainUntilDate().toInstant()));
170+
}
171+
137172
headers.putAll(getUmdHeaders(userMetadata));
138173
return headers;
139174
}
@@ -285,6 +320,22 @@ public String getDecodedUserMetadata(String name) {
285320
return RestUtil.urlDecode(getUserMetadata(name));
286321
}
287322

323+
public ObjectLockLegalHold getObjectLockLegalHold() {
324+
return objectLockLegalHold;
325+
}
326+
327+
public void setObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
328+
this.objectLockLegalHold = objectLockLegalHold;
329+
}
330+
331+
public ObjectLockRetention getObjectLockRetention() {
332+
return objectLockRetention;
333+
}
334+
335+
public void setObjectLockRetention(ObjectLockRetention objectLockRetention) {
336+
this.objectLockRetention = objectLockRetention;
337+
}
338+
288339
public S3ObjectMetadata addUserMetadata(String name, String value) {
289340
userMetadata.put(name, value);
290341
return this;
@@ -343,4 +394,14 @@ public S3ObjectMetadata withRetentionPolicy(String retentionPolicy) {
343394
setRetentionPolicy(retentionPolicy);
344395
return this;
345396
}
397+
398+
public S3ObjectMetadata withObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
399+
setObjectLockLegalHold(objectLockLegalHold);
400+
return this;
401+
}
402+
403+
public S3ObjectMetadata withObjectLockRetention(ObjectLockRetention objectLockRetention) {
404+
setObjectLockRetention(objectLockRetention);
405+
return this;
406+
}
346407
}

src/main/java/com/emc/object/s3/request/CopyObjectRequest.java

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import com.emc.object.s3.S3ObjectMetadata;
3232
import com.emc.object.s3.bean.AccessControlList;
3333
import com.emc.object.s3.bean.CannedAcl;
34-
import com.emc.object.s3.bean.ObjectLockLegalHold;
35-
import com.emc.object.s3.bean.ObjectLockRetention;
3634
import com.emc.object.util.RestUtil;
3735

3836
import java.util.Date;
@@ -55,8 +53,6 @@ public class CopyObjectRequest extends S3ObjectRequest {
5553
private S3ObjectMetadata objectMetadata;
5654
private AccessControlList acl;
5755
private CannedAcl cannedAcl;
58-
private ObjectLockLegalHold objectLockLegalHold;
59-
private ObjectLockRetention objectLockRetention;
6056

6157
public CopyObjectRequest(String sourceBucketName, String sourceKey, String bucketName, String key) {
6258
super(Method.PUT, bucketName, key, null);
@@ -87,14 +83,6 @@ public Map<String, List<Object>> getHeaders() {
8783
}
8884
if (acl != null) headers.putAll(acl.toHeaders());
8985
if (cannedAcl != null) RestUtil.putSingle(headers, S3Constants.AMZ_ACL, cannedAcl.getHeaderValue());
90-
if (objectLockLegalHold != null) RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_LEGAL_HOLD, objectLockLegalHold.getStatus());
91-
if (objectLockRetention != null) {
92-
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_MODE, objectLockRetention.getMode());
93-
if (objectLockRetention.getRetainUntilDate() != null) {
94-
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_RETAIN_UNTIL_DATE,
95-
RestUtil.iso8601MillisecondFormatter.format(objectLockRetention.getRetainUntilDate().toInstant()));
96-
}
97-
}
9886
return headers;
9987
}
10088

@@ -186,22 +174,6 @@ public void setCannedAcl(CannedAcl cannedAcl) {
186174
this.cannedAcl = cannedAcl;
187175
}
188176

189-
public ObjectLockLegalHold getObjectLockLegalHold() {
190-
return objectLockLegalHold;
191-
}
192-
193-
public void setObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
194-
this.objectLockLegalHold = objectLockLegalHold;
195-
}
196-
197-
public ObjectLockRetention getObjectLockRetention() {
198-
return objectLockRetention;
199-
}
200-
201-
public void setObjectLockRetention(ObjectLockRetention objectLockRetention) {
202-
this.objectLockRetention = objectLockRetention;
203-
}
204-
205177
public CopyObjectRequest withSourceVersionId(String sourceVersionId) {
206178
setSourceVersionId(sourceVersionId);
207179
return this;
@@ -241,13 +213,4 @@ public CopyObjectRequest withCannedAcl(CannedAcl cannedAcl) {
241213
setCannedAcl(cannedAcl);
242214
return this;
243215
}
244-
245-
public CopyObjectRequest withObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
246-
setObjectLockLegalHold(objectLockLegalHold);
247-
return this;
248-
}
249-
public CopyObjectRequest withObjectLockRetention(ObjectLockRetention objectLockRetention) {
250-
setObjectLockRetention(objectLockRetention);
251-
return this;
252-
}
253216
}

src/main/java/com/emc/object/s3/request/InitiateMultipartUploadRequest.java

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import com.emc.object.s3.S3ObjectMetadata;
3232
import com.emc.object.s3.bean.AccessControlList;
3333
import com.emc.object.s3.bean.CannedAcl;
34-
import com.emc.object.s3.bean.ObjectLockLegalHold;
35-
import com.emc.object.s3.bean.ObjectLockRetention;
3634
import com.emc.object.util.RestUtil;
3735

3836
import java.util.List;
@@ -42,8 +40,6 @@ public class InitiateMultipartUploadRequest extends S3ObjectRequest {
4240
private S3ObjectMetadata objectMetadata;
4341
private AccessControlList acl;
4442
private CannedAcl cannedAcl;
45-
private ObjectLockLegalHold objectLockLegalHold;
46-
private ObjectLockRetention objectLockRetention;
4743

4844
public InitiateMultipartUploadRequest(String bucketName, String key) {
4945
super(Method.POST, bucketName, key, "uploads");
@@ -55,14 +51,6 @@ public Map<String, List<Object>> getHeaders() {
5551
if (objectMetadata != null) headers.putAll(objectMetadata.toHeaders());
5652
if (acl != null) headers.putAll(acl.toHeaders());
5753
if (cannedAcl != null) RestUtil.putSingle(headers, S3Constants.AMZ_ACL, cannedAcl.getHeaderValue());
58-
if (objectLockLegalHold != null) RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_LEGAL_HOLD, objectLockLegalHold.getStatus());
59-
if (objectLockRetention != null) {
60-
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_MODE, objectLockRetention.getMode());
61-
if (objectLockRetention.getRetainUntilDate() != null) {
62-
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_RETAIN_UNTIL_DATE,
63-
RestUtil.iso8601MillisecondFormatter.format(objectLockRetention.getRetainUntilDate().toInstant()));
64-
}
65-
}
6654
return headers;
6755
}
6856

@@ -90,22 +78,6 @@ public void setCannedAcl(CannedAcl cannedAcl) {
9078
this.cannedAcl = cannedAcl;
9179
}
9280

93-
public ObjectLockLegalHold getObjectLockLegalHold() {
94-
return objectLockLegalHold;
95-
}
96-
97-
public void setObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
98-
this.objectLockLegalHold = objectLockLegalHold;
99-
}
100-
101-
public ObjectLockRetention getObjectLockRetention() {
102-
return objectLockRetention;
103-
}
104-
105-
public void setObjectLockRetention(ObjectLockRetention objectLockRetention) {
106-
this.objectLockRetention = objectLockRetention;
107-
}
108-
10981
public InitiateMultipartUploadRequest withObjectMetadata(S3ObjectMetadata objectMetadata) {
11082
setObjectMetadata(objectMetadata);
11183
return this;
@@ -120,13 +92,4 @@ public InitiateMultipartUploadRequest withCannedAcl(CannedAcl cannedAcl) {
12092
setCannedAcl(cannedAcl);
12193
return this;
12294
}
123-
124-
public InitiateMultipartUploadRequest withObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
125-
setObjectLockLegalHold(objectLockLegalHold);
126-
return this;
127-
}
128-
public InitiateMultipartUploadRequest withObjectLockRetention(ObjectLockRetention objectLockRetention) {
129-
setObjectLockRetention(objectLockRetention);
130-
return this;
131-
}
13295
}

src/main/java/com/emc/object/s3/request/PutObjectRequest.java

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333
import com.emc.object.s3.S3ObjectMetadata;
3434
import com.emc.object.s3.bean.AccessControlList;
3535
import com.emc.object.s3.bean.CannedAcl;
36-
import com.emc.object.s3.bean.ObjectLockLegalHold;
37-
import com.emc.object.s3.bean.ObjectLockRetention;
3836
import com.emc.object.util.RestUtil;
3937

4038
import java.util.Date;
@@ -51,8 +49,6 @@ public class PutObjectRequest extends S3ObjectRequest implements EntityRequest {
5149
private String ifNoneMatch;
5250
private AccessControlList acl;
5351
private CannedAcl cannedAcl;
54-
private ObjectLockLegalHold objectLockLegalHold;
55-
private ObjectLockRetention objectLockRetention;
5652

5753
public PutObjectRequest(String bucketName, String key, Object object) {
5854
super(Method.PUT, bucketName, key, null);
@@ -66,8 +62,6 @@ public PutObjectRequest(PutObjectRequest other) {
6662
this.range = other.range;
6763
this.acl = other.acl;
6864
this.cannedAcl = other.cannedAcl;
69-
this.objectLockLegalHold = other.objectLockLegalHold;
70-
this.objectLockRetention = other.objectLockRetention;
7165
}
7266

7367
@Override
@@ -83,14 +77,6 @@ public Map<String, List<Object>> getHeaders() {
8377
if (ifNoneMatch != null) RestUtil.putSingle(headers, RestUtil.HEADER_IF_NONE_MATCH, ifNoneMatch);
8478
if (acl != null) headers.putAll(acl.toHeaders());
8579
if (cannedAcl != null) RestUtil.putSingle(headers, S3Constants.AMZ_ACL, cannedAcl.getHeaderValue());
86-
if (objectLockLegalHold != null) RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_LEGAL_HOLD, objectLockLegalHold.getStatus());
87-
if (objectLockRetention != null) {
88-
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_MODE, objectLockRetention.getMode());
89-
if (objectLockRetention.getRetainUntilDate() != null) {
90-
RestUtil.putSingle(headers, S3Constants.AMZ_OBJECT_LOCK_RETAIN_UNTIL_DATE,
91-
RestUtil.iso8601MillisecondFormatter.format(objectLockRetention.getRetainUntilDate().toInstant()));
92-
}
93-
}
9480
return headers;
9581
}
9682

@@ -231,22 +217,6 @@ public PutObjectRequest withObjectMetadata(S3ObjectMetadata objectMetadata) {
231217
return this;
232218
}
233219

234-
public ObjectLockLegalHold getObjectLockLegalHold() {
235-
return objectLockLegalHold;
236-
}
237-
238-
public void setObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
239-
this.objectLockLegalHold = objectLockLegalHold;
240-
}
241-
242-
public ObjectLockRetention getObjectLockRetention() {
243-
return objectLockRetention;
244-
}
245-
246-
public void setObjectLockRetention(ObjectLockRetention objectLockRetention) {
247-
this.objectLockRetention = objectLockRetention;
248-
}
249-
250220
public PutObjectRequest withRange(Range range) {
251221
setRange(range);
252222
return this;
@@ -305,13 +275,4 @@ public PutObjectRequest withRetentionPolicy(String retentionPolicy) {
305275
setRetentionPolicy(retentionPolicy);
306276
return this;
307277
}
308-
309-
public PutObjectRequest withObjectLockLegalHold(ObjectLockLegalHold objectLockLegalHold) {
310-
setObjectLockLegalHold(objectLockLegalHold);
311-
return this;
312-
}
313-
public PutObjectRequest withObjectLockRetention(ObjectLockRetention objectLockRetention) {
314-
setObjectLockRetention(objectLockRetention);
315-
return this;
316-
}
317278
}

0 commit comments

Comments
 (0)