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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
