Skip to content

Commit adb8d45

Browse files
authored
feat: adding user-project to MultipartUpload APIs.
2 parents 2ddb979 + 674e429 commit adb8d45

6 files changed

Lines changed: 320 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: 31 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,19 @@ 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+
7186
/**
7287
* Returns a new builder for creating {@link AbortMultipartUploadRequest} instances.
7388
*
@@ -89,6 +104,7 @@ public static class Builder {
89104
private String bucket;
90105
private String key;
91106
private String uploadId;
107+
private String userProject;
92108

93109
private Builder() {}
94110

@@ -131,6 +147,21 @@ public Builder uploadId(String uploadId) {
131147
return this;
132148
}
133149

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

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

Lines changed: 52 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,21 @@ 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,
176+
delimiter,
177+
encodingType,
178+
keyMarker,
179+
maxUploads,
180+
prefix,
181+
uploadIdMarker,
182+
userProject);
159183
}
160184

161185
@Override
@@ -168,6 +192,7 @@ public String toString() {
168192
.add("maxUploads", maxUploads)
169193
.add("prefix", prefix)
170194
.add("uploadIdMarker", uploadIdMarker)
195+
.add("userProject", userProject)
171196
.toString();
172197
}
173198

@@ -196,6 +221,7 @@ public static final class Builder {
196221
private Integer maxUploads;
197222
private String prefix;
198223
private String uploadIdMarker;
224+
private String userProject;
199225

200226
private Builder() {}
201227

@@ -290,6 +316,21 @@ public Builder uploadIdMarker(String uploadIdMarker) {
290316
return this;
291317
}
292318

319+
/**
320+
* Sets the user-project.
321+
*
322+
* @param userProject The user-project.
323+
* @return This builder.
324+
* @see <a
325+
* href="https://docs.cloud.google.com/storage/docs/xml-api/reference-headers#xgooguserproject">x-goog-user-project</a>
326+
* @since 2.61 This new api is in preview and is subject to breaking changes.
327+
*/
328+
@BetaApi
329+
public Builder userProject(String userProject) {
330+
this.userProject = userProject;
331+
return this;
332+
}
333+
293334
/**
294335
* Builds the request.
295336
*
@@ -299,7 +340,14 @@ public Builder uploadIdMarker(String uploadIdMarker) {
299340
@BetaApi
300341
public ListMultipartUploadsRequest build() {
301342
return new ListMultipartUploadsRequest(
302-
bucket, delimiter, encodingType, keyMarker, maxUploads, prefix, uploadIdMarker);
343+
bucket,
344+
delimiter,
345+
encodingType,
346+
keyMarker,
347+
maxUploads,
348+
prefix,
349+
uploadIdMarker,
350+
userProject);
303351
}
304352
}
305353
}

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
*

0 commit comments

Comments
 (0)