This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit cb9a228af0841d89c7eb6f2ccf215c43926f362b
Author: Tran Tien Duc <[email protected]>
AuthorDate: Wed Jun 26 16:51:05 2019 +0700

    JAMES-2806 BucketPrefix configuration item in ObjectStorage
---
 .../ObjectStorageBlobConfiguration.java            | 54 +++++++++++++++-------
 .../ObjectStorageBlobConfigurationTest.java        | 23 +++++++++
 2 files changed, 60 insertions(+), 17 deletions(-)

diff --git 
a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
 
b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
index 05d0193..40752b8 100644
--- 
a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
+++ 
b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
@@ -39,15 +39,19 @@ public class ObjectStorageBlobConfiguration {
 
     public static final String OBJECTSTORAGE_CONFIGURATION_NAME = "blobstore";
     private static final String OBJECTSTORAGE_NAMESPACE = 
"objectstorage.namespace";
+    private static final String OBJECTSTORAGE_BUCKET_PREFIX = 
"objectstorage.bucketPrefix";
     private static final String OBJECTSTORAGE_PROVIDER = 
"objectstorage.provider";
     private static final String OBJECTSTORAGE_PAYLOAD_CODEC = 
"objectstorage.payload.codec";
     public static final String OBJECTSTORAGE_AES256_HEXSALT = 
"objectstorage.aes256.hexsalt";
     public static final String OBJECTSTORAGE_AES256_PASSWORD = 
"objectstorage.aes256.password";
 
+    static final String DEFAULT_BUCKET_PREFIX = "";
+
     public static ObjectStorageBlobConfiguration from(Configuration 
configuration) throws ConfigurationException {
         String provider = configuration.getString(OBJECTSTORAGE_PROVIDER, 
null);
         String codecName = 
configuration.getString(OBJECTSTORAGE_PAYLOAD_CODEC, null);
         Optional<String> namespace = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_NAMESPACE, null));
+        Optional<String> bucketPrefix = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_BUCKET_PREFIX, null));
         Optional<String> aesSalt = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_AES256_HEXSALT, 
null));
         Optional<char[]> aesPassword = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_AES256_PASSWORD, 
null))
             .map(String::toCharArray);
@@ -71,6 +75,7 @@ public class ObjectStorageBlobConfiguration {
             .aesSalt(aesSalt)
             .aesPassword(aesPassword)
             .defaultBucketName(namespace.map(BucketName::of))
+            .bucketPrefix(bucketPrefix)
             .build();
     }
 
