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 rc...@apache.org on 2020/06/16 09:46:04 UTC

[james-project] 01/03: [Refactoring] don't use raw array for listRights

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

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

commit d73aa9c28e938c006c1e7709f1a288ff7a0ca597
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Mon Apr 27 23:14:11 2020 +0200

    [Refactoring] don't use raw array for listRights
---
 .../org/apache/james/mailbox/RightManager.java     |  4 ++-
 .../james/mailbox/acl/MailboxACLResolver.java      |  4 ++-
 .../james/mailbox/acl/UnionMailboxACLResolver.java | 30 ++++++++++++----------
 .../james/mailbox/store/StoreMailboxManager.java   |  2 +-
 .../james/mailbox/store/StoreRightManager.java     |  3 ++-
 .../imap/encode/ListRightsResponseEncoder.java     |  3 ++-
 .../imap/message/response/ListRightsResponse.java  | 12 ++++-----
 .../james/imap/processor/ListRightsProcessor.java  |  2 +-
 .../imap/processor/ListRightsProcessorTest.java    |  9 +++++--
 9 files changed, 42 insertions(+), 27 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/RightManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/RightManager.java
index b37b212..3fd6d8a 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/RightManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/RightManager.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox;
 
+import java.util.List;
+
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights;
@@ -78,7 +80,7 @@ public interface RightManager {
      * @return result suitable for the LISTRIGHTS IMAP command
      * @throws MailboxException in case of unknown mailbox or unsupported right
      */
-    Rfc4314Rights[] listRights(MailboxPath mailboxPath, MailboxACL.EntryKey identifier, MailboxSession session) throws MailboxException;
+    List<MailboxACL.Rfc4314Rights> listRights(MailboxPath mailboxPath, MailboxACL.EntryKey identifier, MailboxSession session) throws MailboxException;
 
     MailboxACL listRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
 
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
index 0677c99..96b8869 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
@@ -20,6 +20,8 @@
 
 package org.apache.james.mailbox.acl;
 
+import java.util.List;
+
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.exception.UnsupportedRightException;
 import org.apache.james.mailbox.model.MailboxACL;
@@ -68,7 +70,7 @@ public interface MailboxACLResolver {
      *         explicitly for the given identifier. Further elements are groups
      *         of rights which can be set for the given identifier and resource.
      */
-    MailboxACL.Rfc4314Rights[] listRights(MailboxACL.EntryKey key, GroupMembershipResolver groupMembershipResolver, String resourceOwner, boolean resourceOwnerIsGroup) throws UnsupportedRightException;
+    List<MailboxACL.Rfc4314Rights> listRights(MailboxACL.EntryKey key, GroupMembershipResolver groupMembershipResolver, String resourceOwner, boolean resourceOwnerIsGroup) throws UnsupportedRightException;
 
     /**
      * Computes the rights which apply to the given user and resource. Global
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
index f13af64..ebefaf8 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
@@ -20,10 +20,12 @@
 
 package org.apache.james.mailbox.acl;
 
-import java.util.ArrayList;
+import static java.util.function.Predicate.not;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.stream.Stream;
 
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.exception.UnsupportedRightException;
@@ -35,6 +37,8 @@ import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxACL.SpecialName;
 import org.apache.james.mime4j.dom.address.Mailbox;
 
+import com.github.steveash.guavate.Guavate;
+
 
 /**
  * An implementation which works with the union of the rights granted to the
@@ -266,28 +270,28 @@ public class UnionMailboxACLResolver implements MailboxACLResolver {
      * authenticated.
      */
     @Override
-    public Rfc4314Rights[] listRights(EntryKey queryKey, GroupMembershipResolver groupMembershipResolver, String resourceOwner, boolean resourceOwnerIsGroup) throws UnsupportedRightException {
+    public List<Rfc4314Rights> listRights(EntryKey queryKey, GroupMembershipResolver groupMembershipResolver, String resourceOwner, boolean resourceOwnerIsGroup) throws UnsupportedRightException {
         Rfc4314Rights[] positiveNegativePair = { MailboxACL.NO_RIGHTS, MailboxACL.NO_RIGHTS };
 
         MailboxACL userACL = resourceOwnerIsGroup ? groupGlobalACL : userGlobalACL;
         resolveRights(queryKey, groupMembershipResolver, userACL.getEntries(), resourceOwner, resourceOwnerIsGroup, positiveNegativePair);
 
         if (queryKey.isNegative()) {
-            return toListRightsArray(positiveNegativePair[NEGATIVE_INDEX]);
+            return toListRights(positiveNegativePair[NEGATIVE_INDEX]);
         } else {
-            return toListRightsArray(positiveNegativePair[POSITIVE_INDEX].except(positiveNegativePair[NEGATIVE_INDEX]));
+            return toListRights(positiveNegativePair[POSITIVE_INDEX].except(positiveNegativePair[NEGATIVE_INDEX]));
         }
     }
 
-    private static Rfc4314Rights[] toListRightsArray(Rfc4314Rights implicitRights) throws UnsupportedRightException {
-        List<Rfc4314Rights> result = new ArrayList<>();
-        result.add(implicitRights);
-        for (Right right : MailboxACL.FULL_RIGHTS.list()) {
-            if (!implicitRights.contains(right)) {
-                result.add(new Rfc4314Rights(right));
-            }
-        }
-        return result.toArray(Rfc4314Rights[]::new);
+    private static List<Rfc4314Rights> toListRights(Rfc4314Rights implicitRights) throws UnsupportedRightException {
+        return Stream.concat(
+            MailboxACL.FULL_RIGHTS
+                .list()
+                .stream()
+                .filter(not(implicitRights::contains))
+                .map(Rfc4314Rights::new),
+            Stream.of(implicitRights))
+        .collect(Guavate.toImmutableList());
     }
 
     @Override
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 901bda5..09ea5eb 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -783,7 +783,7 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public Rfc4314Rights[] listRights(MailboxPath mailboxPath, MailboxACL.EntryKey key, MailboxSession session) throws MailboxException {
+    public List<Rfc4314Rights> listRights(MailboxPath mailboxPath, MailboxACL.EntryKey key, MailboxSession session) throws MailboxException {
         return storeRightManager.listRights(mailboxPath, key, session);
     }
 
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index 6b4c205..0d68316 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.store;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
@@ -126,7 +127,7 @@ public class StoreRightManager implements RightManager {
     }
 
     @Override
-    public Rfc4314Rights[] listRights(MailboxPath mailboxPath, EntryKey key, MailboxSession session) throws MailboxException {
+    public List<Rfc4314Rights> listRights(MailboxPath mailboxPath, EntryKey key, MailboxSession session) throws MailboxException {
         MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
         Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
 
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java
index 5fdddce..790a21e 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java
@@ -20,6 +20,7 @@
 package org.apache.james.imap.encode;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.message.response.ListRightsResponse;
@@ -45,7 +46,7 @@ public class ListRightsResponseEncoder implements ImapResponseEncoder<ListRights
         String identifier = listRightsResponse.getIdentifier();
         composer.quote(identifier);
         
-        Rfc4314Rights[] rights = listRightsResponse.getRights();
+        List<Rfc4314Rights> rights = listRightsResponse.getRights();
         
         for (Rfc4314Rights entry : rights) {
             composer.quote(entry.serialize());
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/response/ListRightsResponse.java b/protocols/imap/src/main/java/org/apache/james/imap/message/response/ListRightsResponse.java
index 5bba8a8..6565982 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/message/response/ListRightsResponse.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/message/response/ListRightsResponse.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.imap.message.response;
 
-import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
 
 import org.apache.james.imap.api.ImapConstants;
@@ -32,9 +32,9 @@ import org.apache.james.mailbox.model.MailboxACL;
 public final class ListRightsResponse implements ImapResponseMessage {
     private final String identifier;
     private final String mailboxName;
-    private final MailboxACL.Rfc4314Rights[] rights;
+    private final List<MailboxACL.Rfc4314Rights> rights;
 
-    public ListRightsResponse(String mailboxName, String identifier, MailboxACL.Rfc4314Rights[] rights) {
+    public ListRightsResponse(String mailboxName, String identifier, List<MailboxACL.Rfc4314Rights> rights) {
         super();
         this.mailboxName = mailboxName;
         this.identifier = identifier;
@@ -49,7 +49,7 @@ public final class ListRightsResponse implements ImapResponseMessage {
         return mailboxName;
     }
 
-    public MailboxACL.Rfc4314Rights[] getRights() {
+    public List<MailboxACL.Rfc4314Rights> getRights() {
         return rights;
     }
 
@@ -60,14 +60,14 @@ public final class ListRightsResponse implements ImapResponseMessage {
 
             return Objects.equals(this.mailboxName, other.mailboxName) &&
                 Objects.equals(this.identifier, other.identifier) &&
-                Arrays.equals(this.rights, other.rights);
+                Objects.equals(this.rights, other.rights);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hash(mailboxName, identifier, Arrays.hashCode(rights));
+        return Objects.hash(mailboxName, identifier, rights);
     }
 
     @Override
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
index 4c7a147..ca76e6f 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
@@ -107,7 +107,7 @@ public class ListRightsProcessor extends AbstractMailboxProcessor<ListRightsRequ
                 // Note that Section 6 recommends additional identifier’s verification
                 // steps.
                 
-                Rfc4314Rights[] rights = mailboxManager.listRights(mailboxPath, key, mailboxSession);
+                List<Rfc4314Rights> rights = mailboxManager.listRights(mailboxPath, key, mailboxSession);
                 ListRightsResponse aclResponse = new ListRightsResponse(mailboxName, identifier, rights);
                 responder.respond(aclResponse);
                 okComplete(request, responder);
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
index 2104d9b..fafa0c1 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
@@ -29,6 +29,8 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+import java.util.List;
+
 import org.apache.james.core.Username;
 import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.message.response.ImapResponseMessage;
@@ -69,7 +71,7 @@ public class ListRightsProcessorTest {
     private ListRightsRequest listRightsRequest;
     private ListRightsProcessor subject;
     private EntryKey user1Key;
-    private Rfc4314Rights[] listRights;
+    private List<Rfc4314Rights> listRights;
     private MailboxPath path;
     private Responder responder;
     private ArgumentCaptor<ImapResponseMessage> argumentCaptor;
@@ -98,7 +100,10 @@ public class ListRightsProcessorTest {
         listRightsRequest = new ListRightsRequest(TAG, MAILBOX_NAME, USER_1.asString());
 
         user1Key = EntryKey.deserialize(USER_1.asString());
-        listRights = new Rfc4314Rights[] {Rfc4314Rights.fromSerializedRfc4314Rights("ae"), Rfc4314Rights.fromSerializedRfc4314Rights("i"), Rfc4314Rights.fromSerializedRfc4314Rights("k")};
+        listRights = List.of(
+            Rfc4314Rights.fromSerializedRfc4314Rights("ae"),
+            Rfc4314Rights.fromSerializedRfc4314Rights("i"),
+            Rfc4314Rights.fromSerializedRfc4314Rights("k"));
     }
     
     @Test


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