Skip to content

Commit fa539c0

Browse files
committed
feat: Added API for list all buckets.
1 parent 21fb8fe commit fa539c0

6 files changed

Lines changed: 1052 additions & 2 deletions

File tree

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.google.cloud.storage.multipartupload.model.CompleteMultipartUploadResponse;
2525
import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadRequest;
2626
import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadResponse;
27+
import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsRequest;
28+
import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsResponse;
2729
import com.google.cloud.storage.multipartupload.model.ListPartsRequest;
2830
import com.google.cloud.storage.multipartupload.model.ListPartsResponse;
2931
import com.google.cloud.storage.multipartupload.model.UploadPartRequest;
@@ -100,6 +102,17 @@ public abstract CompleteMultipartUploadResponse completeMultipartUpload(
100102
@BetaApi
101103
public abstract UploadPartResponse uploadPart(UploadPartRequest request, RequestBody requestBody);
102104

105+
/**
106+
* Lists all multipart uploads in a bucket.
107+
*
108+
* @param request The request object containing the details for listing the multipart uploads.
109+
* @return A {@link ListMultipartUploadsResponse} object containing the list of multipart uploads.
110+
* @since 2.60.0 This new api is in preview and is subject to breaking changes.
111+
*/
112+
@BetaApi
113+
public abstract ListMultipartUploadsResponse listMultipartUploads(
114+
ListMultipartUploadsRequest request);
115+
103116
/**
104117
* Creates a new instance of {@link MultipartUploadClient}.
105118
*
@@ -116,4 +129,4 @@ public static MultipartUploadClient create(MultipartUploadSettings config) {
116129
MultipartUploadHttpRequestManager.createFrom(options),
117130
options.getRetryAlgorithmManager());
118131
}
119-
}
132+
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.google.cloud.storage.multipartupload.model.CompleteMultipartUploadResponse;
2424
import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadRequest;
2525
import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadResponse;
26+
import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsRequest;
27+
import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsResponse;
2628
import com.google.cloud.storage.multipartupload.model.ListPartsRequest;
2729
import com.google.cloud.storage.multipartupload.model.ListPartsResponse;
2830
import com.google.cloud.storage.multipartupload.model.UploadPartRequest;
@@ -100,4 +102,12 @@ public UploadPartResponse uploadPart(UploadPartRequest request, RequestBody requ
100102
},
101103
Decoder.identity());
102104
}
105+
106+
@Override
107+
public ListMultipartUploadsResponse listMultipartUploads(ListMultipartUploadsRequest request) {
108+
return retrier.run(
109+
retryAlgorithmManager.idempotent(),
110+
() -> httpRequestManager.sendListMultipartUploadsRequest(uri, request),
111+
Decoder.identity());
112+
}
103113
}

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

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import com.google.cloud.storage.multipartupload.model.CompleteMultipartUploadResponse;
3737
import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadRequest;
3838
import com.google.cloud.storage.multipartupload.model.CreateMultipartUploadResponse;
39+
import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsRequest;
40+
import com.google.cloud.storage.multipartupload.model.ListMultipartUploadsResponse;
3941
import com.google.cloud.storage.multipartupload.model.ListPartsRequest;
4042
import com.google.cloud.storage.multipartupload.model.ListPartsResponse;
4143
import com.google.cloud.storage.multipartupload.model.UploadPartRequest;
@@ -111,6 +113,43 @@ ListPartsResponse sendListPartsRequest(URI uri, ListPartsRequest request) throws
111113
return httpRequest.execute().parseAs(ListPartsResponse.class);
112114
}
113115

116+
ListMultipartUploadsResponse sendListMultipartUploadsRequest(
117+
URI uri, ListMultipartUploadsRequest request) throws IOException {
118+
119+
ImmutableMap.Builder<String, Object> params =
120+
ImmutableMap.<String, Object>builder()
121+
.put("bucket", request.bucket());
122+
if(request.delimiter() != null){
123+
params.put("delimiter", request.delimiter());
124+
}
125+
if(request.encodingType() != null){
126+
params.put("encoding-type", request.encodingType());
127+
}
128+
if(request.keyMarker() != null){
129+
params.put("key-marker", request.keyMarker());
130+
}
131+
if(request.maxUploads() != null){
132+
params.put("max-uploads", request.maxUploads());
133+
}
134+
if(request.prefix() != null){
135+
params.put("prefix", request.prefix());
136+
}
137+
if(request.uploadIdMarker() != null){
138+
params.put("upload-id-marker", request.uploadIdMarker());
139+
}
140+
String listUri =
141+
UriTemplate.expand(
142+
uri.toString() + "{bucket}?uploads{delimiter,encoding-type,key-marker,max-uploads,prefix,upload-id-marker}",
143+
params,
144+
false);
145+
System.out.println(listUri);
146+
HttpRequest httpRequest = requestFactory.buildGetRequest(new GenericUrl(listUri));
147+
httpRequest.getHeaders().putAll(headerProvider.getHeaders());
148+
httpRequest.setParser(objectParser);
149+
httpRequest.setThrowExceptionOnExecuteError(true);
150+
return httpRequest.execute().parseAs(ListMultipartUploadsResponse.class);
151+
}
152+
114153
AbortMultipartUploadResponse sendAbortMultipartUploadRequest(
115154
URI uri, AbortMultipartUploadRequest request) throws IOException {
116155

@@ -248,7 +287,7 @@ private static String urlEncode(String value) {
248287
*/
249288
private static String formatName(String name) {
250289
// Only lowercase letters, digits, and "-" are allowed
251-
return name.toLowerCase().replaceAll("[^\\w\\d\\-]", "-");
290+
return name.toLowerCase().replaceAll("[^\\w-]", "-");
252291
}
253292

254293
private static String formatSemver(String version) {

0 commit comments

Comments
 (0)