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 bc9fafe1e78fae6dfc10c87729753f66ac3001a7
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Mar 27 16:45:46 2019 +0700

    JAMES-2688 LocalFileExport.Configuration creation from properties
---
 server/blob/blob-export-file/pom.xml               |  6 +++-
 .../export/file/LocalFileBlobExportMechanism.java  | 36 ++++++++++++++++++++++
 .../blob/export/file/FileSystemExtension.java      |  4 ++-
 .../file/LocalFileBlobExportMechanismTest.java     | 33 ++++++++++++++++++++
 4 files changed, 77 insertions(+), 2 deletions(-)

diff --git a/server/blob/blob-export-file/pom.xml 
b/server/blob/blob-export-file/pom.xml
index ecb1d9c..c74fffe 100644
--- a/server/blob/blob-export-file/pom.xml
+++ b/server/blob/blob-export-file/pom.xml
@@ -59,7 +59,11 @@
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-filesystem-api</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>nl.jqno.equalsverifier</groupId>
+            <artifactId>equalsverifier</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
diff --git 
a/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
 
b/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
index 5982c5b..347ed7d 100644
--- 
a/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
+++ 
b/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
@@ -22,6 +22,7 @@ package org.apache.james.blob.export.file;
 import java.io.File;
 import java.io.IOException;
 import java.net.UnknownHostException;
+import java.util.Objects;
 import java.util.Optional;
 
 import javax.inject.Inject;
@@ -39,6 +40,9 @@ import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.server.core.MailImpl;
 import org.apache.mailet.MailetContext;
 
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
 public class LocalFileBlobExportMechanism implements BlobExportMechanism {
     private static final int STRING_LENGTH = 32;
     private static final boolean WITH_LETTERS = true;
@@ -48,14 +52,46 @@ public class LocalFileBlobExportMechanism implements 
BlobExportMechanism {
 
     public static class Configuration {
 
+        public static Configuration 
from(org.apache.commons.configuration.Configuration propertiesConfiguration) {
+            String exportDirectory = 
propertiesConfiguration.getString(DIRECTORY_LOCATION_PROPERTY);
+            return of(exportDirectory);
+        }
+
+        @VisibleForTesting
+        static Configuration of(String exportDirectory) {
+            return new Configuration(exportDirectory);
+        }
+
+        private static final String DIRECTORY_LOCATION_PROPERTY = 
"blob.export.localFile.storingDirectory";
         private static final String DEFAULT_DIRECTORY_LOCATION = 
"file://var/blobExporting";
         public static final Configuration DEFAULT_CONFIGURATION = new 
Configuration(DEFAULT_DIRECTORY_LOCATION);
 
         private final String exportDirectory;
 
         public Configuration(String exportDirectory) {
+            Preconditions.checkNotNull(exportDirectory);
+
             this.exportDirectory = exportDirectory;
         }
+
+        public String getExportDirectory() {
+            return exportDirectory;
+        }
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof Configuration) {
+                Configuration that = (Configuration) o;
+
+                return Objects.equals(this.exportDirectory, 
that.exportDirectory);
+            }
+            return false;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(exportDirectory);
+        }
     }
 
     private final MailetContext mailetContext;
diff --git 
a/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtension.java
 
b/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtension.java
index ed1dbd8..80410b3 100644
--- 
a/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtension.java
+++ 
b/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtension.java
@@ -43,7 +43,9 @@ public class FileSystemExtension implements 
ParameterResolver, BeforeAllCallback
 
     @Override
     public void afterAll(ExtensionContext context) throws Exception {
-        FileUtils.forceDelete(fileSystem.getBasedir());
+        if (fileSystem.getBasedir().exists()) {
+            FileUtils.forceDelete(fileSystem.getBasedir());
+        }
     }
 
     @Override
diff --git 
a/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
 
b/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
index b824afa..e33c025 100644
--- 
a/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
+++ 
b/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
@@ -32,12 +32,14 @@ import java.nio.charset.StandardCharsets;
 import javax.mail.Message;
 import javax.mail.internet.InternetAddress;
 
+import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.api.ObjectStoreException;
 import org.apache.james.blob.export.api.FileExtension;
+import 
org.apache.james.blob.export.file.LocalFileBlobExportMechanism.Configuration;
 import org.apache.james.blob.memory.MemoryBlobStore;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.filesystem.api.FileSystem;
@@ -45,9 +47,12 @@ import org.apache.james.util.MimeMessageUtil;
 import org.apache.mailet.base.MailAddressFixture;
 import org.apache.mailet.base.test.FakeMailContext;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
+import nl.jqno.equalsverifier.EqualsVerifier;
+
 @ExtendWith(FileSystemExtension.class)
 class LocalFileBlobExportMechanismTest {
     private static final byte[] BLOB_CONTENT = 
"blob_content".getBytes(StandardCharsets.UTF_8);
@@ -185,4 +190,32 @@ class LocalFileBlobExportMechanismTest {
                 }
             });
     }
+
+        @Nested
+    class ConfigurationTest {
+
+        @Test
+        void shouldMatchBeanContract() {
+            EqualsVerifier.forClass(Configuration.class)
+                .verify();
+        }
+        @Test
+        void fromShouldThrowWhenDirectoryIsMissing() {
+            PropertiesConfiguration configuration = new 
PropertiesConfiguration();
+            
configuration.addProperty("blob.export.localFile.storingDirectory", null);
+
+            assertThatThrownBy(() -> Configuration.from(configuration))
+                .isInstanceOf(NullPointerException.class);
+        }
+
+        @Test
+        void fromShouldReturnConfigurationWhenDirectoryIsSpecified() {
+            PropertiesConfiguration configuration = new 
PropertiesConfiguration();
+            String exportDirectory = "file://var/localFileBlobExport";
+            
configuration.addProperty("blob.export.localFile.storingDirectory", 
exportDirectory);
+
+            assertThat(Configuration.from(configuration))
+                .isEqualTo(Configuration.of(exportDirectory));
+        }
+    }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to