1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.s3.options;
20
21 import static com.google.common.base.Preconditions.checkNotNull;
22 import static com.google.common.base.Preconditions.checkState;
23 import static org.jclouds.aws.reference.AWSConstants.PROPERTY_HEADER_TAG;
24 import static org.jclouds.s3.reference.S3Headers.CANNED_ACL;
25 import static org.jclouds.s3.reference.S3Headers.DEFAULT_AMAZON_HEADERTAG;
26
27 import java.util.Map.Entry;
28
29 import javax.inject.Inject;
30 import javax.inject.Named;
31
32 import org.jclouds.http.options.BaseHttpRequestOptions;
33 import org.jclouds.s3.domain.CannedAccessPolicy;
34
35 import com.google.common.collect.ImmutableMultimap;
36 import com.google.common.collect.Multimap;
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public class PutObjectOptions extends BaseHttpRequestOptions {
62 public static final PutObjectOptions NONE = new PutObjectOptions();
63
64 private CannedAccessPolicy acl = CannedAccessPolicy.PRIVATE;
65
66 private String headerTag;
67
68 @Inject
69 public void setHeaderTag(@Named(PROPERTY_HEADER_TAG) String headerTag) {
70 this.headerTag = headerTag;
71 }
72
73 @Override
74 public Multimap<String, String> buildRequestHeaders() {
75 checkState(headerTag != null, "headerTag should have been injected!");
76 ImmutableMultimap.Builder<String, String> returnVal = ImmutableMultimap.<String, String> builder();
77 for (Entry<String, String> entry : headers.entries()) {
78 returnVal.put(entry.getKey().replace(DEFAULT_AMAZON_HEADERTAG, headerTag), entry.getValue());
79 }
80 return returnVal.build();
81 }
82
83
84
85
86
87
88 public PutObjectOptions withAcl(CannedAccessPolicy acl) {
89 this.acl = checkNotNull(acl, "acl");
90 if (!acl.equals(CannedAccessPolicy.PRIVATE))
91 this.replaceHeader(CANNED_ACL, acl.toString());
92 return this;
93 }
94
95
96
97
98 public CannedAccessPolicy getAcl() {
99 return acl;
100 }
101
102 public static class Builder {
103
104
105
106
107 public static PutObjectOptions withAcl(CannedAccessPolicy acl) {
108 PutObjectOptions options = new PutObjectOptions();
109 return options.withAcl(acl);
110 }
111 }
112 }