@@ -113,6 +118,7 @@ public class ObjectStorageBlobConfiguration {
             private Optional<String> aesSalt;
             private Optional<char[]> aesPassword;
             private Optional<BucketName> defaultBucketName;
+            private Optional<String> bucketPrefix;
 
             public ReadyToBuild(PayloadCodecFactory payloadCodecFactory,
                                 ObjectStorageProvider provider,
@@ -123,6 +129,7 @@ public class ObjectStorageBlobConfiguration {
                 this.provider = provider;
                 this.specificAuthConfiguration = specificAuthConfiguration;
                 this.defaultBucketName = Optional.empty();
+                this.bucketPrefix = Optional.empty();
             }
 
             public ReadyToBuild aesSalt(String aesSalt) {
@@ -148,6 +155,11 @@ public class ObjectStorageBlobConfiguration {
                 return this;
             }
 
+            public ReadyToBuild bucketPrefix(Optional<String> bucketPrefix) {
+                this.bucketPrefix = bucketPrefix;
+                return this;
+            }
+
             public ObjectStorageBlobConfiguration build() {
                 if (payloadCodecFactory == PayloadCodecFactory.AES256) {
                     aesSalt.filter(s -> !s.isEmpty())
@@ -157,8 +169,9 @@ public class ObjectStorageBlobConfiguration {
                 }
 
                 BucketName defaultBucketName = 
this.defaultBucketName.orElse(BucketName.DEFAULT);
+                String bucketPrefix = 
this.bucketPrefix.orElse(DEFAULT_BUCKET_PREFIX);
 
-                return new ObjectStorageBlobConfiguration(payloadCodecFactory, 
provider, defaultBucketName, specificAuthConfiguration, aesSalt, aesPassword);
+                return new ObjectStorageBlobConfiguration(payloadCodecFactory, 
bucketPrefix, provider, defaultBucketName, specificAuthConfiguration, aesSalt, 
aesPassword);
             }
 
         }
@@ -167,18 +180,21 @@ public class ObjectStorageBlobConfiguration {
 
     private final PayloadCodecFactory payloadCodec;
     private final BucketName namespace;
+    private final String bucketPrefix;
     private final ObjectStorageProvider provider;
     private final SpecificAuthConfiguration specificAuthConfiguration;
     private Optional<String> aesSalt;
     private Optional<char[]> aesPassword;
 
     @VisibleForTesting
-    ObjectStorageBlobConfiguration(PayloadCodecFactory payloadCodec, 
ObjectStorageProvider provider,
+    ObjectStorageBlobConfiguration(PayloadCodecFactory payloadCodec, String 
bucketPrefix,
+                                   ObjectStorageProvider provider,
                                    BucketName namespace,
                                    SpecificAuthConfiguration 
specificAuthConfiguration,
                                    Optional<String> aesSalt,
                                    Optional<char[]> aesPassword) {
         this.payloadCodec = payloadCodec;
+        this.bucketPrefix = bucketPrefix;
         this.provider = provider;
         this.namespace = namespace;
         this.specificAuthConfiguration = specificAuthConfiguration;
@@ -214,26 +230,29 @@ public class ObjectStorageBlobConfiguration {
         return aesPassword;
     }
 
+    public String getBucketPrefix() {
+        return bucketPrefix;
+    }
+
     @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
+    public final boolean equals(Object o) {
+        if (o instanceof ObjectStorageBlobConfiguration) {
+            ObjectStorageBlobConfiguration that = 
(ObjectStorageBlobConfiguration) o;
+
+            return Objects.equals(this.payloadCodec, that.payloadCodec)
+                && Objects.equals(this.namespace, that.namespace)
+                && Objects.equals(this.bucketPrefix, that.bucketPrefix)
+                && Objects.equals(this.provider, that.provider)
+                && Objects.equals(this.specificAuthConfiguration, 
that.specificAuthConfiguration)
+                && Objects.equals(this.aesSalt, that.aesSalt)
+                && Objects.equals(this.aesPassword, that.aesPassword);
         }
-        ObjectStorageBlobConfiguration that = (ObjectStorageBlobConfiguration) 
o;
-        return Objects.equals(payloadCodec, that.payloadCodec) &&
-            Objects.equals(namespace, that.namespace) &&
-            Objects.equals(provider, that.provider) &&
-            Objects.equals(specificAuthConfiguration, 
that.specificAuthConfiguration) &&
-            Objects.equals(aesSalt, that.aesSalt) &&
-            Objects.equals(aesPassword, that.aesPassword);
+        return false;
     }
 
     @Override
-    public int hashCode() {
-        return Objects.hash(payloadCodec, namespace, provider, 
specificAuthConfiguration, aesSalt, aesPassword);
+    public final int hashCode() {
+        return Objects.hash(payloadCodec, namespace, bucketPrefix, provider, 
specificAuthConfiguration, aesSalt, aesPassword);
     }
 
     @Override
@@ -241,6 +260,7 @@ public class ObjectStorageBlobConfiguration {
         return MoreObjects.toStringHelper(this)
             .add("payloadCodec", payloadCodec)
             .add("namespace", namespace)
+            .add("bucketPrefix", bucketPrefix)
             .add("provider", provider)
             .add("specificAuthConfiguration", specificAuthConfiguration)
             .add("aesSalt", aesSalt)
diff --git 
a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
 
b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
index 30578bc..6bc03b2 100644
--- 
a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
+++ 
b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
@@ -181,4 +181,27 @@ class ObjectStorageBlobConfigurationTest {
             .isEqualTo(BucketName.DEFAULT);
     }
 
+    @Test
+    void fromShouldParseBucketPrefixWhenSpecified() throws Exception {
+        String bucketPrefix = "defaultPrefix";
+        MapConfiguration configuration = new MapConfiguration(
+            ImmutableMap.<String, Object>builder()
+                .putAll(VALID_CONFIGURATION)
+                .put("objectstorage.bucketPrefix", bucketPrefix)
+                .build());
+
+         
assertThat(ObjectStorageBlobConfiguration.from(configuration).getBucketPrefix())
+            .isEqualTo(bucketPrefix);
+    }
+
+     @Test
+    void fromShouldUseTheDefaultValueWhenDontSpecifyBucketPrefix() throws 
Exception {
+        MapConfiguration configuration = new MapConfiguration(
+            ImmutableMap.<String, Object>builder()
+                .putAll(VALID_CONFIGURATION)
+                .build());
+
+         
assertThat(ObjectStorageBlobConfiguration.from(configuration).getBucketPrefix())
+            .isEqualTo(ObjectStorageBlobConfiguration.DEFAULT_BUCKET_PREFIX);
+    }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to