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