Skip to content

Commit

Permalink
add arg builder support to copyObject API
Browse files Browse the repository at this point in the history
  • Loading branch information
balamurugana committed Jun 6, 2020
1 parent 377213e commit 030788e
Show file tree
Hide file tree
Showing 48 changed files with 1,504 additions and 1,486 deletions.
10 changes: 8 additions & 2 deletions api/src/main/java/io/minio/BaseArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,19 +59,25 @@ protected void validateNotEmptyString(String arg, String argName) {
}
}

protected void validateNullOrNotEmptyString(String arg, String argName) {
if (arg != null && arg.isEmpty()) {
throw new IllegalArgumentException(argName + " must be a non-empty string.");
}
}

public Builder() {
this.operations = new ArrayList<>();
}

private Multimap<String, String> copyMultimap(Multimap<String, String> multimap) {
protected Multimap<String, String> copyMultimap(Multimap<String, String> multimap) {
Multimap<String, String> multimapCopy = HashMultimap.create();
if (multimap != null) {
multimapCopy.putAll(multimap);
}
return Multimaps.unmodifiableMultimap(multimapCopy);
}

private Multimap<String, String> toMultimap(Map<String, String> map) {
protected Multimap<String, String> toMultimap(Map<String, String> map) {
Multimap<String, String> multimap = HashMultimap.create();
if (map != null) {
multimap.putAll(Multimaps.forMap(map));
Expand Down
15 changes: 5 additions & 10 deletions api/src/main/java/io/minio/BucketArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,8 @@ public String region() {
/** Base argument builder class for {@link BucketArgs}. */
public abstract static class Builder<B extends Builder<B, A>, A extends BucketArgs>
extends BaseArgs.Builder<B, A> {
private void validateName(String name) {
if (name == null) {
throw new IllegalArgumentException("null bucket name");
}
protected void validateBucketName(String name) {
validateNotNull(name, "bucket name");

// Bucket names cannot be no less than 3 and no more than 63 characters long.
if (name.length() < 3 || name.length() > 63) {
Expand All @@ -59,20 +57,17 @@ private void validateName(String name) {
}

private void validateRegion(String region) {
if (region != null && region.isEmpty()) {
throw new IllegalArgumentException("region cannot be empty");
}
validateNullOrNotEmptyString(region, "region");
}

@Override
protected void validate(A args) {
validateName(args.bucketName);
validateRegion(args.region);
validateBucketName(args.bucketName);
}

@SuppressWarnings("unchecked") // Its safe to type cast to B as B extends this class.
public B bucket(String name) {
validateName(name);
validateBucketName(name);
operations.add(args -> args.bucketName = name);
return (B) this;
}
Expand Down
148 changes: 148 additions & 0 deletions api/src/main/java/io/minio/CopyObjectArgs.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/*
* MinIO Java SDK for Amazon S3 Compatible Cloud Storage, (C) 2020 MinIO, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.minio;

import java.time.ZonedDateTime;
import okhttp3.HttpUrl;

/** Argument class of MinioClient.copyObject(). */
public class CopyObjectArgs extends ObjectWriteArgs {
private String srcBucket;
private String srcObject;
private String srcVersionId;
private ServerSideEncryptionCustomerKey srcSsec;
private String srcMatchETag;
private String srcNotMatchETag;
private ZonedDateTime srcModifiedSince;
private ZonedDateTime srcUnmodifiedSince;
private Directive metadataDirective;
private Directive taggingDirective;

public String srcBucket() {
return srcBucket;
}

public String srcObject() {
return srcObject;
}

public String srcVersionId() {
return srcVersionId;
}

public ServerSideEncryptionCustomerKey srcSsec() {
return srcSsec;
}

public String srcMatchETag() {
return srcMatchETag;
}

public String srcNotMatchETag() {
return srcNotMatchETag;
}

public ZonedDateTime srcModifiedSince() {
return srcModifiedSince;
}

public ZonedDateTime srcUnmodifiedSince() {
return srcUnmodifiedSince;
}

public Directive metadataDirective() {
return metadataDirective;
}

public Directive taggingDirective() {
return taggingDirective;
}

public static Builder builder() {
return new Builder();
}

@Override
public void validateSse(HttpUrl url) {
super.validateSse(url);
checkSse(srcSsec, url);
}

/** Argument builder of {@link CopyObjectArgs}. */
public static final class Builder extends ObjectWriteArgs.Builder<Builder, CopyObjectArgs> {
@Override
protected void validate(CopyObjectArgs args) {
super.validate(args);
validateBucketName(args.srcBucket);
}

public Builder srcBucket(String srcBucket) {
validateBucketName(srcBucket);
operations.add(args -> args.srcBucket = srcBucket);
return this;
}

public Builder srcObject(String srcObject) {
validateNullOrNotEmptyString(srcObject, "source object");
operations.add(args -> args.srcObject = srcObject);
return this;
}

public Builder srcVersionId(String srcVersionId) {
validateNullOrNotEmptyString(srcVersionId, "source version ID");
operations.add(args -> args.srcVersionId = srcVersionId);
return this;
}

public Builder srcSsec(ServerSideEncryptionCustomerKey srcSsec) {
operations.add(args -> args.srcSsec = srcSsec);
return this;
}

public Builder srcMatchETag(String etag) {
validateNullOrNotEmptyString(etag, "etag");
operations.add(args -> args.srcMatchETag = etag);
return this;
}

public Builder srcNotMatchETag(String etag) {
validateNullOrNotEmptyString(etag, "etag");
operations.add(args -> args.srcNotMatchETag = etag);
return this;
}

public Builder srcModifiedSince(ZonedDateTime modifiedTime) {
operations.add(args -> args.srcModifiedSince = modifiedTime);
return this;
}

public Builder srcUnmodifiedSince(ZonedDateTime modifiedTime) {
operations.add(args -> args.srcUnmodifiedSince = modifiedTime);
return this;
}

public Builder metadataDirective(Directive directive) {
operations.add(args -> args.metadataDirective = directive);
return this;
}

public Builder taggingDirective(Directive directive) {
operations.add(args -> args.taggingDirective = directive);
return this;
}
}
}
5 changes: 3 additions & 2 deletions api/src/main/java/io/minio/DeleteObjectTagsArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
package io.minio;

/** Argument class of MinioClient.deleteObjectTags(). */
public class DeleteObjectTagsArgs extends ObjectArgs {
public class DeleteObjectTagsArgs extends ObjectVersionArgs {
public static Builder builder() {
return new Builder();
}

/** Argument builder of {@link DeleteObjectTagsArgs}. */
public static final class Builder extends ObjectArgs.Builder<Builder, DeleteObjectTagsArgs> {}
public static final class Builder
extends ObjectVersionArgs.Builder<Builder, DeleteObjectTagsArgs> {}
}
23 changes: 23 additions & 0 deletions api/src/main/java/io/minio/Directive.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* MinIO Java SDK for Amazon S3 Compatible Cloud Storage, (C) 2020 MinIO, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.minio;

/** Copy object directive for metadata and tags. */
public enum Directive {
COPY,
REPLACE;
}
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/DisableObjectLegalHoldArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
package io.minio;

/** Argument class of MinioClient.disableObjectLegalHold(). */
public class DisableObjectLegalHoldArgs extends ObjectArgs {
public class DisableObjectLegalHoldArgs extends ObjectVersionArgs {
public static Builder builder() {
return new Builder();
}

/** Argument builder of {@link DisableObjectLegalHoldArgs}. */
public static final class Builder
extends ObjectArgs.Builder<Builder, DisableObjectLegalHoldArgs> {}
extends ObjectVersionArgs.Builder<Builder, DisableObjectLegalHoldArgs> {}
}
12 changes: 3 additions & 9 deletions api/src/main/java/io/minio/DownloadObjectArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;

public class DownloadObjectArgs extends SsecObjectArgs {
public class DownloadObjectArgs extends ObjectReadArgs {
private String fileName;

public String fileName() {
Expand All @@ -31,21 +31,15 @@ public static Builder builder() {
return new Builder();
}

public static final class Builder extends SsecObjectArgs.Builder<Builder, DownloadObjectArgs> {
public static final class Builder extends ObjectReadArgs.Builder<Builder, DownloadObjectArgs> {
public Builder fileName(String fileName) {
validateFileName(fileName);
operations.add(args -> args.fileName = fileName);
return this;
}

private void validateFileName(String fileName) {
if (fileName == null) {
return;
}

if (fileName.isEmpty()) {
throw new IllegalArgumentException("filename should be either null or non-empty");
}
validateNotEmptyString(fileName, "filename");

Path filePath = Paths.get(fileName);
boolean fileExists = Files.exists(filePath);
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/EnableObjectLegalHoldArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
package io.minio;

/** Argument class of MinioClient.enableObjectLegalHold(). */
public class EnableObjectLegalHoldArgs extends ObjectArgs {
public class EnableObjectLegalHoldArgs extends ObjectVersionArgs {
public static Builder builder() {
return new Builder();
}

/** Argument builder of {@link EnableObjectLegalHoldArgs}. */
public static final class Builder
extends ObjectArgs.Builder<Builder, EnableObjectLegalHoldArgs> {}
extends ObjectVersionArgs.Builder<Builder, EnableObjectLegalHoldArgs> {}
}
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/GetObjectArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package io.minio;

public class GetObjectArgs extends SsecObjectArgs {
public class GetObjectArgs extends ObjectReadArgs {
private Long offset;
private Long length;

Expand All @@ -32,7 +32,7 @@ public static Builder builder() {
return new Builder();
}

public static final class Builder extends SsecObjectArgs.Builder<Builder, GetObjectArgs> {
public static final class Builder extends ObjectReadArgs.Builder<Builder, GetObjectArgs> {
public Builder offset(Long offset) {
validateOffset(offset);
operations.add(args -> args.offset = offset);
Expand Down
5 changes: 3 additions & 2 deletions api/src/main/java/io/minio/GetObjectRetentionArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
package io.minio;

/** Argument class of MinioClient.getObjectRetention(). */
public class GetObjectRetentionArgs extends ObjectArgs {
public class GetObjectRetentionArgs extends ObjectVersionArgs {
public static Builder builder() {
return new Builder();
}

/** Argument builder of {@link GetObjectRetentionArgs}. */
public static final class Builder extends ObjectArgs.Builder<Builder, GetObjectRetentionArgs> {}
public static final class Builder
extends ObjectVersionArgs.Builder<Builder, GetObjectRetentionArgs> {}
}
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/GetObjectTagsArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
package io.minio;

/** Argument class of MinioClient.getObjectTags(). */
public class GetObjectTagsArgs extends ObjectArgs {
public class GetObjectTagsArgs extends ObjectVersionArgs {
public static Builder builder() {
return new Builder();
}

/** Argument builder of {@link GetObjectTagsArgs}. */
public static final class Builder extends ObjectArgs.Builder<Builder, GetObjectTagsArgs> {}
public static final class Builder extends ObjectVersionArgs.Builder<Builder, GetObjectTagsArgs> {}
}
5 changes: 3 additions & 2 deletions api/src/main/java/io/minio/GetPresignedObjectUrlArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import java.util.concurrent.TimeUnit;

/** Argument class of MinioClient.getPresignedObjectUrl(). */
public class GetPresignedObjectUrlArgs extends ObjectArgs {
public class GetPresignedObjectUrlArgs extends ObjectVersionArgs {
// default expiration for a presigned URL is 7 days in seconds
public static final int DEFAULT_EXPIRY_TIME = (int) TimeUnit.DAYS.toSeconds(7);

Expand All @@ -40,7 +40,8 @@ public static Builder builder() {
}

/** Argument builder of {@link GetPresignedObjectUrlArgs}. */
public static final class Builder extends ObjectArgs.Builder<Builder, GetPresignedObjectUrlArgs> {
public static final class Builder
extends ObjectVersionArgs.Builder<Builder, GetPresignedObjectUrlArgs> {
private void validateMethod(Method method) {
validateNotNull(method, "method");
}
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/java/io/minio/IsObjectLegalHoldEnabledArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
package io.minio;

/** Argument class of MinioClient.isObjectLegalHoldEnabled(). */
public class IsObjectLegalHoldEnabledArgs extends ObjectArgs {
public class IsObjectLegalHoldEnabledArgs extends ObjectVersionArgs {
public static Builder builder() {
return new Builder();
}

/** Argument builder of {@link IsObjectLegalHoldEnabledArgs}. */
public static final class Builder
extends ObjectArgs.Builder<Builder, IsObjectLegalHoldEnabledArgs> {}
extends ObjectVersionArgs.Builder<Builder, IsObjectLegalHoldEnabledArgs> {}
}
Loading

0 comments on commit 030788e

Please sign in to comment.