Skip to content

Commit

Permalink
Refactor messages by subclasses
Browse files Browse the repository at this point in the history
merge SelectObjectContentRequest
merge ListVersionsResult
Remove unused CompleteMultipartUploadOutput.java
merge ListMultipartUploadsResult
merge NotificationRecords
merge SseConfiguration
merge DeleteRequest, DeleteResult
merge RestoreRequest
merge NotificationConfiguration
merge LifecycleConfiguration
merge ReplicationConfiguration
merge Filter
merge ObjectLockConfiguration
merge ListAllMyBucketsResult
merge Item
merge ListObjectsResult
Move common fields for ListPartsResult and GetObjectAttributesOutput

Signed-off-by: Bala.FA <[email protected]>
  • Loading branch information
balamurugana committed Feb 13, 2025
1 parent 5e7e074 commit 3bd3ba0
Show file tree
Hide file tree
Showing 117 changed files with 2,762 additions and 4,474 deletions.
74 changes: 40 additions & 34 deletions api/src/main/java/io/minio/MinioAsyncClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@
import io.minio.http.HttpUtils;
import io.minio.http.Method;
import io.minio.messages.AccessControlPolicy;
import io.minio.messages.Bucket;
import io.minio.messages.CORSConfiguration;
import io.minio.messages.CopyObjectResult;
import io.minio.messages.CreateBucketConfiguration;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.DeleteRequest;
import io.minio.messages.DeleteResult;
import io.minio.messages.GetObjectAttributesOutput;
import io.minio.messages.Item;
import io.minio.messages.LegalHold;
Expand Down Expand Up @@ -1105,35 +1104,36 @@ public CompletableFuture<Void> removeObject(RemoveObjectArgs args)
* objects.add(new DeleteObject("my-objectname1"));
* objects.add(new DeleteObject("my-objectname2"));
* objects.add(new DeleteObject("my-objectname3"));
* Iterable<Result<DeleteError>> results =
* Iterable<Result<DeleteResult.Error>> results =
* minioAsyncClient.removeObjects(
* RemoveObjectsArgs.builder().bucket("my-bucketname").objects(objects).build());
* for (Result<DeleteError> result : results) {
* DeleteError error = result.get();
* for (Result<DeleteResult.Error> result : results) {
* DeleteResult.Error error = result.get();
* System.out.println(
* "Error in deleting object " + error.objectName() + "; " + error.message());
* }
* }</pre>
*
* @param args {@link RemoveObjectsArgs} object.
* @return {@code Iterable<Result<DeleteError>>} - Lazy iterator contains object removal status.
* @return {@code Iterable<Result<DeleteResult.Error>>} - Lazy iterator contains object removal
* status.
*/
public Iterable<Result<DeleteError>> removeObjects(RemoveObjectsArgs args) {
public Iterable<Result<DeleteResult.Error>> removeObjects(RemoveObjectsArgs args) {
checkArgs(args);

return new Iterable<Result<DeleteError>>() {
return new Iterable<Result<DeleteResult.Error>>() {
@Override
public Iterator<Result<DeleteError>> iterator() {
return new Iterator<Result<DeleteError>>() {
private Result<DeleteError> error = null;
private Iterator<DeleteError> errorIterator = null;
public Iterator<Result<DeleteResult.Error>> iterator() {
return new Iterator<Result<DeleteResult.Error>>() {
private Result<DeleteResult.Error> error = null;
private Iterator<DeleteResult.Error> errorIterator = null;
private boolean completed = false;
private Iterator<DeleteObject> objectIter = args.objects().iterator();
private Iterator<DeleteRequest.Object> objectIter = args.objects().iterator();

private void setError() {
error = null;
while (errorIterator.hasNext()) {
DeleteError deleteError = errorIterator.next();
DeleteResult.Error deleteError = errorIterator.next();
if (!"NoSuchVersion".equals(deleteError.code())) {
error = new Result<>(deleteError);
break;
Expand All @@ -1147,7 +1147,7 @@ private synchronized void populate() {
}

try {
List<DeleteObject> objectList = new LinkedList<>();
List<DeleteRequest.Object> objectList = new LinkedList<>();
while (objectIter.hasNext() && objectList.size() < 1000) {
objectList.add(objectIter.next());
}
Expand Down Expand Up @@ -1205,11 +1205,11 @@ public boolean hasNext() {
}

@Override
public Result<DeleteError> next() {
public Result<DeleteResult.Error> next() {
if (!hasNext()) throw new NoSuchElementException();

if (this.error != null) {
Result<DeleteError> error = this.error;
Result<DeleteResult.Error> error = this.error;
this.error = null;
return error;
}
Expand Down Expand Up @@ -1325,18 +1325,19 @@ public Iterable<Result<Item>> listObjects(ListObjectsArgs args) {
* Lists bucket information of all buckets.
*
* <pre>Example:{@code
* CompletableFuture<List<Bucket>> future = minioAsyncClient.listBuckets();
* CompletableFuture<List<ListAllMyBucketsResult.Bucket>> future = minioAsyncClient.listBuckets();
* }</pre>
*
* @return {@link CompletableFuture}&lt;{@link List}&lt;{@link Bucket}&gt;&gt; object.
* @return {@link CompletableFuture}&lt;{@link List}&lt;{@link
* ListAllMyBucketsResult.Bucket}&gt;&gt; object.
* @throws InsufficientDataException thrown to indicate not enough data available in InputStream.
* @throws InternalException thrown to indicate internal library error.
* @throws InvalidKeyException thrown to indicate missing of HMAC SHA-256 library.
* @throws IOException thrown to indicate I/O error on S3 operation.
* @throws NoSuchAlgorithmException thrown to indicate missing of MD5 or SHA-256 digest library.
* @throws XmlParserException thrown to indicate XML parsing error.
*/
public CompletableFuture<List<Bucket>> listBuckets()
public CompletableFuture<List<ListAllMyBucketsResult.Bucket>> listBuckets()
throws InsufficientDataException, InternalException, InvalidKeyException, IOException,
NoSuchAlgorithmException, XmlParserException {
return listBucketsAsync(null, null, null, null, null, null)
Expand All @@ -1350,30 +1351,31 @@ public CompletableFuture<List<Bucket>> listBuckets()
* Lists bucket information of all buckets.
*
* <pre>Example:{@code
* Iterable<Result<Bucket>> results = minioAsyncClient.listBuckets(ListBucketsArgs.builder().build());
* for (Result<Bucket> result : results) {
* Iterable<Result<ListAllMyBucketsResult.Bucket>> results = minioAsyncClient.listBuckets(ListBucketsArgs.builder().build());
* for (Result<ListAllMyBucketsResult.Bucket> result : results) {
* Bucket bucket = result.get();
* System.out.println(String.format("Bucket: %s, Region: %s, CreationDate: %s", bucket.name(), bucket.bucketRegion(), bucket.creationDate()));
* }
* }</pre>
*
* @return {@link Iterable}&lt;{@link List}&lt;{@link Bucket}&gt;&gt; object.
* @return {@link Iterable}&lt;{@link List}&lt;{@link ListAllMyBucketsResult.Bucket}&gt;&gt;
* object.
*/
public Iterable<Result<Bucket>> listBuckets(ListBucketsArgs args) {
return new Iterable<Result<Bucket>>() {
public Iterable<Result<ListAllMyBucketsResult.Bucket>> listBuckets(ListBucketsArgs args) {
return new Iterable<Result<ListAllMyBucketsResult.Bucket>>() {
@Override
public Iterator<Result<Bucket>> iterator() {
return new Iterator<Result<Bucket>>() {
public Iterator<Result<ListAllMyBucketsResult.Bucket>> iterator() {
return new Iterator<Result<ListAllMyBucketsResult.Bucket>>() {
private ListAllMyBucketsResult result = null;
private Result<Bucket> error = null;
private Iterator<Bucket> iterator = null;
private Result<ListAllMyBucketsResult.Bucket> error = null;
private Iterator<ListAllMyBucketsResult.Bucket> iterator = null;
private boolean completed = false;

private synchronized void populate() {
if (completed) return;

try {
this.iterator = new LinkedList<Bucket>().iterator();
this.iterator = new LinkedList<ListAllMyBucketsResult.Bucket>().iterator();
try {
ListBucketsResponse response =
listBucketsAsync(
Expand Down Expand Up @@ -1430,7 +1432,7 @@ public boolean hasNext() {
}

@Override
public Result<Bucket> next() {
public Result<ListAllMyBucketsResult.Bucket> next() {
if (this.completed) throw new NoSuchElementException();
if (this.error == null && this.iterator == null) {
populate();
Expand All @@ -1448,7 +1450,7 @@ public Result<Bucket> next() {
return this.error;
}

Bucket item = null;
ListAllMyBucketsResult.Bucket item = null;
if (this.iterator.hasNext()) {
item = this.iterator.next();
}
Expand Down Expand Up @@ -2542,7 +2544,11 @@ public CompletableFuture<Void> deleteBucketNotification(DeleteBucketNotification
NoSuchAlgorithmException, XmlParserException {
checkArgs(args);
return executePutAsync(
args, null, newMultimap("notification", ""), new NotificationConfiguration(), 0)
args,
null,
newMultimap("notification", ""),
new NotificationConfiguration(null, null, null, null),
0)
.thenAccept(response -> response.close());
}

Expand Down
30 changes: 16 additions & 14 deletions api/src/main/java/io/minio/MinioClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
import io.minio.errors.ServerException;
import io.minio.errors.XmlParserException;
import io.minio.messages.AccessControlPolicy;
import io.minio.messages.Bucket;
import io.minio.messages.CORSConfiguration;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteResult;
import io.minio.messages.Item;
import io.minio.messages.LifecycleConfiguration;
import io.minio.messages.ListAllMyBucketsResult;
import io.minio.messages.NotificationConfiguration;
import io.minio.messages.NotificationRecords;
import io.minio.messages.ObjectLockConfiguration;
Expand Down Expand Up @@ -641,20 +641,21 @@ public void removeObject(RemoveObjectArgs args)
* objects.add(new DeleteObject("my-objectname1"));
* objects.add(new DeleteObject("my-objectname2"));
* objects.add(new DeleteObject("my-objectname3"));
* Iterable<Result<DeleteError>> results =
* Iterable<Result<DeleteResult.Error>> results =
* minioClient.removeObjects(
* RemoveObjectsArgs.builder().bucket("my-bucketname").objects(objects).build());
* for (Result<DeleteError> result : results) {
* DeleteError error = result.get();
* for (Result<DeleteResult.Error> result : results) {
* DeleteResult.Error error = result.get();
* System.out.println(
* "Error in deleting object " + error.objectName() + "; " + error.message());
* }
* }</pre>
*
* @param args {@link RemoveObjectsArgs} object.
* @return {@code Iterable<Result<DeleteError>>} - Lazy iterator contains object removal status.
* @return {@code Iterable<Result<DeleteResult.Error>>} - Lazy iterator contains object removal
* status.
*/
public Iterable<Result<DeleteError>> removeObjects(RemoveObjectsArgs args) {
public Iterable<Result<DeleteResult.Error>> removeObjects(RemoveObjectsArgs args) {
return asyncClient.removeObjects(args);
}

Expand Down Expand Up @@ -755,13 +756,13 @@ public Iterable<Result<Item>> listObjects(ListObjectsArgs args) {
* Lists bucket information of all buckets.
*
* <pre>Example:{@code
* List<Bucket> bucketList = minioClient.listBuckets();
* List<ListAllMyBucketsResult.Bucket> bucketList = minioClient.listBuckets();
* for (Bucket bucket : bucketList) {
* System.out.println(bucket.creationDate() + ", " + bucket.name());
* }
* }</pre>
*
* @return {@code List<Bucket>} - List of bucket information.
* @return {@code List<ListAllMyBucketsResult.Bucket>} - List of bucket information.
* @throws ErrorResponseException thrown to indicate S3 service returned an error response.
* @throws InsufficientDataException thrown to indicate not enough data available in InputStream.
* @throws InternalException thrown to indicate internal library error.
Expand All @@ -772,7 +773,7 @@ public Iterable<Result<Item>> listObjects(ListObjectsArgs args) {
* @throws NoSuchAlgorithmException thrown to indicate missing of MD5 or SHA-256 digest library.
* @throws XmlParserException thrown to indicate XML parsing error.
*/
public List<Bucket> listBuckets()
public List<ListAllMyBucketsResult.Bucket> listBuckets()
throws ErrorResponseException, InsufficientDataException, InternalException,
InvalidKeyException, InvalidResponseException, IOException, NoSuchAlgorithmException,
ServerException, XmlParserException {
Expand All @@ -790,16 +791,17 @@ public List<Bucket> listBuckets()
* Lists bucket information of all buckets.
*
* <pre>Example:{@code
* Iterable<Result<Bucket>> results = minioClient.listBuckets(ListBucketsArgs.builder().build());
* for (Result<Bucket> result : results) {
* Iterable<Result<ListAllMyBucketsResult.Bucket>> results = minioClient.listBuckets(ListBucketsArgs.builder().build());
* for (Result<ListAllMyBucketsResult.Bucket> result : results) {
* Bucket bucket = result.get();
* System.out.println(String.format("Bucket: %s, Region: %s, CreationDate: %s", bucket.name(), bucket.bucketRegion(), bucket.creationDate()));
* }
* }</pre>
*
* @return {@link Iterable}&lt;{@link List}&lt;{@link Bucket}&gt;&gt; object.
* @return {@link Iterable}&lt;{@link List}&lt;{@link ListAllMyBucketsResult.Bucket}&gt;&gt;
* object.
*/
public Iterable<Result<Bucket>> listBuckets(ListBucketsArgs args) {
public Iterable<Result<ListAllMyBucketsResult.Bucket>> listBuckets(ListBucketsArgs args) {
return asyncClient.listBuckets(args);
}

Expand Down
8 changes: 4 additions & 4 deletions api/src/main/java/io/minio/RemoveObjectsArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package io.minio;

import io.minio.messages.DeleteObject;
import io.minio.messages.DeleteRequest;
import java.util.LinkedList;
import java.util.Objects;

Expand All @@ -25,13 +25,13 @@
*/
public class RemoveObjectsArgs extends BucketArgs {
private boolean bypassGovernanceMode;
private Iterable<DeleteObject> objects = new LinkedList<>();
private Iterable<DeleteRequest.Object> objects = new LinkedList<>();

public boolean bypassGovernanceMode() {
return bypassGovernanceMode;
}

public Iterable<DeleteObject> objects() {
public Iterable<DeleteRequest.Object> objects() {
return objects;
}

Expand All @@ -46,7 +46,7 @@ public Builder bypassGovernanceMode(boolean flag) {
return this;
}

public Builder objects(Iterable<DeleteObject> objects) {
public Builder objects(Iterable<DeleteRequest.Object> objects) {
validateNotNull(objects, "objects");
operations.add(args -> args.objects = objects);
return this;
Expand Down
20 changes: 8 additions & 12 deletions api/src/main/java/io/minio/S3Base.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@
import io.minio.messages.CompleteMultipartUpload;
import io.minio.messages.CompleteMultipartUploadResult;
import io.minio.messages.CopyPartResult;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteMarker;
import io.minio.messages.DeleteObject;
import io.minio.messages.DeleteRequest;
import io.minio.messages.DeleteResult;
import io.minio.messages.ErrorResponse;
Expand All @@ -59,7 +56,6 @@
import io.minio.messages.LocationConstraint;
import io.minio.messages.NotificationRecords;
import io.minio.messages.Part;
import io.minio.messages.Prefix;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
Expand Down Expand Up @@ -1033,8 +1029,8 @@ protected CompletableFuture<Integer> calculatePartCountAsync(List<ComposeSource>
private abstract class ObjectIterator implements Iterator<Result<Item>> {
protected Result<Item> error;
protected Iterator<? extends Item> itemIterator;
protected Iterator<DeleteMarker> deleteMarkerIterator;
protected Iterator<Prefix> prefixIterator;
protected Iterator<ListVersionsResult.DeleteMarker> deleteMarkerIterator;
protected Iterator<ListObjectsResult.Prefix> prefixIterator;
protected boolean completed = false;
protected ListObjectsResult listObjectsResult;
protected String lastObjectName;
Expand Down Expand Up @@ -1065,8 +1061,8 @@ protected synchronized void populate() {
this.prefixIterator = this.listObjectsResult.commonPrefixes().iterator();
} else {
this.itemIterator = new LinkedList<Item>().iterator();
this.deleteMarkerIterator = new LinkedList<DeleteMarker>().iterator();
this.prefixIterator = new LinkedList<Prefix>().iterator();
this.deleteMarkerIterator = new LinkedList<ListVersionsResult.DeleteMarker>().iterator();
this.prefixIterator = new LinkedList<ListObjectsResult.Prefix>().iterator();
}
}

Expand Down Expand Up @@ -1772,7 +1768,7 @@ public CompletableFuture<CreateMultipartUploadResponse> createMultipartUploadAsy
protected CompletableFuture<DeleteObjectsResponse> deleteObjectsAsync(
String bucketName,
String region,
List<DeleteObject> objectList,
List<DeleteRequest.Object> objectList,
boolean quiet,
boolean bypassGovernanceMode,
Multimap<String, String> extraHeaders,
Expand All @@ -1790,7 +1786,7 @@ protected CompletableFuture<DeleteObjectsResponse> deleteObjectsAsync(
extraHeaders,
bypassGovernanceMode ? newMultimap("x-amz-bypass-governance-retention", "true") : null);

final List<DeleteObject> objects = objectList;
final List<DeleteRequest.Object> objects = objectList;
return getRegionAsync(bucketName, region)
.thenCompose(
location -> {
Expand Down Expand Up @@ -1818,8 +1814,8 @@ protected CompletableFuture<DeleteObjectsResponse> deleteObjectsAsync(
try {
String bodyContent = response.body().string();
try {
if (Xml.validate(DeleteError.class, bodyContent)) {
DeleteError error = Xml.unmarshal(DeleteError.class, bodyContent);
if (Xml.validate(DeleteResult.Error.class, bodyContent)) {
DeleteResult.Error error = Xml.unmarshal(DeleteResult.Error.class, bodyContent);
DeleteResult result = new DeleteResult(error);
return new DeleteObjectsResponse(
response.headers(), bucketName, region, result);
Expand Down
Loading

0 comments on commit 3bd3ba0

Please sign in to comment.