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 7852f95f0db7cb711fbbff78fe01bfc924bbd701
Author: Tran Tien Duc <[email protected]>
AuthorDate: Thu Jun 6 17:32:38 2019 +0700

    JAMES-2782 LocalFileExport with custom file prefix
---
 .../export/file/LocalFileBlobExportMechanism.java  | 25 ++++++-----------
 .../file/LocalFileBlobExportMechanismTest.java     | 31 ++++++++++++++++++++++
 2 files changed, 39 insertions(+), 17 deletions(-)

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 32e899b..15add95 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
@@ -28,10 +28,10 @@ import java.util.Optional;
 import javax.inject.Inject;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.export.api.BlobExportMechanism;
+import org.apache.james.blob.export.api.ExportedFileNamesGenerator;
 import org.apache.james.blob.export.api.FileExtension;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
@@ -44,9 +44,6 @@ 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;
-    private static final boolean WITH_NUMBERS = true;
     private static final String SUBJECT = "Some content had had just been 
exported";
     static final String CORRESPONDING_FILE_HEADER = "corresponding-file";
 
@@ -107,18 +104,21 @@ public class LocalFileBlobExportMechanism implements 
BlobExportMechanism {
 
     @Override
     public ShareeStage blobId(BlobId blobId) {
-        return mailAddress -> explanation -> fileExtension -> () ->  {
-            String fileUrl = copyBlobToFile(blobId, fileExtension);
+        return mailAddress -> explanation -> fileCustomPrefix -> fileExtension 
-> () ->  {
+            String fileUrl = copyBlobToFile(blobId, fileCustomPrefix, 
fileExtension);
             sendMail(mailAddress, fileUrl, explanation);
         };
     }
 
-    private String copyBlobToFile(BlobId blobId, Optional<FileExtension> 
fileExtension) {
+    private String copyBlobToFile(BlobId blobId,
+                                  Optional<String> fileCustomPrefix,
+                                  Optional<FileExtension> fileExtension) {
         try {
             File exportingDirectory = 
fileSystem.getFile(configuration.exportDirectory);
             FileUtils.forceMkdir(exportingDirectory);
 
-            String fileURL = generateFileUrl(fileExtension);
+            String fileName = 
ExportedFileNamesGenerator.generateFileName(fileCustomPrefix, blobId, 
fileExtension);
+            String fileURL = configuration.exportDirectory + "/" + fileName;
             File file = fileSystem.getFile(fileURL);
             FileUtils.copyToFile(blobStore.read(blobId), file);
 
@@ -128,15 +128,6 @@ public class LocalFileBlobExportMechanism implements 
BlobExportMechanism {
         }
     }
 
-    private String generateFileUrl(Optional<FileExtension> fileExtension) {
-        String fileName = RandomStringUtils.random(STRING_LENGTH, 
WITH_LETTERS, !WITH_NUMBERS);
-        String filePathWithoutExtension = configuration.exportDirectory + "/" 
+ fileName;
-
-        return fileExtension
-            .map(extension -> 
extension.appendExtension(filePathWithoutExtension))
-            .orElse(filePathWithoutExtension);
-    }
-
     private void sendMail(MailAddress mailAddress, String fileUrl, String 
explanation) {
         try {
             MimeMessageBuilder mimeMessage = 
MimeMessageBuilder.mimeMessageBuilder()
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 2b91681..522f9d8 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
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.when;
 import java.io.FileInputStream;
 import java.net.InetAddress;
 import java.nio.charset.StandardCharsets;
+import java.util.Optional;
 
 import javax.mail.Message;
 import javax.mail.internet.InternetAddress;
@@ -84,6 +85,7 @@ class LocalFileBlobExportMechanismTest {
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
             .explanation(explanation)
+            .noFileCustomPrefix()
             .noFileExtension()
             .export();
 
@@ -115,6 +117,7 @@ class LocalFileBlobExportMechanismTest {
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
             .explanation("The content of a deleted message vault had been 
shared with you.")
+            .noFileCustomPrefix()
             .noFileExtension()
             .export();
 
@@ -139,6 +142,7 @@ class LocalFileBlobExportMechanismTest {
             testee.blobId(blobId)
                 .with(MailAddressFixture.RECIPIENT1)
                 .explanation("The content of a deleted message vault had been 
shared with you.")
+                .noFileCustomPrefix()
                 .noFileExtension()
                 .export())
             .isInstanceOf(ObjectStoreException.class);
@@ -151,6 +155,7 @@ class LocalFileBlobExportMechanismTest {
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
             .explanation("The content of a deleted message vault had been 
shared with you.")
+            .noFileCustomPrefix()
             .noFileExtension()
             .export();
 
@@ -174,6 +179,7 @@ class LocalFileBlobExportMechanismTest {
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
             .explanation("The content of a deleted message vault had been 
shared with you.")
+            .noFileCustomPrefix()
             .fileExtension(FileExtension.ZIP)
             .export();
 
@@ -191,6 +197,31 @@ class LocalFileBlobExportMechanismTest {
             });
     }
 
+    @Test
+    void exportingBlobShouldCreateAFileWithPrefixWhenDeclaringPrefix() {
+        BlobId blobId = blobStore.save(BLOB_CONTENT).block();
+        String filePrefix = "[email protected]";
+
+        testee.blobId(blobId)
+            .with(MailAddressFixture.RECIPIENT1)
+            .explanation("The content of a deleted message vault had been 
shared with you.")
+            .filePrefix(Optional.of(filePrefix))
+            .fileExtension(FileExtension.ZIP)
+            .export();
+
+        assertThat(mailetContext.getSentMails())
+            .element(0)
+            .satisfies(sentMail -> {
+                try {
+                    String fileUrl = 
sentMail.getMsg().getHeader(LocalFileBlobExportMechanism.CORRESPONDING_FILE_HEADER)[0];
+                    assertThat(FilenameUtils.getName(fileUrl))
+                        .startsWith(filePrefix);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+    }
+
     @Nested
     class ConfigurationTest {
         @Test


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

Reply via email to