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]
