You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2020/06/08 13:16:14 UTC

[james-project] 20/30: JAMES-3179 Deal with SieveFileRepository nullability

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

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

commit 2f3d2197a0a9d4072968d04acb01e8a98b27cf15
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Tue May 12 17:18:35 2020 +0200

    JAMES-3179 Deal with SieveFileRepository nullability
---
 .../sieverepository/file/SieveFileRepository.java  | 28 ++++++++++++----------
 .../lib/AbstractSieveRepositoryTest.java           |  2 +-
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
index b774270..ebb50ea 100644
--- a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
@@ -32,11 +32,13 @@ import java.io.Writer;
 import java.time.Instant;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Optional;
 import java.util.Scanner;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
@@ -55,6 +57,8 @@ import org.apache.james.sieverepository.api.exception.QuotaNotFoundException;
 import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
 import org.apache.james.sieverepository.api.exception.StorageException;
 
+import com.github.steveash.guavate.Guavate;
+
 /**
  * <code>SieveFileRepository</code> manages sieve scripts stored on the file system.
  * <p>The sieve root directory is a sub-directory of the application base directory named "sieve".
@@ -199,25 +203,25 @@ public class SieveFileRepository implements SieveRepository {
 
     @Override
     public List<ScriptSummary> listScripts(Username username) throws StorageException {
-        File[] files = getUserDirectory(username).listFiles();
-        List<ScriptSummary> summaries = new ArrayList<>(files.length);
         File activeFile = null;
         try {
             activeFile = getActiveFile(username);
         } catch (ScriptNotFoundException ex) {
             // no op
         }
-        for (File file : files) {
-            if (!SYSTEM_FILES.contains(file.getName())) {
-                summaries.add(new ScriptSummary(new ScriptName(file.getName()), isActive(file, activeFile)));
-            }
-        }
-        return summaries;
+
+        Predicate<File> isActive = isActiveValidator(activeFile);
+        return Stream.of(Optional.ofNullable(getUserDirectory(username).listFiles()).orElse(new File[]{}))
+            .filter(file -> !SYSTEM_FILES.contains(file.getName()))
+            .map(file -> new ScriptSummary(new ScriptName(file.getName()), isActive.test(file)))
+            .collect(Guavate.toImmutableList());
     }
 
-    private boolean isActive(File file, File activeFile) {
-        return null != activeFile
-            && activeFile.equals(file);
+    private Predicate<File> isActiveValidator(File activeFile) {
+        if (activeFile != null) {
+            return activeFile::equals;
+        }
+        return file -> false;
     }
 
     @Override
diff --git a/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java b/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
index 3f76b5a..4482d97 100644
--- a/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
@@ -130,7 +130,7 @@ public abstract class AbstractSieveRepositoryTest {
     }
 
     @Test
-    public void listScriptsShouldThrowIfUserNotFound() throws Exception {
+    public void listScriptsShouldReturnAnEmptyListIfUserNotFound() throws Exception {
         assertThat(sieveRepository.listScripts(USERNAME)).isEmpty();
     }
 


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