You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by er...@apache.org on 2015/06/02 10:11:56 UTC

svn commit: r1683057 - in /james/mailbox/trunk: api/src/test/java/org/apache/james/mailbox/ memory/ memory/src/main/java/org/apache/james/mailbox/inmemory/mail/ memory/src/test/java/org/apache/james/mailbox/inmemory/ store/src/main/java/org/apache/jame...

Author: eric
Date: Tue Jun  2 08:11:56 2015
New Revision: 1683057

URL: http://svn.apache.org/r1683057
Log:
MailboxQuery ignore namespace, patch contributed by Benoit Tellier (MAILBOX-11)

Modified:
    james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/AbstractMailboxManagerTest.java
    james/mailbox/trunk/memory/pom.xml
    james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
    james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
    james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java

Modified: james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/AbstractMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/AbstractMailboxManagerTest.java?rev=1683057&r1=1683056&r2=1683057&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/AbstractMailboxManagerTest.java (original)
+++ james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/AbstractMailboxManagerTest.java Tue Jun  2 08:11:56 2015
@@ -45,8 +45,8 @@ import org.slf4j.LoggerFactory;
  */
 public abstract class AbstractMailboxManagerTest {
     
-    private final static String USER_1 = "USER_1";
-    private final static String USER_2 = "USER_2";
+    public final static String USER_1 = "USER_1";
+    public final static String USER_2 = "USER_2";
 
     /**
      * The mailboxManager that needs to get instanciated

Modified: james/mailbox/trunk/memory/pom.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/pom.xml?rev=1683057&r1=1683056&r2=1683057&view=diff
==============================================================================
--- james/mailbox/trunk/memory/pom.xml (original)
+++ james/mailbox/trunk/memory/pom.xml Tue Jun  2 08:11:56 2015
@@ -70,5 +70,10 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>

Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java?rev=1683057&r1=1683056&r2=1683057&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java (original)
+++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java Tue Jun  2 08:11:56 2015
@@ -79,13 +79,19 @@ public class InMemoryMailboxMapper imple
         final String regex = path.getName().replace("%", ".*");
         List<Mailbox<Long>> results = new ArrayList<Mailbox<Long>>();
         for (final Mailbox<Long> mailbox:mailboxesById.values()) {
-            if (mailbox.getName().matches(regex)) {
+            if (mailboxMatchesRegex(mailbox, path, regex)) {
                 results.add(mailbox);
             }
         }
         return results;
     }
 
+    private boolean mailboxMatchesRegex(Mailbox<Long> mailbox, MailboxPath path, String regex) {
+        return mailbox.getNamespace().equals(path.getNamespace())
+            && mailbox.getUser().equals(path.getUser())
+            && mailbox.getName().matches(regex);
+    }
+
     /**
      * @see org.apache.james.mailbox.store.mail.MailboxMapper#save(org.apache.james.mailbox.store.mail.model.Mailbox)
      */

Modified: james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java?rev=1683057&r1=1683056&r2=1683057&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java (original)
+++ james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java Tue Jun  2 08:11:56 2015
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.james.mailbox.AbstractMailboxManagerTest;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
@@ -26,17 +28,25 @@ import org.apache.james.mailbox.acl.Simp
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
+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.store.MockAuthenticator;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
+import java.util.List;
+
 /**
  * InMemoryMailboxManagerTest that extends the MailboxManagerTest.
  */
 public class InMemoryMailboxManagerTest extends AbstractMailboxManagerTest {
-    
+
+    private MailboxSession session;
+
     /**
      * Setup the mailboxManager.
      * 
@@ -45,6 +55,9 @@ public class InMemoryMailboxManagerTest
     @Before
     public void setup() throws Exception {
         createMailboxManager();
+
+        session = getMailboxManager().createSystemSession(USER_1, LoggerFactory.getLogger("Test"));
+        getMailboxManager().startProcessingRequest(session);
     }
     
     /**
@@ -55,8 +68,9 @@ public class InMemoryMailboxManagerTest
      */
     @After
     public void tearDown() throws BadCredentialsException, MailboxException {
-        MailboxSession session = getMailboxManager().createSystemSession("test", LoggerFactory.getLogger("Test"));
-        session.close();
+        getMailboxManager().logout(session, true);
+        getMailboxManager().endProcessingRequest(session);
+        getMailboxManager().createSystemSession("test", LoggerFactory.getLogger("Test")).close();
     }
 
     /* (non-Javadoc)
@@ -75,5 +89,23 @@ public class InMemoryMailboxManagerTest
         setMailboxManager(mailboxManager);
 
     }
+
+    @Test
+    public void searchShouldNotReturnResultsFromOtherNamespaces() throws Exception {
+        getMailboxManager().createMailbox(new MailboxPath("#namespace", USER_1, "Other"), session);
+        getMailboxManager().createMailbox(MailboxPath.inbox(session), session);
+        List<MailboxMetaData> metaDatas = getMailboxManager().search(new MailboxQuery(new MailboxPath("#private", USER_1, ""), "*", '.'), session);
+        assertThat(metaDatas).hasSize(1);
+        assertThat(metaDatas.get(0).getPath()).isEqualTo(MailboxPath.inbox(session));
+    }
+
+    @Test
+    public void searchShouldNotReturnResultsFromOtherUsers() throws Exception {
+        getMailboxManager().createMailbox(new MailboxPath("#namespace", USER_2, "Other"), session);
+        getMailboxManager().createMailbox(MailboxPath.inbox(session), session);
+        List<MailboxMetaData> metaDatas = getMailboxManager().search(new MailboxQuery(new MailboxPath("#private", USER_1, ""), "*", '.'), session);
+        assertThat(metaDatas).hasSize(1);
+        assertThat(metaDatas.get(0).getPath()).isEqualTo(MailboxPath.inbox(session));
+    }
     
 }

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1683057&r1=1683056&r2=1683057&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java Tue Jun  2 08:11:56 2015
@@ -512,17 +512,19 @@ public class StoreMailboxManager<Id> imp
         final List<MailboxMetaData> results = new ArrayList<MailboxMetaData>(mailboxes.size());
         for (Mailbox<Id> mailbox : mailboxes) {
             final String name = mailbox.getName();
-            if (name.startsWith(baseName)) {
-                final String match = name.substring(baseLength);
-                if (mailboxExpression.isExpressionMatch(match)) {
-                    final MailboxMetaData.Children inferiors;
-                    if (mapper.hasChildren(mailbox, session.getPathDelimiter())) {
-                        inferiors = MailboxMetaData.Children.HAS_CHILDREN;
-                    } else {
-                        inferiors = MailboxMetaData.Children.HAS_NO_CHILDREN;
+            if(belongsToNamespaceAndUser(mailboxExpression.getBase(), mailbox)) {
+                if (name.startsWith(baseName)) {
+                    final String match = name.substring(baseLength);
+                    if (mailboxExpression.isExpressionMatch(match)) {
+                        final MailboxMetaData.Children inferiors;
+                        if (mapper.hasChildren(mailbox, session.getPathDelimiter())) {
+                            inferiors = MailboxMetaData.Children.HAS_CHILDREN;
+                        } else {
+                            inferiors = MailboxMetaData.Children.HAS_NO_CHILDREN;
+                        }
+                        MailboxPath mailboxPath = new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), name);
+                        results.add(new SimpleMailboxMetaData(mailboxPath, getDelimiter(), inferiors, Selectability.NONE));
                     }
-                    MailboxPath mailboxPath = new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), name);
-                    results.add(new SimpleMailboxMetaData(mailboxPath, getDelimiter(), inferiors, Selectability.NONE));
                 }
             }
         }
@@ -530,6 +532,15 @@ public class StoreMailboxManager<Id> imp
         return results;
     }
 
+    public boolean belongsToNamespaceAndUser(MailboxPath base, Mailbox<Id> mailbox) {
+        if (mailbox.getUser() == null) {
+            return  base.getUser() == null
+                && mailbox.getNamespace().equals(base.getNamespace());
+        }
+        return mailbox.getNamespace().equals(base.getNamespace())
+            && mailbox.getUser().equals(base.getUser());
+    }
+
     @Override
     public boolean mailboxExists(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
         try {



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