Skip to content

Commit 33f225c

Browse files
author
Dhriti Chopra
committed
feat: adding user-project to MultipartUpload APIs
1 parent 37ef7f3 commit 33f225c

5 files changed

Lines changed: 153 additions & 8 deletions

File tree

google-cloud-storage/src/main/java/com/google/cloud/storage/MultipartUploadHttpRequestManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ ListPartsResponse sendListPartsRequest(ListPartsRequest request) throws IOExcept
113113
false);
114114
HttpRequest httpRequest = requestFactory.buildGetRequest(new GenericUrl(listUri));
115115
httpRequest.getHeaders().putAll(headerProvider.getHeaders());
116+
if (request.userProject() != null) {
117+
httpRequest.getHeaders().put("x-goog-user-project", request.userProject());
118+
}
116119
httpRequest.setParser(objectParser);
117120
httpRequest.setThrowExceptionOnExecuteError(true);
118121
return httpRequest.execute().parseAs(ListPartsResponse.class);
@@ -149,6 +152,9 @@ ListMultipartUploadsResponse sendListMultipartUploadsRequest(ListMultipartUpload
149152
false);
150153
HttpRequest httpRequest = requestFactory.buildGetRequest(new GenericUrl(listUri));
151154
httpRequest.getHeaders().putAll(headerProvider.getHeaders());
155+
if (request.userProject() != null) {
156+
httpRequest.getHeaders().put("x-goog-user-project", request.userProject());
157+
}
152158
httpRequest.setParser(objectParser);
153159
httpRequest.setThrowExceptionOnExecuteError(true);
154160
return httpRequest.execute().parseAs(ListMultipartUploadsResponse.class);
@@ -167,6 +173,9 @@ AbortMultipartUploadResponse sendAbortMultipartUploadRequest(AbortMultipartUploa
167173

168174
HttpRequest httpRequest = requestFactory.buildDeleteRequest(new GenericUrl(abortUri));
169175
httpRequest.getHeaders().putAll(headerProvider.getHeaders());
176+
if (request.userProject() != null) {
177+
httpRequest.getHeaders().put("x-goog-user-project", request.userProject());
178+
}
170179
httpRequest.setParser(objectParser);
171180
httpRequest.setThrowExceptionOnExecuteError(true);
172181
return httpRequest.execute().parseAs(AbortMultipartUploadResponse.class);
@@ -213,6 +222,9 @@ UploadPartResponse sendUploadPartRequest(
213222
HttpRequest httpRequest =
214223
requestFactory.buildPutRequest(new GenericUrl(uploadUri), rewindableContent);
215224
httpRequest.getHeaders().putAll(headerProvider.getHeaders());
225+
if (request.userProject() != null) {
226+
httpRequest.getHeaders().put("x-goog-user-project", request.userProject());
227+
}
216228
if (request.getCrc32c() != null) {
217229
addChecksumHeader(request.getCrc32c(), httpRequest.getHeaders());
218230
} else {

google-cloud-storage/src/main/java/com/google/cloud/storage/multipartupload/model/AbortMultipartUploadRequest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ public final class AbortMultipartUploadRequest {
2828
private final String bucket;
2929
private final String key;
3030
private final String uploadId;
31+
private final String userProject;
3132

3233
private AbortMultipartUploadRequest(Builder builder) {
3334
this.bucket = builder.bucket;
3435
this.key = builder.key;
3536
this.uploadId = builder.uploadId;
37+
this.userProject = builder.userProject;
3638
}
3739

3840
/**
@@ -68,6 +70,20 @@ public String uploadId() {
6870
return uploadId;
6971
}
7072

73+
/**
74+
* Returns the user-project.
75+
*
76+
* @return the user-project.
77+
* @see <a
78+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
79+
* @since 2.61 This new api is in preview and is subject to breaking changes.
80+
*/
81+
@BetaApi
82+
public String userProject() {
83+
return userProject;
84+
}
85+
86+
7187
/**
7288
* Returns a new builder for creating {@link AbortMultipartUploadRequest} instances.
7389
*
@@ -89,6 +105,7 @@ public static class Builder {
89105
private String bucket;
90106
private String key;
91107
private String uploadId;
108+
private String userProject;
92109

93110
private Builder() {}
94111

@@ -131,6 +148,21 @@ public Builder uploadId(String uploadId) {
131148
return this;
132149
}
133150

151+
/**
152+
* Sets the user-project.
153+
*
154+
* @param userProject The user-project.
155+
* @return This builder.
156+
* @see <a
157+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
158+
* @since 2.61 This new api is in preview and is subject to breaking changes.
159+
*/
160+
@BetaApi
161+
public Builder userProject(String userProject) {
162+
this.userProject = userProject;
163+
return this;
164+
}
165+
134166
/**
135167
* Builds a new {@link AbortMultipartUploadRequest} instance.
136168
*

google-cloud-storage/src/main/java/com/google/cloud/storage/multipartupload/model/ListMultipartUploadsRequest.java

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public final class ListMultipartUploadsRequest {
3737
private final Integer maxUploads;
3838
private final String prefix;
3939
private final String uploadIdMarker;
40+
private final String userProject;
4041

4142
private ListMultipartUploadsRequest(
4243
String bucket,
@@ -45,14 +46,16 @@ private ListMultipartUploadsRequest(
4546
String keyMarker,
4647
Integer maxUploads,
4748
String prefix,
48-
String uploadIdMarker) {
49+
String uploadIdMarker,
50+
String userProject) {
4951
this.bucket = bucket;
5052
this.delimiter = delimiter;
5153
this.encodingType = encodingType;
5254
this.keyMarker = keyMarker;
5355
this.maxUploads = maxUploads;
5456
this.prefix = prefix;
5557
this.uploadIdMarker = uploadIdMarker;
58+
this.userProject = userProject;
5659
}
5760

5861
/**
@@ -134,6 +137,19 @@ public String uploadIdMarker() {
134137
return uploadIdMarker;
135138
}
136139

140+
/**
141+
* Returns the user-project.
142+
*
143+
* @return the user-project.
144+
* @see <a
145+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
146+
* @since 2.61 This new api is in preview and is subject to breaking changes.
147+
*/
148+
@BetaApi
149+
public String userProject() {
150+
return userProject;
151+
}
152+
137153
@Override
138154
public boolean equals(Object o) {
139155
if (this == o) {
@@ -149,13 +165,14 @@ public boolean equals(Object o) {
149165
&& Objects.equals(keyMarker, that.keyMarker)
150166
&& Objects.equals(maxUploads, that.maxUploads)
151167
&& Objects.equals(prefix, that.prefix)
152-
&& Objects.equals(uploadIdMarker, that.uploadIdMarker);
168+
&& Objects.equals(uploadIdMarker, that.uploadIdMarker)
169+
&& Objects.equals(userProject, that.userProject);
153170
}
154171

155172
@Override
156173
public int hashCode() {
157174
return Objects.hash(
158-
bucket, delimiter, encodingType, keyMarker, maxUploads, prefix, uploadIdMarker);
175+
bucket, delimiter, encodingType, keyMarker, maxUploads, prefix, uploadIdMarker, userProject);
159176
}
160177

161178
@Override
@@ -168,6 +185,7 @@ public String toString() {
168185
.add("maxUploads", maxUploads)
169186
.add("prefix", prefix)
170187
.add("uploadIdMarker", uploadIdMarker)
188+
.add("userProject", userProject)
171189
.toString();
172190
}
173191

@@ -196,6 +214,7 @@ public static final class Builder {
196214
private Integer maxUploads;
197215
private String prefix;
198216
private String uploadIdMarker;
217+
private String userProject;
199218

200219
private Builder() {}
201220

@@ -290,6 +309,21 @@ public Builder uploadIdMarker(String uploadIdMarker) {
290309
return this;
291310
}
292311

312+
/**
313+
* Sets the user-project.
314+
*
315+
* @param userProject The user-project.
316+
* @return This builder.
317+
* @see <a
318+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
319+
* @since 2.61 This new api is in preview and is subject to breaking changes.
320+
*/
321+
@BetaApi
322+
public Builder userProject(String userProject) {
323+
this.userProject = userProject;
324+
return this;
325+
}
326+
293327
/**
294328
* Builds the request.
295329
*
@@ -299,7 +333,7 @@ public Builder uploadIdMarker(String uploadIdMarker) {
299333
@BetaApi
300334
public ListMultipartUploadsRequest build() {
301335
return new ListMultipartUploadsRequest(
302-
bucket, delimiter, encodingType, keyMarker, maxUploads, prefix, uploadIdMarker);
336+
bucket, delimiter, encodingType, keyMarker, maxUploads, prefix, uploadIdMarker, userProject);
303337
}
304338
}
305339
}

google-cloud-storage/src/main/java/com/google/cloud/storage/multipartupload/model/ListPartsRequest.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,15 @@ public final class ListPartsRequest {
3737

3838
private final Integer partNumberMarker;
3939

40+
private final String userProject;
41+
4042
private ListPartsRequest(Builder builder) {
4143
this.bucket = builder.bucket;
4244
this.key = builder.key;
4345
this.uploadId = builder.uploadId;
4446
this.maxParts = builder.maxParts;
4547
this.partNumberMarker = builder.partNumberMarker;
48+
this.userProject = builder.userProject;
4649
}
4750

4851
/**
@@ -100,6 +103,19 @@ public Integer partNumberMarker() {
100103
return partNumberMarker;
101104
}
102105

106+
/**
107+
* Returns the user-project.
108+
*
109+
* @return the user-project.
110+
* @see <a
111+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
112+
* @since 2.61 This new api is in preview and is subject to breaking changes.
113+
*/
114+
@BetaApi
115+
public String userProject() {
116+
return userProject;
117+
}
118+
103119
@Override
104120
public boolean equals(Object o) {
105121
if (this == o) {
@@ -113,12 +129,13 @@ public boolean equals(Object o) {
113129
&& Objects.equals(key, that.key)
114130
&& Objects.equals(uploadId, that.uploadId)
115131
&& Objects.equals(maxParts, that.maxParts)
116-
&& Objects.equals(partNumberMarker, that.partNumberMarker);
132+
&& Objects.equals(partNumberMarker, that.partNumberMarker)
133+
&& Objects.equals(userProject, that.userProject);
117134
}
118135

119136
@Override
120137
public int hashCode() {
121-
return Objects.hash(bucket, key, uploadId, maxParts, partNumberMarker);
138+
return Objects.hash(bucket, key, uploadId, maxParts, partNumberMarker, userProject);
122139
}
123140

124141
@Override
@@ -129,6 +146,7 @@ public String toString() {
129146
.add("uploadId", uploadId)
130147
.add("maxParts", maxParts)
131148
.add("partNumberMarker", partNumberMarker)
149+
.add("userProject", userProject)
132150
.toString();
133151
}
134152

@@ -155,6 +173,7 @@ public static class Builder {
155173
private String uploadId;
156174
private Integer maxParts;
157175
private Integer partNumberMarker;
176+
private String userProject;
158177

159178
private Builder() {}
160179

@@ -223,6 +242,21 @@ public Builder partNumberMarker(Integer partNumberMarker) {
223242
return this;
224243
}
225244

245+
/**
246+
* Sets the user-project.
247+
*
248+
* @param userProject The user-project.
249+
* @return This builder.
250+
* @see <a
251+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
252+
* @since 2.61 This new api is in preview and is subject to breaking changes.
253+
*/
254+
@BetaApi
255+
public Builder userProject(String userProject) {
256+
this.userProject = userProject;
257+
return this;
258+
}
259+
226260
/**
227261
* Builds a new {@link ListPartsRequest} object.
228262
*

google-cloud-storage/src/main/java/com/google/cloud/storage/multipartupload/model/UploadPartRequest.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,15 @@ public final class UploadPartRequest {
3535
private final int partNumber;
3636
private final String uploadId;
3737
@Nullable private final String crc32c;
38+
private final String userProject;
3839

3940
private UploadPartRequest(Builder builder) {
4041
this.bucket = builder.bucket;
4142
this.key = builder.key;
4243
this.partNumber = builder.partNumber;
4344
this.uploadId = builder.uploadId;
4445
this.crc32c = builder.crc32c;
46+
this.userProject = builder.userProject;
4547
}
4648

4749
/**
@@ -100,6 +102,19 @@ public String getCrc32c() {
100102
return crc32c;
101103
}
102104

105+
/**
106+
* Returns the user-project.
107+
*
108+
* @return the user-project.
109+
* @see <a
110+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
111+
* @since 2.61 This new api is in preview and is subject to breaking changes.
112+
*/
113+
@BetaApi
114+
public String userProject() {
115+
return userProject;
116+
}
117+
103118
@Override
104119
public boolean equals(Object o) {
105120
if (this == o) {
@@ -113,12 +128,13 @@ public boolean equals(Object o) {
113128
&& Objects.equals(bucket, that.bucket)
114129
&& Objects.equals(key, that.key)
115130
&& Objects.equals(uploadId, that.uploadId)
116-
&& Objects.equals(crc32c, that.crc32c);
131+
&& Objects.equals(crc32c, that.crc32c)
132+
&& Objects.equals(userProject, that.userProject);
117133
}
118134

119135
@Override
120136
public int hashCode() {
121-
return Objects.hash(bucket, key, partNumber, uploadId, crc32c);
137+
return Objects.hash(bucket, key, partNumber, uploadId, crc32c, userProject);
122138
}
123139

124140
@Override
@@ -129,6 +145,7 @@ public String toString() {
129145
.add("partNumber", partNumber)
130146
.add("uploadId", uploadId)
131147
.add("crc32c", crc32c)
148+
.add("userProject", userProject)
132149
.toString();
133150
}
134151

@@ -155,6 +172,7 @@ public static class Builder {
155172
private int partNumber;
156173
private String uploadId;
157174
@Nullable private String crc32c;
175+
private String userProject;
158176

159177
private Builder() {}
160178

@@ -223,6 +241,21 @@ public Builder crc32c(@Nullable String crc32c) {
223241
return this;
224242
}
225243

244+
/**
245+
* Sets the user-project.
246+
*
247+
* @param userProject The user-project.
248+
* @return This builder.
249+
* @see <a
250+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
251+
* @since 2.61 This new api is in preview and is subject to breaking changes.
252+
*/
253+
@BetaApi
254+
public Builder userProject(String userProject) {
255+
this.userProject = userProject;
256+
return this;
257+
}
258+
226259
/**
227260
* Builds the {@link UploadPartRequest}.
228261
*

0 commit comments

Comments
 (0)