[jira] [Resolved] (JAMES-2159) Collect recipients as contacts mailet

2017-10-05 Thread Tellier Benoit (JIRA)

 [ 
https://issues.apache.org/jira/browse/JAMES-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tellier Benoit resolved JAMES-2159.
---
Resolution: Fixed

> Collect recipients as contacts mailet
> -
>
> Key: JAMES-2159
> URL: https://issues.apache.org/jira/browse/JAMES-2159
> Project: James Server
>  Issue Type: New Feature
>  Components: Matchers/Mailets (bundled)
>Reporter: Antoine Duprat
>
> Introduce a mailet which stores the recipient and the sender in a message 
> attribute as a JSON.
> Here is the expected format:
> {code}
> {
>   userEmail : sen...@james.org, 
>   emails : [ t...@james.org, c...@james.org]
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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



[jira] [Closed] (JAMES-2159) Collect recipients as contacts mailet

2017-10-05 Thread Tellier Benoit (JIRA)

 [ 
https://issues.apache.org/jira/browse/JAMES-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tellier Benoit closed JAMES-2159.
-

> Collect recipients as contacts mailet
> -
>
> Key: JAMES-2159
> URL: https://issues.apache.org/jira/browse/JAMES-2159
> Project: James Server
>  Issue Type: New Feature
>  Components: Matchers/Mailets (bundled)
>Reporter: Antoine Duprat
>
> Introduce a mailet which stores the recipient and the sender in a message 
> attribute as a JSON.
> Here is the expected format:
> {code}
> {
>   userEmail : sen...@james.org, 
>   emails : [ t...@james.org, c...@james.org]
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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



[jira] [Commented] (JAMES-2159) Collect recipients as contacts mailet

2017-10-05 Thread Tellier Benoit (JIRA)

[ 
https://issues.apache.org/jira/browse/JAMES-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16193987#comment-16193987
 ] 

Tellier Benoit commented on JAMES-2159:
---

https://github.com/linagora/james-project/pull/1016 added some corrections

> Collect recipients as contacts mailet
> -
>
> Key: JAMES-2159
> URL: https://issues.apache.org/jira/browse/JAMES-2159
> Project: James Server
>  Issue Type: New Feature
>  Components: Matchers/Mailets (bundled)
>Reporter: Antoine Duprat
>
> Introduce a mailet which stores the recipient and the sender in a message 
> attribute as a JSON.
> Here is the expected format:
> {code}
> {
>   userEmail : sen...@james.org, 
>   emails : [ t...@james.org, c...@james.org]
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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



[jira] [Commented] (JAMES-2169) Allow display of shared mailboxes via GetMailboxes

2017-10-05 Thread Tellier Benoit (JIRA)

[ 
https://issues.apache.org/jira/browse/JAMES-2169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16193989#comment-16193989
 ] 

Tellier Benoit commented on JAMES-2169:
---

https://github.com/linagora/james-project/pull/1010 allow listing delegated 
mailboxes

> Allow display of shared mailboxes via GetMailboxes
> --
>
> Key: JAMES-2169
> URL: https://issues.apache.org/jira/browse/JAMES-2169
> Project: James Server
>  Issue Type: Improvement
>  Components: JMAP
>Reporter: Matthieu Baechler
>Assignee: Antoine Duprat
>
> GetMailbox must be able to retrieve information about shared mailboxes.
> To that purpose, we need to add a sharedWith field to Mailbox structure.
> This field list people who get access to a given mailbox and list the rights 
> each user gets.
> Only Owner and people with Admin rights on a mailbox has access to this field 
> content.
> People having access to a mailbox has only its own right in this field.
> Acceptance criteria: 
> ```
> Given user Bob with ["INBOX", "BobShared"] mailboxes
> And user Alice with ["INBOX"] mailboxes
> And user Bob share "BobShaBred" mailbox to Alice
> When Alice queries Bob's "BobShared" mailbox details
> Then she gets BobShared details
> And BobShared contains sharedWith property with only Alice rights
> ```



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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



[jira] [Resolved] (MAILBOX-310) MailboxManager should also search delegated mailboxes

2017-10-05 Thread Tellier Benoit (JIRA)

 [ 
https://issues.apache.org/jira/browse/MAILBOX-310?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tellier Benoit resolved MAILBOX-310.

Resolution: Fixed

https://github.com/linagora/james-project/pull/1011 solved this, Including a 
MailboxQuery refactoring.

> MailboxManager should also search delegated mailboxes
> -
>
> Key: MAILBOX-310
> URL: https://issues.apache.org/jira/browse/MAILBOX-310
> Project: James Mailbox
>  Issue Type: New Feature
>  Components: api, cassandra, memory
>Affects Versions: master
>Reporter: Tellier Benoit
>
> The goal is to convert the ACL list into mailbox list.
> We need to add a Mailbox feature ACLMailboxSearch. When the feature is 
> supported, MailboxManager::search will also return mailboxes I have the 
> delegated rights on.
> Beware: the MailboxSearchQuery does not express this kind of search yet (A 
> mailbox path like"":"":"" seems to have the wanted behaviour)
> We need to store "per user delegated mailboxes" and inject them as part of 
> the MailboxMapper::findMailboxWithPathLike seems the right place to handle 
> this. (We then need to handle special case empty namespace and empty username 
> as per today code organisation).



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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



james-project git commit: JAMES-2159 Add more tests for collected contacts

2017-10-05 Thread matthieu
Repository: james-project
Updated Branches:
  refs/heads/master f52eaa62a -> dc4e2016f


JAMES-2159 Add more tests for collected contacts

 - Mailbox format, mismatches between envelope and mime message, scrambling...


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dc4e2016
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dc4e2016
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dc4e2016

Branch: refs/heads/master
Commit: dc4e2016fe9d61dd2469e37083d6e6dea554174d
Parents: f52eaa6
Author: benwa 
Authored: Thu Oct 5 15:46:14 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:05:03 2017 +0200

--
 .../transport/mailets/ContactExtractor.java | 20 ++--
 .../transport/mailets/ContactExtractorTest.java | 96 
 2 files changed, 109 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/dc4e2016/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
--
diff --git 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
index 468d355..bf5665b 100644
--- 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
+++ 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
@@ -18,6 +18,7 @@
  /
 package org.apache.james.transport.mailets;
 
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Optional;
 
@@ -25,6 +26,8 @@ import javax.mail.Address;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
+import org.apache.james.core.MailAddress;
+import org.apache.james.mime4j.util.MimeUtil;
 import org.apache.mailet.Mail;
 import org.apache.mailet.Mailet;
 import org.apache.mailet.MailetException;
@@ -84,7 +87,7 @@ public class ContactExtractor extends GenericMailet 
implements Mailet {
 @Override
 public void service(Mail mail) throws MessagingException {
 try {
-Optional payload = extractContacts(mail.getMessage());
+Optional payload = extractContacts(mail);
 LOGGER.debug("payload : {}", payload);
 payload.ifPresent(x -> mail.setAttribute(extractAttributeTo, x));
 } catch (Exception e) {
@@ -92,12 +95,14 @@ public class ContactExtractor extends GenericMailet 
implements Mailet {
 }
 }
 
-private Optional extractContacts(MimeMessage mimeMessage) throws 
MessagingException {
-return Optional.ofNullable(mimeMessage.getSender())
-.map(Address::toString)
-.filter(Throwing.predicate(sender -> 
hasRecipients(mimeMessage)))
-.map(Throwing.function(sender -> new ExtractedContacts(sender, 
recipients(mimeMessage
-.map(Throwing.function(message -> 
objectMapper.writeValueAsString(message)));
+private Optional extractContacts(Mail mail) throws 
MessagingException, IOException {
+MimeMessage message = mail.getMessage();
+
+return Optional.of(mail.getSender())
+.map(MailAddress::asString)
+.filter(Throwing.predicate(sender -> hasRecipients(message)))
+.map(Throwing.function(sender -> new ExtractedContacts(sender, 
recipients(message
+.map(Throwing.function(extractedContacts -> 
objectMapper.writeValueAsString(extractedContacts)));
 }
 
 private boolean hasRecipients(MimeMessage mimeMessage) throws 
MessagingException {
@@ -107,6 +112,7 @@ public class ContactExtractor extends GenericMailet 
implements Mailet {
 private ImmutableList recipients(MimeMessage mimeMessage) throws 
MessagingException {
 return Arrays.stream(mimeMessage.getAllRecipients())
 .map(Address::toString)
+.map(MimeUtil::unscrambleHeaderValue)
 .collect(Guavate.toImmutableList());
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/dc4e2016/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
--
diff --git 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
index 9eda1f2..0ba88ba 100644
--- 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
+++ 

[23/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Remove javadoc for toString

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Remove javadoc for toString


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cd37438d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cd37438d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cd37438d

Branch: refs/heads/master
Commit: cd37438d6d01b3eef65ee19e8a26cb88aa80bd5a
Parents: c6aa6da
Author: benwa 
Authored: Wed Oct 4 10:30:42 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../main/java/org/apache/james/mailbox/model/MailboxQuery.java  | 5 -
 1 file changed, 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/cd37438d/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index 09b12cf..2de99e2 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -281,11 +281,6 @@ public final class MailboxQuery {
 || expression.indexOf(getLocalWildcard()) >= 0);
 }
 
-/**
- * Renders a string suitable for logging.
- * 
- * @return a String representation of this object.
- */
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("expression", expression)


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



[16/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: MailboxQuery should not rely anymore on MailboxPath for its internal representation

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: MailboxQuery should not rely anymore on 
MailboxPath for its internal representation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1f37e3cf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1f37e3cf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1f37e3cf

Branch: refs/heads/master
Commit: 1f37e3cf60da280c7b94a6e9bf07d6ac8783804b
Parents: 36333ba
Author: benwa 
Authored: Wed Oct 4 09:46:05 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../james/mailbox/model/MailboxQuery.java   | 79 +---
 .../james/mailbox/MailboxManagerTest.java   |  4 +-
 .../james/mailbox/model/MailboxQueryTest.java   | 34 +
 .../mailbox/store/StoreMailboxManager.java  | 17 -
 .../mailbox/store/StoreMailboxManagerTest.java  | 38 +-
 .../apache/james/modules/MailboxProbeImpl.java  |  2 +-
 .../matchers/AbstractStorageQuota.java  |  2 +-
 7 files changed, 111 insertions(+), 65 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/1f37e3cf/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index a812206..49db850 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -26,6 +26,7 @@ import java.util.regex.Pattern;
 import org.apache.james.mailbox.MailboxSession;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 
 
@@ -33,8 +34,6 @@ import com.google.common.base.Preconditions;
  * Expresses select criteria for mailboxes.
  */
 public final class MailboxQuery {
-public static final char SQL_WILDCARD_CHAR = '%';
-
 /**
  * Use this wildcard to match every char including the hierarchy delimiter
  */
@@ -44,15 +43,15 @@ public final class MailboxQuery {
  * Use this wildcard to match every char except the hierarchy delimiter
  */
 public final static char LOCALWILDCARD = '%';
+
 private static final String EMPTY_PATH_NAME = "";
 
-private final MailboxPath base;
 private final String expression;
 private final char pathDelimiter;
 private final Pattern pattern;
 private final Optional namespace;
 private final Optional user;
-private final Optional name;
+private final Optional baseName;
 
 public static Builder builder() {
 return new Builder();
@@ -128,15 +127,11 @@ public final class MailboxQuery {
  * @param pathDelimiter
  *path delimiter to use
  */
-@VisibleForTesting MailboxQuery(Optional namespace, 
Optional user, Optional name,
+@VisibleForTesting MailboxQuery(Optional namespace, 
Optional user, Optional baseName,
 String expression, MailboxSession session) 
{
 this.namespace = namespace;
 this.user = user;
-this.name = name;
-this.base = new MailboxPath(
-namespace.orElse(MailboxConstants.USER_NAMESPACE),
-user.orElse(session.getUser().getUserName()),
-name.orElse(EMPTY_PATH_NAME));
+this.baseName = baseName;
 if (expression == null) {
 this.expression = "";
 } else {
@@ -146,20 +141,24 @@ public final class MailboxQuery {
 pattern = constructEscapedRegex();
 }
 
+public Optional getNamespace() {
+return namespace;
+}
+
+public Optional getUser() {
+return user;
+}
+
+public Optional getBaseName() {
+return baseName;
+}
+
 public boolean isPrivateMailboxes(MailboxSession session) {
 MailboxSession.User sessionUser = session.getUser();
 return 
namespace.map(MailboxConstants.USER_NAMESPACE::equals).orElse(false)
 && user.map(sessionUser::isSameUser).orElse(false);
 }
 
-public MailboxPath getPathLike() {
-String combinedName = getCombinedName()
-.replace(getFreeWildcard(), SQL_WILDCARD_CHAR)
-.replace(getLocalWildcard(), SQL_WILDCARD_CHAR)
-+ SQL_WILDCARD_CHAR;
-return new MailboxPath(getBase(), combinedName);
-}
-
 public boolean belongsToRequestedNamespaceAndUser(MailboxPath mailboxPath) 
{
 boolean belongsToRequestedNamespace = namespace
 .map(value -> 

[14/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Copy mailboxPath matching in external class hierarchy

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Copy mailboxPath matching in external 
class hierarchy


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2c048997
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2c048997
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2c048997

Branch: refs/heads/master
Commit: 2c048997b95815befe9ed8630e3bdd3ca9fefc44
Parents: cd37438
Author: benwa 
Authored: Wed Oct 4 11:27:25 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../apache/james/mailbox/model/ExactName.java   |   48 +
 .../mailbox/model/MailboxNameExpression.java|   38 +
 .../james/mailbox/model/PrefixedRegex.java  |  112 ++
 .../james/mailbox/model/PrefixedWildcard.java   |   47 +
 .../apache/james/mailbox/model/Wildcard.java|   40 +
 .../james/mailbox/model/ExactNameTest.java  |   67 +
 .../james/mailbox/model/MailboxQueryTest.java   | 1615 --
 .../james/mailbox/model/PrefixedRegexTest.java  | 1058 
 .../mailbox/model/PrefixedWildcardTest.java |   71 +
 .../james/mailbox/model/WildcardTest.java   |   59 +
 10 files changed, 1540 insertions(+), 1615 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/2c048997/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java
new file mode 100644
index 000..298819e
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java
@@ -0,0 +1,48 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  *
+ *   http://www.apache.org/licenses/LICENSE-2.0 *
+ *  *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
+ * KIND, either express or implied.  See the License for the*
+ * specific language governing permissions and limitations  *
+ * under the License.   *
+ /
+
+package org.apache.james.mailbox.model;
+
+import com.google.common.base.Preconditions;
+
+public class ExactName implements MailboxNameExpression {
+
+private final String name;
+
+public ExactName(String name) {
+Preconditions.checkNotNull(name);
+this.name = name;
+}
+
+@Override
+public boolean isExpressionMatch(String mailboxName) {
+Preconditions.checkNotNull(mailboxName);
+return name.equals(mailboxName);
+}
+
+@Override
+public String getCombinedName() {
+return name;
+}
+
+@Override
+public boolean isWild() {
+return false;
+}
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2c048997/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java
new file mode 100644
index 000..ec7d715
--- /dev/null
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java
@@ -0,0 +1,38 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  

[26/27] james-project git commit: JAMES-2169 User can retrieve shared mailbox from JMAP and its integration test

2017-10-05 Thread matthieu
JAMES-2169 User can retrieve shared mailbox from JMAP and its integration test


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f52eaa62
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f52eaa62
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f52eaa62

Branch: refs/heads/master
Commit: f52eaa62a793ecfe5d276531ebb3fc1351564bc6
Parents: 93aac90
Author: quynhn 
Authored: Wed Oct 4 16:07:16 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:39 2017 +0200

--
 .../integration/GetMailboxesMethodTest.java | 102 +++
 .../james/jmap/methods/GetMailboxesMethod.java  |  10 +-
 2 files changed, 107 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f52eaa62/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
index 547c644..5e21f00 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
@@ -554,4 +554,106 @@ public abstract class GetMailboxesMethodTest {
 
 assertThat(sharedWith).containsOnlyKeys(alice, cedric);
 }
+
+@Test
+public void getMailboxesShouldReturnAllAccessibleMailboxesWhenEmptyIds() 
throws Exception {
+String sharedMailboxName = "BobShared";
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, 
DefaultMailboxes.INBOX);
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, 
sharedMailboxName);
+
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, 
DefaultMailboxes.INBOX);
+MailboxPath bobMailboxPath = MailboxPath.forUser(bob, 
sharedMailboxName);
+aclProbe.replaceRights(bobMailboxPath, alice, new 
Rfc4314Rights(Right.Read));
+
+List expectedMailboxes = ImmutableList. builder()
+.addAll(DefaultMailboxes.DEFAULT_MAILBOXES)
+.add(sharedMailboxName)
+.build();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMailboxes\", {}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("mailboxes"))
+.body(ARGUMENTS + ".list", hasSize(6))
+.body(ARGUMENTS + ".list.name", 
hasItems(expectedMailboxes.toArray()));
+}
+
+@Test
+public void getMailboxesShouldFilterMailboxesWithReadRightWhenEmptyIds() 
throws Exception {
+String sharedReadMailboxName = "BobShared";
+String sharedAdministerMailboxName = "BobShared1";
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, 
DefaultMailboxes.INBOX);
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, 
sharedReadMailboxName);
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, 
sharedAdministerMailboxName);
+
+mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, 
DefaultMailboxes.INBOX);
+MailboxPath bobSharedReadMailboxPath = MailboxPath.forUser(bob, 
sharedReadMailboxName);
+MailboxPath bobSharedAdministerMailboxPath = MailboxPath.forUser(bob, 
sharedAdministerMailboxName);
+
+aclProbe.replaceRights(bobSharedReadMailboxPath, alice, new 
Rfc4314Rights(Right.Read));
+aclProbe.replaceRights(bobSharedAdministerMailboxPath, alice, new 
Rfc4314Rights(Right.Administer));
+
+List expectedMailboxes = ImmutableList. builder()
+.addAll(DefaultMailboxes.DEFAULT_MAILBOXES)
+.add(sharedReadMailboxName)
+.build();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMailboxes\", {}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("mailboxes"))
+.body(ARGUMENTS + ".list", hasSize(6))
+.body(ARGUMENTS + ".list.name", 
hasItems(expectedMailboxes.toArray()));
+}
+
+@Test
+

[21/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Use matchesAll more

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Use matchesAll more


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c6aa6da5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c6aa6da5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c6aa6da5

Branch: refs/heads/master
Commit: c6aa6da58e43d0147e3623c7e0feefe46d3064d1
Parents: 6501eab
Author: benwa 
Authored: Wed Oct 4 10:13:16 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../org/apache/james/mailbox/model/MailboxQueryTest.java | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/c6aa6da5/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
index a266678..a3149f8 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
@@ -48,7 +48,7 @@ public class MailboxQueryTest {
 //Given
 MailboxQuery testee = MailboxQuery.builder()
 .base(mailboxPath)
-.expression("*")
+.matchesAll()
 .mailboxSession(mailboxSession)
 .build();
 //When
@@ -473,7 +473,7 @@ public class MailboxQueryTest {
 //Given
 MailboxQuery testee = MailboxQuery.builder()
 .base(mailboxPath)
-.expression("*")
+.matchesAll()
 .mailboxSession(mailboxSession)
 .build();
 //When
@@ -487,7 +487,7 @@ public class MailboxQueryTest {
 //Given
 MailboxQuery testee = MailboxQuery.builder()
 .base(mailboxPath)
-.expression("*")
+.matchesAll()
 .mailboxSession(mailboxSession)
 .build();
 //When
@@ -501,7 +501,7 @@ public class MailboxQueryTest {
 //Given
 MailboxQuery testee = MailboxQuery.builder()
 .base(mailboxPath)
-.expression("*")
+.matchesAll()
 .mailboxSession(mailboxSession)
 .build();
 //When


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



[11/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes

2017-10-05 Thread matthieu
http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
deleted file mode 100644
index 69b4ec9..000
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
+++ /dev/null
@@ -1,1058 +0,0 @@
-/
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information*
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the*
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *  *
- *   http://www.apache.org/licenses/LICENSE-2.0 *
- *  *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
- * KIND, either express or implied.  See the License for the*
- * specific language governing permissions and limitations  *
- * under the License.   *
- /
-
-package org.apache.james.mailbox.model;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.Test;
-
-public class PrefixedRegexTest {
-private static final char PATH_DELIMITER = '.';
-private static final String PREFIX = "name";
-private static final String EMPTY_PREFIX = "";
-
-@Test
-public void isWildShouldReturnTrueWhenOnlyFreeWildcard() throws Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenOnlyLocalWildcard() throws Exception 
{
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenFreeWildcardAtBeginning() throws 
Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*One", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenLocalWildcardAtBeginning() throws 
Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%One", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenFreeWildcardInMiddle() throws 
Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A*A", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenLocalWildcardInMiddle() throws 
Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A%A", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenFreeWildcardAtEnd() throws Exception 
{
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One*", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnTrueWhenLocalWildcardAtEnd() throws 
Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One%", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isTrue();
-}
-
-@Test
-public void isWildShouldReturnFalseWhenEmptyExpression() throws Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "", 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isFalse();
-}
-
-@Test
-public void isWildShouldReturnFalseWhenNullExpression() throws Exception {
-PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, null, 
PATH_DELIMITER);
-
-boolean actual = prefixedRegex.isWild();
-
-assertThat(actual).isFalse();
-}
-
-@Test
-public void 

[09/27] james-project git commit: MAILBOX-310 Refactor mailbox search

2017-10-05 Thread matthieu
MAILBOX-310 Refactor mailbox search

 - Allow missing namespace and username in mailboxQuery
 - Matching logic SHOULD be moved in MailboxQuery


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/26500281
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/26500281
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/26500281

Branch: refs/heads/master
Commit: 26500281041cd9b8f153093ec004bdcbff5db653
Parents: 78f208c
Author: benwa 
Authored: Tue Oct 3 17:51:51 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:37 2017 +0200

--
 .../james/mailbox/model/MailboxQuery.java   | 111 ++-
 .../james/mailbox/MailboxManagerTest.java   |   6 +-
 .../james/mailbox/model/MailboxQueryTest.java   | 844 ---
 .../inmemory/InMemoryMessageIdManager.java  |   1 +
 .../InMemoryMessageIdManagerTestSystem.java |   7 +-
 .../InMemoryMessageManagerTestSystem.java   |   3 +-
 .../mailbox/store/StoreMailboxManager.java  |  97 +--
 .../store/AbstractCombinationManagerTest.java   |   4 +
 .../mailbox/store/StoreMailboxManagerTest.java  |  62 --
 .../james/imap/processor/LSubProcessor.java |   2 +-
 .../james/imap/processor/ListProcessor.java |   2 +-
 .../james/imap/processor/LSubProcessorTest.java |  63 +-
 .../mailbox/MailboxManagerManagement.java   |   2 +-
 .../james/jmap/methods/GetMailboxesMethod.java  |   3 +-
 .../jmap/utils/SystemMailboxesProviderImpl.java |   4 +-
 .../webadmin/service/UserMailboxesService.java  |   2 +-
 16 files changed, 880 insertions(+), 333 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/26500281/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index 88f923a..5153ffa 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -33,62 +33,65 @@ import com.google.common.base.Preconditions;
  * Expresses select criteria for mailboxes.
  */
 public final class MailboxQuery {
-
-private final MailboxPath base;
-
-private final String expression;
-
-private final char pathDelimiter;
-
-private final Pattern pattern;
+public static final char SQL_WILDCARD_CHAR = '%';
 
 /**
  * Use this wildcard to match every char including the hierarchy delimiter
  */
 public final static char FREEWILDCARD = '*';
-
-
+
 /**
  * Use this wildcard to match every char except the hierarchy delimiter
  */
 public final static char LOCALWILDCARD = '%';
-
+private static final String EMPTY_PATH_NAME = "";
+
+private final MailboxPath base;
+private final String expression;
+private final char pathDelimiter;
+private final Pattern pattern;
+private final Optional namespace;
+private final Optional user;
+private final Optional name;
+
 public static Builder builder() {
 return new Builder();
 }
 
-public static Builder builder(MailboxSession session) {
-return 
builder().pathDelimiter(session.getPathDelimiter()).username(session.getUser().getUserName());
+public static Builder privateMailboxesBuilder(MailboxSession session) {
+return builder()
+.mailboxSession(session)
+.username(session.getUser().getUserName());
 }
 
 public static class Builder {
-private static final String EMPTY_PATH_NAME = "";
-private MailboxPath base;
 private String expression;
-@VisibleForTesting char pathDelimiter;
-@VisibleForTesting String username;
+@VisibleForTesting MailboxSession mailboxSession;
+@VisibleForTesting Optional username;
 @VisibleForTesting Optional pathName;
 @VisibleForTesting Optional namespace;
 
 private Builder() {
 this.pathName = Optional.empty();
 this.namespace = Optional.empty();
+this.username = Optional.empty();
 }
 
 public Builder base(MailboxPath base) {
-this.base = base;
+this.namespace = Optional.ofNullable(base.getNamespace());
+this.username = Optional.ofNullable(base.getUser());
+this.pathName = Optional.ofNullable(base.getName());
 return this;
 }
 
 public Builder username(String username) {
-this.username = username;
+this.username = 

[04/27] james-project git commit: MAILBOX-310 CassandraUserMailboxRightsDAO should store user -> accessible (non personnal) mailboxes

2017-10-05 Thread matthieu
MAILBOX-310 CassandraUserMailboxRightsDAO should store user -> accessible (non 
personnal) mailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e55b3716
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e55b3716
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e55b3716

Branch: refs/heads/master
Commit: e55b3716bb37125512358b623a992ad5d1a3eb8a
Parents: 3192535
Author: benwa 
Authored: Wed Oct 4 15:43:35 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 09:48:53 2017 +0200

--
 .../mail/CassandraUserMailboxRightsDAO.java | 147 +++
 .../cassandra/modules/CassandraAclModule.java   |  14 +-
 .../table/CassandraUserMailboxRightsTable.java  |  28 
 .../mail/CassandraUserMailboxRightsDAOTest.java | 108 ++
 4 files changed, 296 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/e55b3716/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java
new file mode 100644
index 000..336a0ef
--- /dev/null
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java
@@ -0,0 +1,147 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  *
+ *   http://www.apache.org/licenses/LICENSE-2.0 *
+ *  *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
+ * KIND, either express or implied.  See the License for the*
+ * specific language governing permissions and limitations  *
+ * under the License.   *
+ /
+package org.apache.james.mailbox.cassandra.mail;
+
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.MAILBOX_ID;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.RIGHTS;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.TABLE_NAME;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.USER_NAME;
+
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.mailbox.acl.PositiveUserACLChanged;
+import org.apache.james.mailbox.cassandra.ids.CassandraId;
+import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights;
+import org.apache.james.util.FluentFutureStream;
+
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.github.fge.lambdas.Throwing;
+
+public class CassandraUserMailboxRightsDAO {
+
+private final CassandraAsyncExecutor cassandraAsyncExecutor;
+private final CassandraUtils cassandraUtils;
+private final PreparedStatement delete;
+private final PreparedStatement insert;
+private final PreparedStatement select;
+

[17/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Slightly improve isExpressionMatch

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Slightly improve isExpressionMatch


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/07ee106c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/07ee106c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/07ee106c

Branch: refs/heads/master
Commit: 07ee106c5aa46136ddde9b6d2119eb6ee25c78a7
Parents: 6607c69
Author: benwa 
Authored: Wed Oct 4 09:48:29 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../org/apache/james/mailbox/model/MailboxQuery.java | 11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/07ee106c/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index 7332ec1..c6e2ebc 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -207,17 +207,12 @@ public final class MailboxQuery {
  * @return true if the given name matches this expression, false otherwise
  */
 public boolean isExpressionMatch(String name) {
-final boolean result;
 if (isWild()) {
-if (name == null) {
-result = false;
-} else {
-result = pattern.matcher(name).matches();
-}
+return name != null
+&& pattern.matcher(name).matches();
 } else {
-result = expression.equals(name);
+return expression.equals(name);
 }
-return result;
 }
 
 public boolean isPathMatch(MailboxPath mailboxPath) {


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



[19/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: MailboxSession should not be compulsory to build MailboxQuery

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: MailboxSession should not be compulsory 
to build MailboxQuery


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8faf9a6f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8faf9a6f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8faf9a6f

Branch: refs/heads/master
Commit: 8faf9a6fd8ed08fab877cb25aebb0d1c5730e03c
Parents: 07ee106
Author: benwa 
Authored: Wed Oct 4 09:51:44 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../james/mailbox/model/MailboxQuery.java   | 20 +---
 .../james/mailbox/model/MailboxQueryTest.java   |  2 +-
 2 files changed, 14 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/8faf9a6f/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index c6e2ebc..6cbbff2 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -58,7 +58,7 @@ public final class MailboxQuery {
 
 public static class Builder {
 private String expression;
-@VisibleForTesting MailboxSession mailboxSession;
+@VisibleForTesting Optional pathDelimiter;
 @VisibleForTesting Optional username;
 @VisibleForTesting Optional pathName;
 @VisibleForTesting Optional namespace;
@@ -67,6 +67,7 @@ public final class MailboxQuery {
 this.pathName = Optional.empty();
 this.namespace = Optional.empty();
 this.username = Optional.empty();
+this.pathDelimiter = Optional.empty();
 }
 
 public Builder base(MailboxPath base) {
@@ -98,15 +99,20 @@ public final class MailboxQuery {
 this.expression = String.valueOf(FREEWILDCARD);
 return this;
 }
-
+
 public Builder mailboxSession(MailboxSession session) {
-this.mailboxSession = session;
+this.pathDelimiter = Optional.of(session.getPathDelimiter());
+return this;
+}
+
+public Builder pathDelimiter(char pathDelimiter) {
+this.pathDelimiter = Optional.of(pathDelimiter);
 return this;
 }
 
 public MailboxQuery build() {
-Preconditions.checkState(mailboxSession != null);
-return new MailboxQuery(namespace, username, pathName, expression, 
mailboxSession);
+Preconditions.checkState(pathDelimiter.isPresent());
+return new MailboxQuery(namespace, username, pathName, expression, 
pathDelimiter.get());
 }
 }
 
@@ -128,7 +134,7 @@ public final class MailboxQuery {
  *path delimiter to use
  */
 @VisibleForTesting MailboxQuery(Optional namespace, 
Optional user, Optional baseName,
-String expression, MailboxSession session) 
{
+String expression, char pathDelimiter) {
 this.namespace = namespace;
 this.user = user;
 this.baseName = baseName;
@@ -137,7 +143,7 @@ public final class MailboxQuery {
 } else {
 this.expression = expression;
 }
-this.pathDelimiter = session.getPathDelimiter();
+this.pathDelimiter = pathDelimiter;
 pattern = constructEscapedRegex();
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8faf9a6f/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
index 1c3f697..a266678 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java
@@ -1710,7 +1710,7 @@ public class MailboxQueryTest {
 // When
 Builder query = MailboxQuery.privateMailboxesBuilder(mailboxSession);
 //Then
-assertThat(query.mailboxSession.getPathDelimiter()).isEqualTo('#');
+assertThat(query.pathDelimiter).contains('#');
 assertThat(query.username).contains("little bobby table");
 }
 


-
To unsubscribe, 

[25/27] james-project git commit: MAILBOX-310 Correct WebAdmin mailbox handling

2017-10-05 Thread matthieu
MAILBOX-310 Correct WebAdmin mailbox handling


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/636e5a40
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/636e5a40
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/636e5a40

Branch: refs/heads/master
Commit: 636e5a40f9f4753a4d8358ed590f286c0501d223
Parents: b44b9bb
Author: benwa 
Authored: Thu Oct 5 09:13:29 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:39 2017 +0200

--
 server/protocols/webadmin/webadmin-mailbox/pom.xml  |  6 ++
 .../james/webadmin/service/UserMailboxesService.java| 12 +---
 .../james/webadmin/routes/UserMailboxesRoutesTest.java  |  4 ++--
 3 files changed, 13 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/636e5a40/server/protocols/webadmin/webadmin-mailbox/pom.xml
--
diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml 
b/server/protocols/webadmin/webadmin-mailbox/pom.xml
index 471f8dd..96d5eee 100644
--- a/server/protocols/webadmin/webadmin-mailbox/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml
@@ -39,6 +39,12 @@
 
 
 ${project.groupId}
+apache-james-mailbox-api
+test
+test-jar
+
+
+${project.groupId}
 apache-james-mailbox-memory
 test
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/636e5a40/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
--
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
index 225d0bf..af0b658 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
@@ -47,9 +47,7 @@ import com.google.common.base.Strings;
 
 
 public class UserMailboxesService {
-
 private static final Logger LOGGER = 
LoggerFactory.getLogger(UserMailboxesService.class);
-private static final String USER_NAME = "webAdmin";
 
 private final MailboxManager mailboxManager;
 private final UsersRepository usersRepository;
@@ -62,7 +60,7 @@ public class UserMailboxesService {
 
 public void createMailbox(String username, MailboxName mailboxName) throws 
MailboxException, UsersRepositoryException {
 usernamePreconditions(username);
-MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USER_NAME);
+MailboxSession mailboxSession = 
mailboxManager.createSystemSession(username);
 try {
 mailboxManager.createMailbox(
 convertToMailboxPath(username, mailboxName.asString(), 
mailboxSession),
@@ -74,7 +72,7 @@ public class UserMailboxesService {
 
 public void deleteMailboxes(String username) throws MailboxException, 
UsersRepositoryException {
 usernamePreconditions(username);
-MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USER_NAME);
+MailboxSession mailboxSession = 
mailboxManager.createSystemSession(username);
 listUserMailboxes(mailboxSession)
 .map(MailboxMetaData::getPath)
 .forEach(Throwing.consumer(mailboxPath -> 
deleteMailbox(mailboxSession, mailboxPath)));
@@ -82,7 +80,7 @@ public class UserMailboxesService {
 
 public List listMailboxes(String username) throws 
MailboxException, UsersRepositoryException {
 usernamePreconditions(username);
-MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USER_NAME);
+MailboxSession mailboxSession = 
mailboxManager.createSystemSession(username);
 return listUserMailboxes(mailboxSession)
 .map(mailboxMetaData -> new 
MailboxResponse(mailboxMetaData.getPath().getName()))
 .collect(Guavate.toImmutableList());
@@ -90,7 +88,7 @@ public class UserMailboxesService {
 
 public boolean testMailboxExists(String username, MailboxName mailboxName) 
throws MailboxException, UsersRepositoryException {
 usernamePreconditions(username);
-MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USER_NAME);
+MailboxSession mailboxSession = 
mailboxManager.createSystemSession(username);
 return 

[12/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox 
search related classes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0cfb3951
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0cfb3951
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0cfb3951

Branch: refs/heads/master
Commit: 0cfb395142d1b0261041a7772e95ccc051085652
Parents: 2c04899
Author: benwa 
Authored: Wed Oct 4 11:29:46 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../apache/james/mailbox/MailboxManager.java|2 +-
 .../apache/james/mailbox/model/ExactName.java   |   48 -
 .../mailbox/model/MailboxNameExpression.java|   38 -
 .../james/mailbox/model/MailboxQuery.java   |  316 --
 .../james/mailbox/model/PrefixedRegex.java  |  112 --
 .../james/mailbox/model/PrefixedWildcard.java   |   47 -
 .../apache/james/mailbox/model/Wildcard.java|   40 -
 .../james/mailbox/model/search/ExactName.java   |   48 +
 .../model/search/MailboxNameExpression.java |   38 +
 .../mailbox/model/search/MailboxQuery.java  |  318 ++
 .../mailbox/model/search/PrefixedRegex.java |  112 ++
 .../mailbox/model/search/PrefixedWildcard.java  |   47 +
 .../james/mailbox/model/search/Wildcard.java|   40 +
 .../james/mailbox/MailboxManagerTest.java   |2 +-
 .../james/mailbox/model/ExactNameTest.java  |   67 --
 .../james/mailbox/model/MailboxQueryTest.java   |  266 -
 .../james/mailbox/model/PrefixedRegexTest.java  | 1058 --
 .../mailbox/model/PrefixedWildcardTest.java |   71 --
 .../james/mailbox/model/WildcardTest.java   |   59 -
 .../mailbox/model/search/ExactNameTest.java |   67 ++
 .../mailbox/model/search/MailboxQueryTest.java  |  267 +
 .../mailbox/model/search/PrefixedRegexTest.java | 1058 ++
 .../model/search/PrefixedWildcardTest.java  |   71 ++
 .../mailbox/model/search/WildcardTest.java  |   59 +
 .../inmemory/InMemoryMessageIdManager.java  |2 +-
 .../InMemoryMessageIdManagerTestSystem.java |2 +-
 .../InMemoryMessageManagerTestSystem.java   |2 +-
 .../mailbox/store/StoreMailboxManager.java  |2 +-
 .../store/AbstractCombinationManagerTest.java   |2 +-
 .../mailbox/store/StoreMailboxManagerTest.java  |2 +-
 .../james/imap/processor/LSubProcessor.java |2 +-
 .../james/imap/processor/ListProcessor.java |2 +-
 .../base/MailboxEventAnalyserTest.java  |2 +-
 .../apache/james/modules/MailboxProbeImpl.java  |2 +-
 .../mailbox/MailboxManagerManagement.java   |2 +-
 .../matchers/AbstractStorageQuota.java  |2 +-
 .../james/jmap/methods/GetMailboxesMethod.java  |2 +-
 .../jmap/utils/SystemMailboxesProviderImpl.java |2 +-
 ...ltMailboxesProvisioningFilterThreadTest.java |2 +-
 .../webadmin/service/UserMailboxesService.java  |2 +-
 .../routes/UserMailboxesRoutesTest.java |2 +-
 41 files changed, 2144 insertions(+), 2141 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index 38414cc..080169a 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -36,10 +36,10 @@ import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MailboxQuery;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
+import org.apache.james.mailbox.model.search.MailboxQuery;
 
 /**
  * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java
deleted file mode 100644
index 298819e..000
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/
- * 

[02/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Don't expose MailboxQuery constructor

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Don't expose MailboxQuery constructor


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/434e040b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/434e040b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/434e040b

Branch: refs/heads/master
Commit: 434e040bdb4fcadbdb5bf9ab7ec961aec24cf59d
Parents: 10da435
Author: Antoine Duprat 
Authored: Thu Sep 28 15:09:09 2017 +0200
Committer: benwa 
Committed: Wed Oct 4 16:29:09 2017 +0700

--
 .../apache/james/mailbox/model/MailboxQuery.java|  2 +-
 .../apache/james/mailbox/MailboxManagerTest.java| 16 ++--
 .../apache/james/imap/processor/LSubProcessor.java  |  6 +-
 .../apache/james/imap/processor/ListProcessor.java  |  8 +++-
 .../org/apache/james/modules/MailboxProbeImpl.java  |  8 +---
 .../adapter/mailbox/MailboxManagerManagement.java   |  8 +---
 .../transport/matchers/AbstractStorageQuota.java|  8 ++--
 7 files changed, 43 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/434e040b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index e32c9be..88f923a 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -136,7 +136,7 @@ public final class MailboxQuery {
  * @param pathDelimiter
  *path delimiter to use
  */
-public MailboxQuery(MailboxPath base, String expression, char 
pathDelimiter) {
+@VisibleForTesting MailboxQuery(MailboxPath base, String expression, char 
pathDelimiter) {
 super();
 this.base = base;
 if (base.getName() == null)

http://git-wip-us.apache.org/repos/asf/james-project/blob/434e040b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 0b70549..bcc1e4e 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -241,7 +241,13 @@ public abstract class MailboxManagerTest {
 session = mailboxManager.createSystemSession(USER_1);
 mailboxManager.createMailbox(new MailboxPath("other_namespace", 
USER_1, "Other"), session);
 mailboxManager.createMailbox(MailboxPath.inbox(session), session);
-List metaDatas = mailboxManager.search(new 
MailboxQuery(MailboxPath.forUser(USER_1, ""), "*", '.'), session);
+List metaDatas = mailboxManager.search(
+MailboxQuery.builder()
+.base(MailboxPath.forUser(USER_1, ""))
+.expression("*")
+.pathDelimiter('.')
+.build(), 
+session);
 assertThat(metaDatas).hasSize(1);
 
assertThat(metaDatas.get(0).getPath()).isEqualTo(MailboxPath.inbox(session));
 }
@@ -251,7 +257,13 @@ public abstract class MailboxManagerTest {
 session = mailboxManager.createSystemSession(USER_1);
 mailboxManager.createMailbox(MailboxPath.forUser(USER_2, "Other"), 
session);
 mailboxManager.createMailbox(MailboxPath.inbox(session), session);
-List metaDatas = mailboxManager.search(new 
MailboxQuery(MailboxPath.forUser(USER_1, ""), "*", '.'), session);
+List metaDatas = mailboxManager.search(
+MailboxQuery.builder()
+.base(MailboxPath.forUser(USER_1, ""))
+.expression("*")
+.pathDelimiter('.')
+.build(), 
+session);
 assertThat(metaDatas).hasSize(1);
 
assertThat(metaDatas.get(0).getPath()).isEqualTo(MailboxPath.inbox(session));
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/434e040b/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
--
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
index a4bf955..a290ebd 100644
--- 

[13/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Copy mailboxPath matching in external class hierarchy

2017-10-05 Thread matthieu
http://git-wip-us.apache.org/repos/asf/james-project/blob/2c048997/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
new file mode 100644
index 000..69b4ec9
--- /dev/null
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java
@@ -0,0 +1,1058 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  *
+ *   http://www.apache.org/licenses/LICENSE-2.0 *
+ *  *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
+ * KIND, either express or implied.  See the License for the*
+ * specific language governing permissions and limitations  *
+ * under the License.   *
+ /
+
+package org.apache.james.mailbox.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class PrefixedRegexTest {
+private static final char PATH_DELIMITER = '.';
+private static final String PREFIX = "name";
+private static final String EMPTY_PREFIX = "";
+
+@Test
+public void isWildShouldReturnTrueWhenOnlyFreeWildcard() throws Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenOnlyLocalWildcard() throws Exception 
{
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenFreeWildcardAtBeginning() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*One", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenLocalWildcardAtBeginning() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%One", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenFreeWildcardInMiddle() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A*A", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenLocalWildcardInMiddle() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A%A", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenFreeWildcardAtEnd() throws Exception 
{
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One*", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenLocalWildcardAtEnd() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One%", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnFalseWhenEmptyExpression() throws Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isFalse();
+}
+
+@Test
+public void isWildShouldReturnFalseWhenNullExpression() throws Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, null, 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isFalse();
+}
+
+@Test
+public void 

[03/27] james-project git commit: MAILBOX-310 Mapper should store the ACL by user/mailbox

2017-10-05 Thread matthieu
MAILBOX-310 Mapper should store the ACL by user/mailbox


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/78f208c4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/78f208c4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/78f208c4

Branch: refs/heads/master
Commit: 78f208c4af9ba198e13eb8dd1f5a32772aa6c4ac
Parents: e55b371
Author: benwa 
Authored: Wed Oct 4 15:43:08 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 09:48:53 2017 +0200

--
 .../mailbox/caching/CachingMailboxMapper.java   |   6 +
 .../CassandraMailboxSessionMapperFactory.java   |   6 +-
 .../cassandra/mail/CassandraACLMapper.java  |  39 +++--
 .../cassandra/mail/CassandraMailboxMapper.java  |  24 ++-
 .../CassandraSubscriptionManagerTest.java   |   3 +
 ...estCassandraMailboxSessionMapperFactory.java |   6 +-
 .../cassandra/mail/CassandraACLMapperTest.java  |   7 +-
 .../CassandraMailboxMapperConcurrencyTest.java  |   7 +-
 .../mail/CassandraMailboxMapperTest.java|   7 +-
 .../mail/CassandraModSeqProviderTest.java   |   3 +
 .../mail/CassandraUidProviderTest.java  |   3 +
 .../mailbox/hbase/mail/HBaseMailboxMapper.java  |   8 +
 .../mailbox/jcr/mail/JCRMailboxMapper.java  |   8 +
 .../mailbox/jpa/mail/JPAMailboxMapper.java  |   7 +
 .../jpa/mail/TransactionalMailboxMapper.java|   6 +
 .../maildir/mail/MaildirMailboxMapper.java  |   8 +
 .../inmemory/mail/InMemoryMailboxMapper.java|  20 +++
 .../james/mailbox/store/mail/MailboxMapper.java |  10 ++
 .../store/TestMailboxSessionMapperFactory.java  |   6 +
 .../store/mail/model/MailboxMapperACLTest.java  | 153 +++
 .../modules/mailbox/CassandraMailboxModule.java |   2 +
 21 files changed, 319 insertions(+), 20 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/78f208c4/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
--
diff --git 
a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
 
b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
index 8a6179a..fe67704 100644
--- 
a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
+++ 
b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
@@ -24,6 +24,7 @@ import java.util.List;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
@@ -120,4 +121,9 @@ public class CachingMailboxMapper implements MailboxMapper {
cache.invalidate(mailbox);
}
 
+@Override
+public List findMailboxes(String userName, Right right) throws 
MailboxException {
+return underlying.findMailboxes(userName, right);
+}
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f208c4/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index d23d46c..78e2daf 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -48,6 +48,7 @@ import 
org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
 import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
+import org.apache.james.mailbox.cassandra.mail.CassandraUserMailboxRightsDAO;
 import org.apache.james.mailbox.cassandra.user.CassandraSubscriptionMapper;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -88,6 +89,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 private final CassandraAttachmentMessageIdDAO attachmentMessageIdDAO;
 private final 

[06/27] james-project git commit: MAILBOX-310 Introduce ACL capability

2017-10-05 Thread matthieu
MAILBOX-310 Introduce ACL capability


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5de2d001
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5de2d001
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5de2d001

Branch: refs/heads/master
Commit: 5de2d001fe3bd630a388359801a513b2debd8ecb
Parents: d26baea
Author: Antoine Duprat 
Authored: Mon Oct 2 15:09:01 2017 +0200
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:37 2017 +0200

--
 .../org/apache/james/mailbox/MailboxManager.java   |  3 ++-
 .../apache/james/mailbox/MailboxManagerTest.java   |  2 +-
 .../mailbox/cassandra/CassandraMailboxManager.java |  2 +-
 .../mailbox/inmemory/InMemoryMailboxManager.java   |  6 +-
 .../apache/james/JamesCapabilitiesServerTest.java  | 17 +
 .../java/org/apache/james/jmap/JMAPModule.java |  2 ++
 6 files changed, 28 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index 093219a..38414cc 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -80,7 +80,8 @@ public interface MailboxManager extends RequestAware, 
MailboxListenerSupport {
 Annotation,
 Move,
 Namespace,
-UserFlag
+UserFlag,
+ACL
 }
 
 EnumSet getSupportedMailboxCapabilities();

http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 66ff86c..f33ffcf 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -441,7 +441,7 @@ public abstract class MailboxManagerTest {
 
 @Test
 public void searchShouldIncludeDelegatedMailboxes() throws 
MailboxException {
-
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.RightSearch));
+
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL));
 MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
 MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
 MailboxPath inbox1 = MailboxPath.inbox(session1);

http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index b17deb1..57cfc9c 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -111,7 +111,7 @@ public class CassandraMailboxManager extends 
StoreMailboxManager {
 
 @Override
 public EnumSet 
getSupportedMailboxCapabilities() {
-return EnumSet.of(MailboxCapabilities.Move, 
MailboxCapabilities.UserFlag, MailboxCapabilities.Namespace, 
MailboxCapabilities.Annotation);
+return EnumSet.of(MailboxCapabilities.Move, 
MailboxCapabilities.UserFlag, MailboxCapabilities.Namespace, 
MailboxCapabilities.Annotation, MailboxCapabilities.ACL);
 }
 
 @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
--
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index adf3044..9aca010 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -73,7 +73,11 @@ public class 

[08/27] james-project git commit: MAILBOX-310 Refactor mailbox search

2017-10-05 Thread matthieu
http://git-wip-us.apache.org/repos/asf/james-project/blob/26500281/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
--
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 b96ba8c..b7e8a8d 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
@@ -20,9 +20,9 @@
 package org.apache.james.mailbox.store;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.EnumSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Random;
 import java.util.Set;
@@ -48,7 +48,6 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.exception.NotAdminException;
-import org.apache.james.mailbox.exception.UnsupportedRightException;
 import org.apache.james.mailbox.exception.UserDoesNotExistException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxACL.Right;
@@ -86,6 +85,7 @@ import org.apache.james.mailbox.store.transaction.Mapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.Iterables;
 
@@ -100,7 +100,6 @@ import com.google.common.collect.Iterables;
 public class StoreMailboxManager implements MailboxManager {
 private static final Logger LOGGER = 
LoggerFactory.getLogger(StoreMailboxManager.class);
 
-public static final char SQL_WILDCARD_CHAR = '%';
 
 private MailboxEventDispatcher dispatcher;
 private DelegatingMailboxListener delegatingListener;
@@ -673,47 +672,50 @@ public class StoreMailboxManager implements 
MailboxManager {
 }
 
 @Override
-public List search(MailboxQuery mailboxExpression, 
MailboxSession session)
-throws MailboxException {
-final char localWildcard = mailboxExpression.getLocalWildcard();
-final char freeWildcard = mailboxExpression.getFreeWildcard();
-final String baseName = mailboxExpression.getBase().getName();
-final int baseLength;
-if (baseName == null) {
-baseLength = 0;
+public List search(MailboxQuery mailboxExpression, 
MailboxSession session) throws MailboxException {
+MailboxMapper mailboxMapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
+List mailboxes = mailboxMapper
+.findMailboxWithPathLike(mailboxExpression.getPathLike())
+.stream()
+.filter(Throwing.predicate(mailbox -> isReadable(session, 
mailbox)))
+.collect(Guavate.toImmutableList());
+
+return mailboxes
+.stream()
+.filter(mailbox -> 
mailboxExpression.isPathMatch(mailbox.generateAssociatedPath()))
+.map(mailbox -> toMailboxMetadata(session, mailboxes, mailbox))
+.sorted(new StandardMailboxMetaDataComparator())
+.collect(Guavate.toImmutableList());
+}
+
+private boolean isReadable(MailboxSession session, Mailbox mailbox) throws 
MailboxException {
+return (isSameUser(session, mailbox) && isUserNamespace(mailbox))
+|| hasRight(mailbox, Right.Read, session);
+}
+
+private boolean isSameUser(MailboxSession session, Mailbox mailbox) {
+return Objects.equals(mailbox.getUser(), 
session.getUser().getUserName());
+}
+
+private boolean isUserNamespace(Mailbox mailbox) {
+return Objects.equals(mailbox.getNamespace(), 
MailboxConstants.USER_NAMESPACE);
+}
+
+private SimpleMailboxMetaData toMailboxMetadata(MailboxSession session, 
List mailboxes, Mailbox mailbox) {
+return new SimpleMailboxMetaData(
+mailbox.generateAssociatedPath(),
+mailbox.getMailboxId(),
+getDelimiter(),
+computeChildren(session, mailboxes, mailbox),
+Selectability.NONE);
+}
+
+private MailboxMetaData.Children computeChildren(MailboxSession session, 
List potentialChildren, Mailbox mailbox) {
+if (hasChildIn(mailbox, potentialChildren, session)) {
+return MailboxMetaData.Children.HAS_CHILDREN;
 } else {
-baseLength = baseName.length();
+return MailboxMetaData.Children.HAS_NO_CHILDREN;
 }
-String combinedName = mailboxExpression.getCombinedName()
-.replace(freeWildcard, SQL_WILDCARD_CHAR)
-.replace(localWildcard, SQL_WILDCARD_CHAR)
-+ SQL_WILDCARD_CHAR;
-MailboxPath 

[22/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Mailbox query should rely on MailboxNameExpression

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Mailbox query should rely on 
MailboxNameExpression


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d1030584
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d1030584
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d1030584

Branch: refs/heads/master
Commit: d10305840f8f20b2e974bde0e66f796b0ff13110
Parents: 0cfb395
Author: benwa 
Authored: Wed Oct 4 13:06:31 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../model/search/MailboxNameExpression.java |  42 +++-
 .../mailbox/model/search/MailboxQuery.java  | 230 ---
 .../james/mailbox/model/search/Wildcard.java|  18 ++
 .../james/mailbox/MailboxManagerTest.java   |  25 +-
 .../mailbox/model/search/MailboxQueryTest.java  | 115 +++---
 .../mailbox/model/search/WildcardTest.java  |  10 +-
 .../inmemory/InMemoryMessageIdManager.java  |  14 +-
 .../InMemoryMessageIdManagerTestSystem.java |   4 +-
 .../InMemoryMessageManagerTestSystem.java   |   5 +-
 .../mailbox/store/StoreMailboxManager.java  |  10 +-
 .../store/AbstractCombinationManagerTest.java   |  12 +-
 .../mailbox/store/StoreMailboxManagerTest.java  |  11 +-
 .../james/imap/processor/LSubProcessor.java |  11 +-
 .../james/imap/processor/ListProcessor.java |   9 +-
 .../apache/james/modules/MailboxProbeImpl.java  |  11 +-
 .../mailbox/MailboxManagerManagement.java   |  12 +-
 .../matchers/AbstractStorageQuota.java  |   7 +-
 .../james/jmap/methods/GetMailboxesMethod.java  |   4 +-
 .../jmap/utils/SystemMailboxesProviderImpl.java |   4 +-
 .../webadmin/service/UserMailboxesService.java  |  16 +-
 20 files changed, 221 insertions(+), 349 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d1030584/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
index 04a26bc..2b9d4c8 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.mailbox.model.search;
 
-interface MailboxNameExpression {
+public interface MailboxNameExpression {
 /**
  * Use this wildcard to match every char including the hierarchy delimiter
  */
@@ -30,9 +30,49 @@ interface MailboxNameExpression {
  */
 char LOCALWILDCARD = '%';
 
+/**
+ * Is the given name a match for this expression?
+ *
+ * @param name
+ *name to be matched
+ * @return true if the given name matches this expression, false otherwise
+ */
 boolean isExpressionMatch(String name);
 
+/**
+ * Get combined name formed by adding the expression to the base using the
+ * given hierarchy delimiter. Note that the wildcards are retained in the
+ * combined name.
+ *
+ * @return {@link #getBase()} combined with {@link #getExpression()},
+ * notnull
+ */
 String getCombinedName();
 
+/**
+ * Is this expression wild?
+ *
+ * @return true if wildcard contained, false otherwise
+ */
 boolean isWild();
+
+/**
+ * Gets wildcard character that matches any series of characters.
+ *
+ * @return the freeWildcard
+ */
+default char getFreeWildcard() {
+return FREEWILDCARD;
+}
+
+/**
+ * Gets wildcard character that matches any series of characters excluding
+ * hierarchy delimiters. Effectively, this means that it matches any
+ * sequence within a name part.
+ *
+ * @return the localWildcard
+ */
+default char getLocalWildcard() {
+return LOCALWILDCARD;
+}
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d1030584/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
index 9d51b78..2afec92 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
@@ -20,8 +20,6 @@
 package org.apache.james.mailbox.model.search;
 
 

[10/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes

2017-10-05 Thread matthieu
http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
new file mode 100644
index 000..03a8351
--- /dev/null
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
@@ -0,0 +1,1058 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  *
+ *   http://www.apache.org/licenses/LICENSE-2.0 *
+ *  *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
+ * KIND, either express or implied.  See the License for the*
+ * specific language governing permissions and limitations  *
+ * under the License.   *
+ /
+
+package org.apache.james.mailbox.model.search;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class PrefixedRegexTest {
+private static final char PATH_DELIMITER = '.';
+private static final String PREFIX = "name";
+private static final String EMPTY_PREFIX = "";
+
+@Test
+public void isWildShouldReturnTrueWhenOnlyFreeWildcard() throws Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenOnlyLocalWildcard() throws Exception 
{
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenFreeWildcardAtBeginning() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*One", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenLocalWildcardAtBeginning() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%One", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenFreeWildcardInMiddle() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A*A", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenLocalWildcardInMiddle() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A%A", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenFreeWildcardAtEnd() throws Exception 
{
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One*", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnTrueWhenLocalWildcardAtEnd() throws 
Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One%", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isTrue();
+}
+
+@Test
+public void isWildShouldReturnFalseWhenEmptyExpression() throws Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "", 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isFalse();
+}
+
+@Test
+public void isWildShouldReturnFalseWhenNullExpression() throws Exception {
+PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, null, 
PATH_DELIMITER);
+
+boolean actual = prefixedRegex.isWild();
+
+assertThat(actual).isFalse();
+}
+
+@Test

[01/27] james-project git commit: MAILBOX-310 MailboxACL should present only users ACL

2017-10-05 Thread matthieu
Repository: james-project
Updated Branches:
  refs/heads/master 10da4351c -> f52eaa62a


MAILBOX-310 MailboxACL should present only users ACL


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/929f31dc
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/929f31dc
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/929f31dc

Branch: refs/heads/master
Commit: 929f31dcb9f24e132c0eba6ec6358e4a3a8ab8ab
Parents: 434e040
Author: Antoine Duprat 
Authored: Fri Sep 29 15:26:38 2017 +0200
Committer: benwa 
Committed: Wed Oct 4 16:29:09 2017 +0700

--
 .../apache/james/mailbox/model/MailboxACL.java  |  6 +++
 .../james/mailbox/model/MailboxACLTest.java | 41 
 2 files changed, 47 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/929f31dc/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
index e414ebc..a38e601 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
@@ -878,4 +878,10 @@ public class MailboxACL {
 return union(new MailboxACL(new Entry(key, mailboxACLRights)));
 }
 
+public Map ofPositiveNameType(NameType nameType) {
+return this.entries.entrySet().stream()
+.filter(entry -> !entry.getKey().isNegative())
+.filter(entry -> entry.getKey().getNameType().equals(nameType))
+.collect(Guavate.entriesToMap());
+}
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/929f31dc/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java
index 7bbb4eb..fccabd0 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java
@@ -30,10 +30,14 @@ import java.util.Properties;
 import org.apache.james.mailbox.exception.UnsupportedRightException;
 import org.apache.james.mailbox.model.MailboxACL.Entry;
 import org.apache.james.mailbox.model.MailboxACL.EntryKey;
+import org.apache.james.mailbox.model.MailboxACL.NameType;
 import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights;
+import org.assertj.core.data.MapEntry;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableMap;
+
 /**
  * @author Peter Palaga
  */
@@ -41,6 +45,7 @@ public class MailboxACLTest {
 
 private static final String USER_1 = "user1";
 private static final String USER_2 = "user2";
+private static final boolean NEGATIVE = true;
 
 private static final String ae = "ae";
 private static final String ik = "ik";
@@ -224,4 +229,40 @@ public class MailboxACLTest {
 .isEqualTo(MailboxACL.EMPTY);
 }
 
+@Test
+public void usersACLShouldReturnEmptyMapWhenEmpty() {
+assertThat(MailboxACL.EMPTY.ofPositiveNameType(NameType.user))
+.isEmpty();
+}
+
+@Test
+public void usersACLShouldReturnEmptyMapWhenNoUserEntry() {
+MailboxACL mailboxACL = new MailboxACL(
+ImmutableMap.of(EntryKey.createGroupEntryKey("group"), 
MailboxACL.FULL_RIGHTS,
+EntryKey.createGroupEntryKey("group2"), 
MailboxACL.NO_RIGHTS));
+assertThat(mailboxACL.ofPositiveNameType(NameType.user))
+.isEmpty();
+}
+
+@Test
+public void usersACLShouldReturnOnlyUsersMapWhenSomeUserEntries() throws 
Exception {
+MailboxACL.Rfc4314Rights rights = 
MailboxACL.Rfc4314Rights.fromSerializedRfc4314Rights("aei");
+MailboxACL mailboxACL = new MailboxACL(
+ImmutableMap.of(EntryKey.createUserEntryKey("user1"), 
MailboxACL.FULL_RIGHTS,
+EntryKey.createGroupEntryKey("group"), MailboxACL.FULL_RIGHTS,
+EntryKey.createUserEntryKey("user2"), rights,
+EntryKey.createGroupEntryKey("group2"), MailboxACL.NO_RIGHTS));
+assertThat(mailboxACL.ofPositiveNameType(NameType.user))
+.containsOnly(
+MapEntry.entry(EntryKey.createUserEntryKey("user1"), 
MailboxACL.FULL_RIGHTS),
+MapEntry.entry(EntryKey.createUserEntryKey("user2"), rights));
+}
+
+@Test
+

[15/27] james-project git commit: MAILBOX-310 Cassandra modseq and uid test don't need mailbox mapper

2017-10-05 Thread matthieu
MAILBOX-310 Cassandra modseq and uid test don't need mailbox mapper


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/36333bad
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/36333bad
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/36333bad

Branch: refs/heads/master
Commit: 36333bad8c1bbfa4694fc8eec2548f339aadf400
Parents: 5de2d00
Author: benwa 
Authored: Tue Oct 3 14:24:08 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../mail/CassandraModSeqProviderTest.java   | 29 +---
 .../mail/CassandraUidProviderTest.java  | 27 +++---
 2 files changed, 11 insertions(+), 45 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/36333bad/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
--
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
index f3d6ed2..c2c0c76 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
@@ -25,11 +25,7 @@ import java.util.stream.LongStream;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
-import org.apache.james.backends.cassandra.init.CassandraConfiguration;
-import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
-import org.apache.james.backends.cassandra.utils.CassandraUtils;
-import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
+import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -41,36 +37,25 @@ import org.junit.Test;
 import com.github.fge.lambdas.Throwing;
 
 public class CassandraModSeqProviderTest {
+private static final CassandraId CASSANDRA_ID = new 
CassandraId.Factory().fromString("e22b3ac0-a80b-11e7-bb00-777268d65503");
 
 @ClassRule public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
 
 private CassandraCluster cassandra;
 
 private CassandraModSeqProvider modSeqProvider;
-private CassandraMailboxMapper mapper;
 private SimpleMailbox mailbox;
 
 @Before
 public void setUp() throws Exception {
-CassandraModuleComposite modules = 
-new CassandraModuleComposite(
-new CassandraAclModule(),
-new CassandraMailboxModule(),
-new CassandraModSeqModule());
-cassandra = CassandraCluster.create(modules, cassandraServer.getIp(), 
cassandraServer.getBindingPort());
+cassandra = CassandraCluster.create(
+new CassandraModSeqModule(),
+cassandraServer.getIp(),
+cassandraServer.getBindingPort());
 modSeqProvider = new CassandraModSeqProvider(cassandra.getConf());
-CassandraMailboxDAO mailboxDAO = new 
CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
-CassandraMailboxPathDAO mailboxPathDAO = new 
CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-CassandraUserMailboxRightsDAO userMailboxRightsDAO = new 
CassandraUserMailboxRightsDAO(cassandra.getConf(), 
CassandraUtils.WITH_DEFAULT_CONFIGURATION);
-mapper = new CassandraMailboxMapper(
-mailboxDAO,
-mailboxPathDAO,
-userMailboxRightsDAO,
-new CassandraACLMapper(cassandra.getConf(), 
CassandraConfiguration.DEFAULT_CONFIGURATION),
-CassandraConfiguration.DEFAULT_CONFIGURATION);
 MailboxPath path = new MailboxPath("gsoc", "ieugen", "Trash");
 mailbox = new SimpleMailbox(path, 1234);
-mapper.save(mailbox);
+mailbox.setMailboxId(CASSANDRA_ID);
 }
 
 @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/36333bad/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
--
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
 

[20/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Reindent isWild

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Reindent isWild


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6501eab1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6501eab1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6501eab1

Branch: refs/heads/master
Commit: 6501eab1045d2f56c7796095f744528b25dc2ec4
Parents: 8faf9a6
Author: benwa 
Authored: Wed Oct 4 10:00:48 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../main/java/org/apache/james/mailbox/model/MailboxQuery.java  | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/6501eab1/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index 6cbbff2..09b12cf 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -275,7 +275,10 @@ public final class MailboxQuery {
  * @return true if wildcard contained, false otherwise
  */
 public boolean isWild() {
-return expression != null && (expression.indexOf(getFreeWildcard()) >= 
0 || expression.indexOf(getLocalWildcard()) >= 0);
+return expression != null
+&& (
+expression.indexOf(getFreeWildcard()) >= 0
+|| expression.indexOf(getLocalWildcard()) >= 0);
 }
 
 /**


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



[05/27] james-project git commit: MAILBOX-310 ACLChanged should represent the diff between two ACLs

2017-10-05 Thread matthieu
MAILBOX-310 ACLChanged should represent the diff between two ACLs


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/31925357
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/31925357
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/31925357

Branch: refs/heads/master
Commit: 31925357c88f1dbaa51970ddbb93d2906f3804c3
Parents: 929f31d
Author: benwa 
Authored: Wed Oct 4 15:12:36 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 09:48:53 2017 +0200

--
 .../mailbox/acl/PositiveUserACLChanged.java |  90 +
 .../mailbox/acl/PositiveUserACLChangedTest.java | 199 +++
 2 files changed, 289 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/31925357/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java
new file mode 100644
index 000..50948a4
--- /dev/null
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java
@@ -0,0 +1,90 @@
+/
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information*
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the*
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *  *
+ *   http://www.apache.org/licenses/LICENSE-2.0 *
+ *  *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY   *
+ * KIND, either express or implied.  See the License for the*
+ * specific language governing permissions and limitations  *
+ * under the License.   *
+ /
+
+package org.apache.james.mailbox.acl;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Stream;
+
+import org.apache.james.mailbox.model.MailboxACL;
+
+public class PositiveUserACLChanged {
+private final MailboxACL oldACL;
+private final MailboxACL newACL;
+
+public PositiveUserACLChanged(MailboxACL oldACL, MailboxACL newACL) {
+this.oldACL = oldACL;
+this.newACL = newACL;
+}
+
+public MailboxACL getOldACL() {
+return oldACL;
+}
+
+public MailboxACL getNewACL() {
+return newACL;
+}
+
+public Stream addedEntries() {
+Map oldEntries = 
oldACL.ofPositiveNameType(MailboxACL.NameType.user);
+
+return newACL.ofPositiveNameType(MailboxACL.NameType.user)
+.entrySet()
+.stream()
+.filter(entry -> !oldEntries.containsKey(entry.getKey()))
+.map(entry -> new MailboxACL.Entry(entry.getKey(), 
entry.getValue()));
+}
+
+public Stream removedEntries() {
+Map newEntries = 
newACL.ofPositiveNameType(MailboxACL.NameType.user);
+
+return oldACL.ofPositiveNameType(MailboxACL.NameType.user)
+.entrySet()
+.stream()
+.filter(entry -> !newEntries.containsKey(entry.getKey()))
+.map(entry -> new MailboxACL.Entry(entry.getKey(), 
entry.getValue()));
+}
+
+public Stream changedEntries() {
+Map oldEntries = 
oldACL.ofPositiveNameType(MailboxACL.NameType.user);
+
+return newACL.ofPositiveNameType(MailboxACL.NameType.user)
+.entrySet()
+.stream()
+.filter(entry -> oldEntries.containsKey(entry.getKey()))
+.map(entry -> new MailboxACL.Entry(entry.getKey(), 
entry.getValue()));
+}
+
+@Override
+public final boolean equals(Object o) {
+if (o instanceof PositiveUserACLChanged) {
+PositiveUserACLChanged positiveUserAclChanged = 
(PositiveUserACLChanged) o;
+
+return Objects.equals(this.oldACL, positiveUserAclChanged.oldACL)
+&& Objects.equals(this.newACL, 

[24/27] james-project git commit: MAILBOX-310 Propose a more explicit wording for MailboxMapper::findMailboxes

2017-10-05 Thread matthieu
MAILBOX-310 Propose a more explicit wording for MailboxMapper::findMailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b44b9bbe
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b44b9bbe
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b44b9bbe

Branch: refs/heads/master
Commit: b44b9bbee11ba75de24eafddba92a872278bc1e0
Parents: d103058
Author: benwa 
Authored: Wed Oct 4 16:03:29 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:39 2017 +0200

--
 .../mailbox/caching/CachingMailboxMapper.java   |  4 ++--
 .../cassandra/mail/CassandraMailboxMapper.java  |  2 +-
 .../mailbox/hbase/mail/HBaseMailboxMapper.java  |  2 +-
 .../mailbox/jcr/mail/JCRMailboxMapper.java  |  2 +-
 .../mailbox/jpa/mail/JPAMailboxMapper.java  |  2 +-
 .../jpa/mail/TransactionalMailboxMapper.java|  4 ++--
 .../maildir/mail/MaildirMailboxMapper.java  |  2 +-
 .../inmemory/mail/InMemoryMailboxMapper.java|  2 +-
 .../mailbox/store/StoreMailboxManager.java  |  2 +-
 .../james/mailbox/store/mail/MailboxMapper.java |  2 +-
 .../store/TestMailboxSessionMapperFactory.java  |  2 +-
 .../store/mail/model/MailboxMapperACLTest.java  | 22 ++--
 12 files changed, 24 insertions(+), 24 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
--
diff --git 
a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
 
b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
index fe67704..c368a75 100644
--- 
a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
+++ 
b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
@@ -122,8 +122,8 @@ public class CachingMailboxMapper implements MailboxMapper {
}
 
 @Override
-public List findMailboxes(String userName, Right right) throws 
MailboxException {
-return underlying.findMailboxes(userName, right);
+public List findNonPersonalMailboxes(String userName, Right 
right) throws MailboxException {
+return underlying.findNonPersonalMailboxes(userName, right);
 }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index 498524b..e8c66fa 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -263,7 +263,7 @@ public class CassandraMailboxMapper implements 
MailboxMapper {
 }
 
 @Override
-public List findMailboxes(String userName, Right right) throws 
MailboxException {
+public List findNonPersonalMailboxes(String userName, Right 
right) throws MailboxException {
 return 
FluentFutureStream.of(userMailboxRightsDAO.listRightsForUser(userName)
 .thenApply(map -> toAuthorizedMailboxIds(map, right)))
 .thenFlatComposeOnOptional(this::retrieveMailbox)

http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
--
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
index bbf46b8..ec2e0bc 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
@@ -427,7 +427,7 @@ public class HBaseMailboxMapper extends 
HBaseNonTransactionalMapper implements M
 }
 
 @Override
-public List findMailboxes(String userName, Right right) throws 
MailboxException {
+public List findNonPersonalMailboxes(String userName, Right 
right) throws MailboxException {
 return ImmutableList.of();
 }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java

[18/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Reorder fields. Fields should come after static definitions

2017-10-05 Thread matthieu
MAILBOX-310 Mailbox query refactoring: Reorder fields. Fields should come after 
static definitions


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6607c699
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6607c699
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6607c699

Branch: refs/heads/master
Commit: 6607c6992a7341976cf7f586f572476c52c07c2e
Parents: 1f37e3c
Author: benwa 
Authored: Wed Oct 4 09:47:12 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:38 2017 +0200

--
 .../org/apache/james/mailbox/model/MailboxQuery.java  | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/6607c699/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index 49db850..7332ec1 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -46,13 +46,6 @@ public final class MailboxQuery {
 
 private static final String EMPTY_PATH_NAME = "";
 
-private final String expression;
-private final char pathDelimiter;
-private final Pattern pattern;
-private final Optional namespace;
-private final Optional user;
-private final Optional baseName;
-
 public static Builder builder() {
 return new Builder();
 }
@@ -117,6 +110,13 @@ public final class MailboxQuery {
 }
 }
 
+private final String expression;
+private final char pathDelimiter;
+private final Pattern pattern;
+private final Optional namespace;
+private final Optional user;
+private final Optional baseName;
+
 /**
  * Constructs an expression determining a set of mailbox names.
  * 


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



[07/27] james-project git commit: MAILBOX-310 MailboxManager::search should allow retrieving delegated mailboxes

2017-10-05 Thread matthieu
MAILBOX-310 MailboxManager::search should allow retrieving delegated mailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d26baea3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d26baea3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d26baea3

Branch: refs/heads/master
Commit: d26baea3b715ff028c2c8d9bf17fcf840037c4a7
Parents: 2650028
Author: benwa 
Authored: Tue Oct 3 18:26:47 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:37 2017 +0200

--
 .../james/mailbox/model/MailboxQuery.java   |  6 ++
 .../james/mailbox/MailboxManagerTest.java   | 82 +++-
 .../mailbox/store/StoreMailboxManager.java  | 15 +++-
 3 files changed, 100 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d26baea3/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
index 5153ffa..a812206 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java
@@ -146,6 +146,12 @@ public final class MailboxQuery {
 pattern = constructEscapedRegex();
 }
 
+public boolean isPrivateMailboxes(MailboxSession session) {
+MailboxSession.User sessionUser = session.getUser();
+return 
namespace.map(MailboxConstants.USER_NAMESPACE::equals).orElse(false)
+&& user.map(sessionUser::isSameUser).orElse(false);
+}
+
 public MailboxPath getPathLike() {
 String combinedName = getCombinedName()
 .replace(getFreeWildcard(), SQL_WILDCARD_CHAR)

http://git-wip-us.apache.org/repos/asf/james-project/blob/d26baea3/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 93282df..66ff86c 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.exception.AnnotationException;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxManager;
+import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxId;
@@ -436,4 +437,83 @@ public abstract class MailboxManagerTest {
 builder.add(MailboxAnnotation.newInstance(new 
MailboxAnnotationKey("/private/comment4"), "AnyValue"));
 
 mailboxManager.updateAnnotations(inbox, session, builder.build());
-}}
+}
+
+@Test
+public void searchShouldIncludeDelegatedMailboxes() throws 
MailboxException {
+
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.RightSearch));
+MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
+MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
+MailboxPath inbox1 = MailboxPath.inbox(session1);
+mailboxManager.createMailbox(inbox1, session1);
+mailboxManager.setRights(inbox1,
+MailboxACL.EMPTY.apply(MailboxACL.command()
+.forUser(USER_2)
+.rights(MailboxACL.Right.Read)
+.asAddition()),
+session1);
+
+MailboxQuery mailboxQuery = MailboxQuery.builder()
+.mailboxSession(session2)
+.matchesAll()
+.build();
+
+assertThat(mailboxManager.search(mailboxQuery, session2))
+.extracting(MailboxMetaData::getPath)
+.containsOnly(inbox1);
+}
+
+@Test
+public void searchShouldCombinePrivateAndDelegatedMailboxes() throws 
MailboxException {
+
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL));
+MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
+MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
+MailboxPath inbox1 = MailboxPath.inbox(session1);
+MailboxPath inbox2 = MailboxPath.inbox(session2);
+mailboxManager.createMailbox(inbox1, 

[27/27] james-project git commit: MAILBOX-310 Adding additional tests demonstrating per username/namespace search filtering on the manager layer

2017-10-05 Thread matthieu
MAILBOX-310 Adding additional tests demonstrating per username/namespace search 
filtering on the manager layer


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/93aac90e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/93aac90e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/93aac90e

Branch: refs/heads/master
Commit: 93aac90e3173bbc08f7e84106a1450838368b81b
Parents: 636e5a4
Author: benwa 
Authored: Thu Oct 5 09:54:26 2017 +0700
Committer: Matthieu Baechler 
Committed: Thu Oct 5 20:00:39 2017 +0200

--
 .../james/mailbox/MailboxManagerTest.java   | 59 
 1 file changed, 59 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/93aac90e/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index f04cfa5..7568ea7 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -484,6 +484,65 @@ public abstract class MailboxManagerTest {
 }
 
 @Test
+public void searchShouldAllowUserFiltering() throws MailboxException {
+
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL));
+MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
+MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
+MailboxPath inbox1 = MailboxPath.inbox(session1);
+MailboxPath inbox2 = MailboxPath.inbox(session2);
+mailboxManager.createMailbox(inbox1, session1);
+mailboxManager.createMailbox(inbox2, session2);
+mailboxManager.setRights(inbox1,
+MailboxACL.EMPTY.apply(MailboxACL.command()
+.forUser(USER_2)
+.rights(MailboxACL.Right.Read)
+.asAddition()),
+session1);
+
+MailboxQuery mailboxQuery = MailboxQuery.builder()
+.username(USER_1)
+.matchesAllMailboxNames()
+.build();
+
+assertThat(mailboxManager.search(mailboxQuery, session2))
+.extracting(MailboxMetaData::getPath)
+.containsOnly(inbox1);
+}
+
+@Test
+public void searchShouldAllowNamespaceFiltering() throws MailboxException {
+
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL));
+MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
+MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
+MailboxPath inbox1 = MailboxPath.inbox(session1);
+String specificNamespace = "specificNamespace";
+MailboxPath mailboxPath1 = new MailboxPath(specificNamespace, USER_1, 
"mailbox");
+mailboxManager.createMailbox(inbox1, session1);
+mailboxManager.createMailbox(mailboxPath1, session1);
+mailboxManager.setRights(inbox1,
+MailboxACL.EMPTY.apply(MailboxACL.command()
+.forUser(USER_2)
+.rights(MailboxACL.Right.Read)
+.asAddition()),
+session1);
+mailboxManager.setRights(mailboxPath1,
+MailboxACL.EMPTY.apply(MailboxACL.command()
+.forUser(USER_2)
+.rights(MailboxACL.Right.Read)
+.asAddition()),
+session1);
+
+MailboxQuery mailboxQuery = MailboxQuery.builder()
+.namespace(specificNamespace)
+.matchesAllMailboxNames()
+.build();
+
+assertThat(mailboxManager.search(mailboxQuery, session2))
+.extracting(MailboxMetaData::getPath)
+.containsOnly(mailboxPath1);
+}
+
+@Test
 public void searchShouldNotReturnNoMoreDelegatedMailboxes() throws 
MailboxException {
 
Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL));
 MailboxSession session1 = mailboxManager.createSystemSession(USER_1);


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