Author: norman
Date: Wed Jan 12 08:10:12 2011
New Revision: 1058016

URL: http://svn.apache.org/viewvc?rev=1058016&view=rev
Log:
Remove the hard-code delimiter / seperator for mailboxes. Thx to Wojtek 
Strzalka for providing the patch. See MAILBOX-25

Modified:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxConstants.java
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxQuery.java
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java
    
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java
    
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
    
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
    
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
    
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
    
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
    
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
    
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
    
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxConstants.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxConstants.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxConstants.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxConstants.java
 Wed Jan 12 08:10:12 2011
@@ -32,11 +32,6 @@ public interface MailboxConstants {
     public static final char DEFAULT_DELIMITER = '.';
 
     /**
-     * The default delimiter used to seperated parent/child folders
-     */
-    public static final String DEFAULT_DELIMITER_STRING = ".";
-
-    /**
      * The name of the INBOX
      */
     public static final String INBOX = "INBOX";

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java
 Wed Jan 12 08:10:12 2011
@@ -73,7 +73,7 @@ public interface MailboxMetaData {
      * 
      * @return delimiter
      */
-    String getHierarchyDelimiter();
+    char getHierarchyDelimiter();
 
     /**
      * Return the MailboxPath 

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxQuery.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxQuery.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxQuery.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxQuery.java
 Wed Jan 12 08:10:12 2011
@@ -35,6 +35,7 @@ public class MailboxQuery {
 
     private final int expressionLength;
 
+    private final char pathDelimiter;
     /**
      * Constructs an expression determining a set of mailbox names.
      * 
@@ -49,7 +50,7 @@ public class MailboxQuery {
      *            delimiter
      */
     public MailboxQuery(final MailboxPath base, final String expression,
-            final char freeWildcard, final char localWildcard) {
+            final char freeWildcard, final char localWildcard, final char 
pathDelimiter) {
         super();
         this.base = base;
         if (base.getName() == null)
@@ -62,6 +63,7 @@ public class MailboxQuery {
         expressionLength = this.expression.length();
         this.freeWildcard = freeWildcard;
         this.localWildcard = localWildcard;
+        this.pathDelimiter = pathDelimiter;
     }
 
     /**
@@ -173,7 +175,7 @@ public class MailboxQuery {
                     if (expressionNext == tasteNextName) {
                         matchRest = isLocalWildcardMatch(name, i + 1, 
expressionIndex + 1);
                         break;
-                    } else if (tasteNextName == 
MailboxConstants.DEFAULT_DELIMITER) {
+                    } else if (tasteNextName == pathDelimiter) {
                         matchRest = false;
                         break;
                     }
@@ -184,7 +186,7 @@ public class MailboxQuery {
             boolean containsDelimiter = false;
             for (int i = nameIndex; i < name.length(); i++) {
                 final char nextRemaining = name.charAt(i);
-                if (nextRemaining == MailboxConstants.DEFAULT_DELIMITER) {
+                if (nextRemaining == pathDelimiter) {
                     containsDelimiter = true;
                     break;
                 }
@@ -237,9 +239,9 @@ public class MailboxQuery {
         final String result;
         if (base != null && base.getName() != null && base.getName().length() 
> 0) {
             final int baseLength = base.getName().length();
-            if (base.getName().charAt(baseLength - 1) == 
MailboxConstants.DEFAULT_DELIMITER) {
+            if (base.getName().charAt(baseLength - 1) == pathDelimiter) {
                 if (expression != null && expression.length() > 0) {
-                    if (expression.charAt(0) == 
MailboxConstants.DEFAULT_DELIMITER) {
+                    if (expression.charAt(0) == pathDelimiter) {
                         result = base.getName() + expression.substring(1);
                     } else {
                         result = base.getName() + expression;
@@ -249,10 +251,10 @@ public class MailboxQuery {
                 }
             } else {
                 if (expression != null && expression.length() > 0) {
-                    if (expression.charAt(0) == 
MailboxConstants.DEFAULT_DELIMITER) {
+                    if (expression.charAt(0) == pathDelimiter) {
                         result = base.getName() + expression;
                     } else {
-                        result = base.getName() + 
MailboxConstants.DEFAULT_DELIMITER + expression;
+                        result = base.getName() + pathDelimiter + expression;
                     }
                 } else {
                     result = base.getName();

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
 Wed Jan 12 08:10:12 2011
@@ -126,5 +126,9 @@ public interface MailboxSession {
      */
     public Map<Object,Object> getAttributes();
     
-    
+    /**
+     * Return server side, folder path separator
+     * @return path separator
+     */
+    public char getPathDelimiter();
 }

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java
 Wed Jan 12 08:10:12 2011
@@ -25,23 +25,24 @@ import org.apache.james.mailbox.Standard
 
 public class SimpleMailboxMetaData implements MailboxMetaData, 
Comparable<MailboxMetaData> {
 
-    public static MailboxMetaData createNoSelect(MailboxPath path, String 
delimiter) {
+    public static MailboxMetaData createNoSelect(MailboxPath path, char 
delimiter) {
         return new SimpleMailboxMetaData(path, delimiter, 
Children.CHILDREN_ALLOWED_BUT_UNKNOWN, Selectability.NOSELECT);
     }
 
     private final MailboxPath path;
 
-    private final String delimiter;
+    private final char delimiter;
 
     private final Children inferiors;
 
     private final Selectability selectability;
 
-    public SimpleMailboxMetaData(MailboxPath path, String delimiter) {
+    public SimpleMailboxMetaData(MailboxPath path, char delimiter) {
         this(path, delimiter, Children.CHILDREN_ALLOWED_BUT_UNKNOWN, 
Selectability.NONE);
     }
 
-    public SimpleMailboxMetaData(final MailboxPath path, final String 
delimiter,
+    
+    public SimpleMailboxMetaData(final MailboxPath path, final char delimiter,
             final Children inferiors, final Selectability selectability) {
         super();
         this.path = path;
@@ -50,7 +51,7 @@ public class SimpleMailboxMetaData imple
         this.selectability = selectability;
     }
 
-    /**
+       /**
      * Is this mailbox <code>\Noinferiors</code> as per RFC3501.
      * 
      * @return true if marked, false otherwise
@@ -70,7 +71,7 @@ public class SimpleMailboxMetaData imple
      * (non-Javadoc)
      * @see org.apache.james.mailbox.MailboxMetaData#getHierarchyDelimiter()
      */
-    public String getHierarchyDelimiter() {
+    public char getHierarchyDelimiter() {
         return delimiter;
     }
 

Modified: 
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java
 (original)
+++ 
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java
 Wed Jan 12 08:10:12 2011
@@ -36,7 +36,7 @@ public class MailboxExpressionTest {
 
 
     private MailboxQuery create(String expression) {
-        return new MailboxQuery(BASE_PATH, expression, '*', '%');
+        return new MailboxQuery(BASE_PATH, expression, '*', '%', '.');
     }
 
     @Test
@@ -56,13 +56,13 @@ public class MailboxExpressionTest {
 
     @Test
     public void testCombinedNameEmptyPart() throws Exception {
-        MailboxQuery expression = new MailboxQuery(BASE_PATH, "", '*', '%');
+        MailboxQuery expression = new MailboxQuery(BASE_PATH, "", '*', '%', 
'.');
         assertEquals(BASE, expression.getCombinedName());
     }
 
     @Test
     public void testNullCombinedName() throws Exception {
-        MailboxQuery expression = new MailboxQuery(new MailboxPath(null, null, 
null), null, '*', '%');
+        MailboxQuery expression = new MailboxQuery(new MailboxPath(null, null, 
null), null, '*', '%', '.');
         assertNotNull(expression.getCombinedName());
     }
 
@@ -80,14 +80,14 @@ public class MailboxExpressionTest {
 
     @Test
     public void testCombinedNameBaseEndsWithDelimiter() throws Exception {
-        MailboxQuery expression = new MailboxQuery(new MailboxPath(null, null, 
BASE + '.'), PART, '*', '%');
+        MailboxQuery expression = new MailboxQuery(new MailboxPath(null, null, 
BASE + '.'), PART, '*', '%', '.');
         assertEquals(BASE + "." + PART, expression.getCombinedName());
     }
 
     @Test
     public void testCombinedNameBaseEndsWithDelimiterPartStarts()
             throws Exception {
-        MailboxQuery expression = new MailboxQuery(new MailboxPath(null, null, 
BASE + '.'), '.' + PART, '*', '%');
+        MailboxQuery expression = new MailboxQuery(new MailboxPath(null, null, 
BASE + '.'), '.' + PART, '*', '%', '.');
         assertEquals(BASE + "." + PART, expression.getCombinedName());
     }
 

Modified: 
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
 (original)
+++ 
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
 Wed Jan 12 08:10:12 2011
@@ -28,6 +28,7 @@ import java.util.Random;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.james.mailbox.MailboxConstants;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSession.User;
 
@@ -94,4 +95,8 @@ public class MockMailboxSession implemen
         return close == false;
     }
 
+       public char getPathDelimiter() {
+               return '.';
+       }
+
 }

Modified: 
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
 (original)
+++ 
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
 Wed Jan 12 08:10:12 2011
@@ -34,7 +34,6 @@ import org.apache.jackrabbit.JcrConstant
 import org.apache.jackrabbit.commons.JcrUtils;
 import org.apache.jackrabbit.util.ISO9075;
 import org.apache.jackrabbit.util.Text;
-import org.apache.james.mailbox.MailboxConstants;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxNotFoundException;
 import org.apache.james.mailbox.MailboxPath;
@@ -189,7 +188,7 @@ public class JCRMailboxMapper extends Ab
      * @see 
org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(org.apache.james.
      * imap.store.mail.model.Mailbox)
      */
-    public boolean hasChildren(Mailbox<String> mailbox)
+    public boolean hasChildren(Mailbox<String> mailbox, char delimiter)
             throws MailboxException, MailboxNotFoundException {
         try {
             String name = 
Text.escapeIllegalXpathSearchChars(mailbox.getName());
@@ -204,7 +203,7 @@ public class JCRMailboxMapper extends Ab
                     .getQueryManager();
             String queryString = "/jcr:root/" + MAILBOXES_PATH + "/" + 
ISO9075.encodePath(mailbox.getNamespace()) 
                     + "//element(*,jamesMailbox:mailbox)[jcr:like(@"
-                    + JCRMailbox.NAME_PROPERTY + ",'" + name + 
MailboxConstants.DEFAULT_DELIMITER_STRING + "%') and @" + 
JCRMailbox.NAMESPACE_PROPERTY +"='" + namespace + "' and @" + 
JCRMailbox.USER_PROPERTY + "='" + user + "']";
+                    + JCRMailbox.NAME_PROPERTY + ",'" + name + delimiter + 
"%') and @" + JCRMailbox.NAMESPACE_PROPERTY +"='" + namespace + "' and @" + 
JCRMailbox.USER_PROPERTY + "='" + user + "']";
             QueryResult result = manager.createQuery(queryString, Query.XPATH)
                     .execute();
             NodeIterator it = result.getNodes();

Modified: 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
 (original)
+++ 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
 Wed Jan 12 08:10:12 2011
@@ -21,7 +21,6 @@ package org.apache.james.mailbox.jpa;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
-import org.apache.james.mailbox.MailboxConstants;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper;
 import org.apache.james.mailbox.jpa.mail.JPAMessageMapper;
@@ -38,21 +37,15 @@ import org.apache.james.mailbox.store.us
 public class JPAMailboxSessionMapperFactory extends 
MailboxSessionMapperFactory<Long> {
 
     private final EntityManagerFactory entityManagerFactory;
-    private final char delimiter;
 
     public JPAMailboxSessionMapperFactory(EntityManagerFactory 
entityManagerFactory) {
-        this(entityManagerFactory, MailboxConstants.DEFAULT_DELIMITER);
-    }
-
-    public JPAMailboxSessionMapperFactory(EntityManagerFactory 
entityManagerFactory, char delimiter) {
         this.entityManagerFactory = entityManagerFactory;
-        this.delimiter = delimiter;
         createEntityManager().close();
     }
     
     @Override
     public MailboxMapper<Long> createMailboxMapper(MailboxSession session) {
-        return new JPAMailboxMapper(entityManagerFactory, delimiter);
+        return new JPAMailboxMapper(entityManagerFactory);
     }
 
     @Override

Modified: 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
 (original)
+++ 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
 Wed Jan 12 08:10:12 2011
@@ -42,12 +42,10 @@ import org.apache.james.mailbox.store.ma
 public class JPAMailboxMapper extends JPATransactionalMapper implements 
MailboxMapper<Long> {
 
     private static final char SQL_WILDCARD_CHAR = '%';
-    private final char delimiter;
     private String lastMailboxName;
     
-    public JPAMailboxMapper(EntityManagerFactory entityManagerFactory, char 
delimiter) {
+    public JPAMailboxMapper(EntityManagerFactory entityManagerFactory) {
         super(entityManagerFactory);
-        this.delimiter = delimiter;
     }
 
     /**
@@ -141,7 +139,7 @@ public class JPAMailboxMapper extends JP
     /**
      * @see 
org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(java.lang.String)
      */
-    public boolean hasChildren(Mailbox<Long> mailbox) throws MailboxException,
+    public boolean hasChildren(Mailbox<Long> mailbox, char delimiter) throws 
MailboxException,
             MailboxNotFoundException {
         final String name = mailbox.getName() + delimiter + SQL_WILDCARD_CHAR; 
         final Long numberOfChildMailboxes;
@@ -153,7 +151,7 @@ public class JPAMailboxMapper extends JP
         return numberOfChildMailboxes != null && numberOfChildMailboxes > 0;
     }
 
-    /*
+       /*
      * (non-Javadoc)
      * @see org.apache.james.mailbox.store.mail.MailboxMapper#list()
      */

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
 Wed Jan 12 08:10:12 2011
@@ -114,7 +114,7 @@ public class MaildirMailboxMapper extend
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(org.apache.james.mailbox.store.mail.model.Mailbox)
      */
-    public boolean hasChildren(Mailbox<Integer> mailbox) throws 
MailboxException, MailboxNotFoundException {
+    public boolean hasChildren(Mailbox<Integer> mailbox, char delimiter) 
throws MailboxException, MailboxNotFoundException {
         String searchString = mailbox.getName() + 
MaildirStore.maildirDelimiter + MaildirStore.WILDCARD;
         List<Mailbox<Integer>> mailboxes = findMailboxWithPathLike(
                 new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), 
searchString));

Modified: 
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
 (original)
+++ 
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
 Wed Jan 12 08:10:12 2011
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory;
 
-import org.apache.james.mailbox.MailboxConstants;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SubscriptionException;
@@ -36,16 +35,12 @@ public class InMemoryMailboxSessionMappe
     private MessageMapper<Long> messageMapper;
     private SubscriptionMapper subscriptionMapper;
     
-    public InMemoryMailboxSessionMapperFactory(char delimiter) {
-        mailboxMapper = new InMemoryMailboxMapper(delimiter);
+    public InMemoryMailboxSessionMapperFactory() {
+        mailboxMapper = new InMemoryMailboxMapper();
         messageMapper = new InMemoryMessageMapper();
         subscriptionMapper = new InMemorySubscriptionMapper();
     }
     
-    public InMemoryMailboxSessionMapperFactory() {
-        this(MailboxConstants.DEFAULT_DELIMITER);
-    }
-
     @Override
     public MailboxMapper<Long> createMailboxMapper(MailboxSession session) 
throws MailboxException {
         return mailboxMapper;

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=1058016&r1=1058015&r2=1058016&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
 Wed Jan 12 08:10:12 2011
@@ -35,11 +35,9 @@ public class InMemoryMailboxMapper exten
     
     private static final int INITIAL_SIZE = 128;
     private final Map<Long, InMemoryMailbox> mailboxesById;
-    private final char delimiter;
 
-    public InMemoryMailboxMapper(char delimiter) {
+    public InMemoryMailboxMapper() {
         mailboxesById = new ConcurrentHashMap<Long, 
InMemoryMailbox>(INITIAL_SIZE);
-        this.delimiter = delimiter;
     }
 
     /*
@@ -108,7 +106,7 @@ public class InMemoryMailboxMapper exten
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(org.apache.james.mailbox.store.mail.model.Mailbox)
      */
-    public boolean hasChildren(Mailbox<Long> mailbox) throws MailboxException,
+    public boolean hasChildren(Mailbox<Long> mailbox, char delimiter) throws 
MailboxException,
             MailboxNotFoundException {
         String mailboxName = mailbox.getName() + delimiter;
         for (final InMemoryMailbox box:mailboxesById.values()) {

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
 Wed Jan 12 08:10:12 2011
@@ -54,14 +54,16 @@ public class SimpleMailboxSession implem
     private final List<Locale> localePreferences;
 
     private final Map<Object, Object> attributes;
+    
+    private final char pathSeparator;
 
     public SimpleMailboxSession(final long sessionId, final String userName, 
final String password,
-            final Log log, final List<Locale> localePreferences) {
-        this(sessionId, userName, password, log, localePreferences, new 
ArrayList<String>(), null);
+            final Log log, final List<Locale> localePreferences, char 
pathSeparator) {
+        this(sessionId, userName, password, log, localePreferences, new 
ArrayList<String>(), null, pathSeparator);
     }
 
     public SimpleMailboxSession(final long sessionId, final String userName, 
final String password,
-            final Log log, final List<Locale> localePreferences, List<String> 
sharedSpaces, String otherUsersSpace) {
+            final Log log, final List<Locale> localePreferences, List<String> 
sharedSpaces, String otherUsersSpace, char pathSeparator) {
         this.sessionId = sessionId;
         this.log = log;
         this.userName = userName;
@@ -77,6 +79,7 @@ public class SimpleMailboxSession implem
 
         this.localePreferences = localePreferences;
         this.attributes = new HashMap<Object, Object>();
+        this.pathSeparator = pathSeparator;
     }
     
     /*
@@ -186,4 +189,11 @@ public class SimpleMailboxSession implem
         return password;
     }
 
+    /**
+     * @see org.apache.james.mailbox.MailboxSession#getPathDelimiter()
+     */
+       public char getPathDelimiter() {
+               return pathSeparator;
+       }
+
 }

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=1058016&r1=1058015&r2=1058016&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
 Wed Jan 12 08:10:12 2011
@@ -147,8 +147,8 @@ public abstract class StoreMailboxManage
      * @param log
      * @return session
      */
-    private SimpleMailboxSession createSession(String userName, String 
password, Log log) {
-        return new SimpleMailboxSession(randomId(), userName, password, log, 
new ArrayList<Locale>());
+    private MailboxSession createSession(String userName, String password, Log 
log) {
+        return new SimpleMailboxSession(randomId(), userName, password, log, 
new ArrayList<Locale>(), getDelimiter());
     }
 
     /**
@@ -164,7 +164,7 @@ public abstract class StoreMailboxManage
      * (non-Javadoc)
      * @see org.apache.james.mailbox.MailboxManager#getDelimiter()
      */
-    public final char getDelimiter() {
+    public char getDelimiter() {
         return MailboxConstants.DEFAULT_DELIMITER;
     }
 
@@ -250,14 +250,14 @@ public abstract class StoreMailboxManage
         if (length == 0) {
             getLog().warn("Ignoring mailbox with empty name");
         } else {
-            if (mailboxPath.getName().charAt(length - 1) == 
MailboxConstants.DEFAULT_DELIMITER)
+            if (mailboxPath.getName().charAt(length - 1) == getDelimiter())
                 mailboxPath.setName(mailboxPath.getName().substring(0, length 
- 1));
             if (mailboxExists(mailboxPath, mailboxSession))
                 throw new MailboxExistsException(mailboxPath.toString());
             // Create parents first
             // If any creation fails then the mailbox will not be created
             // TODO: transaction
-            for (final MailboxPath mailbox : 
mailboxPath.getHierarchyLevels(MailboxConstants.DEFAULT_DELIMITER))
+            for (final MailboxPath mailbox : 
mailboxPath.getHierarchyLevels(getDelimiter()))
 
                 locker.executeWithLock(mailboxSession, mailbox, new 
LockAwareExecution() {
 
@@ -332,7 +332,7 @@ public abstract class StoreMailboxManage
                 dispatcher.mailboxRenamed(from, to, session.getSessionId());
 
                 // rename submailboxes
-                final MailboxPath children = new 
MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + 
MailboxConstants.DEFAULT_DELIMITER + "%");
+                final MailboxPath children = new 
MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + 
getDelimiter() + "%");
                 locker.executeWithLock(session, children, new 
LockAwareExecution() {
                     
                     public void execute(MailboxSession session, MailboxPath 
children) throws MailboxException {
@@ -403,13 +403,13 @@ public abstract class StoreMailboxManage
                 final String match = name.substring(baseLength);
                 if (mailboxExpression.isExpressionMatch(match)) {
                     final MailboxMetaData.Children inferiors; 
-                    if (mapper.hasChildren(mailbox)) {
+                    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, 
MailboxConstants.DEFAULT_DELIMITER_STRING, inferiors, Selectability.NONE));
+                    results.add(new SimpleMailboxMetaData(mailboxPath, 
getDelimiter(), inferiors, Selectability.NONE));
                 }
             }
         }

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
 Wed Jan 12 08:10:12 2011
@@ -75,11 +75,12 @@ public interface MailboxMapper<Id> exten
      * Return if the given {...@link Mailbox} has children
      * 
      * @param mailbox not null
+     * @param delimiter path delimiter
      * @return true when the mailbox has children, false otherwise
      * @throws MailboxException
      * @throws MailboxNotFoundException
      */
-    public abstract boolean hasChildren(Mailbox<Id> mailbox)
+    public abstract boolean hasChildren(Mailbox<Id> mailbox, char delimiter)
             throws MailboxException, MailboxNotFoundException;
     
     /**

Modified: 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
 (original)
+++ 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
 Wed Jan 12 08:10:12 2011
@@ -90,16 +90,19 @@ public class TorqueMailbox implements Me
 
     private MailboxRow mailboxRow;
 
+    private MailboxSession session;
+    
     private final UidChangeTracker tracker;
 
     private final ReentrantReadWriteLock lock;
 
     private final MessageSearches searches;
 
-    TorqueMailbox(final MailboxRow mailboxRow, final ReentrantReadWriteLock 
lock) {
+    TorqueMailbox(final MailboxRow mailboxRow, final MailboxSession session, 
final ReentrantReadWriteLock lock) {
         this.searches = new MessageSearches();
         this.mailboxRow = mailboxRow;
-        this.tracker = new UidChangeTracker(mailboxRow.getLastUid(), 
getMailboxPath(mailboxRow.getName()));
+        this.session = session;
+        this.tracker = new UidChangeTracker(mailboxRow.getLastUid(), 
getMailboxPath(mailboxRow.getName(), session.getPathDelimiter()));
         this.lock = lock;
     }
 
@@ -806,12 +809,12 @@ public class TorqueMailbox implements Me
     }
 
     public void reportRenamed(String from, MailboxRow mailboxRow, 
MailboxSession session) {
-        tracker.reportRenamed(getMailboxPath(mailboxRow.getName()), 
session.getSessionId());
+        tracker.reportRenamed(getMailboxPath(mailboxRow.getName(), 
session.getPathDelimiter()), session.getSessionId());
         this.mailboxRow = mailboxRow;
     }
 
-    public MailboxPath getMailboxPath(String name) {
-        String nameParts[] = name.split("\\" 
+MailboxConstants.DEFAULT_DELIMITER_STRING,3);
+    public MailboxPath getMailboxPath(String name, char delimiter) {
+        String nameParts[] = name.split("\\" +delimiter,3);
         if (nameParts.length < 3) {
             return new MailboxPath(nameParts[0], null, nameParts[1]);
         }

Modified: 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java?rev=1058016&r1=1058015&r2=1058016&view=diff
==============================================================================
--- 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java
 (original)
+++ 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java
 Wed Jan 12 08:10:12 2011
@@ -115,7 +115,7 @@ public class TorqueMailboxManager implem
      * @return session
      */
     private SimpleMailboxSession createSession(String userName, String 
password, Log log) {
-        return new SimpleMailboxSession(randomId(), userName, password, log, 
new ArrayList<Locale>());
+        return new SimpleMailboxSession(randomId(), userName, password, log, 
new ArrayList<Locale>(), getDelimiter());
     }
 
     /**
@@ -166,22 +166,22 @@ public class TorqueMailboxManager implem
     }
     public MessageManager getMailbox(MailboxPath path, MailboxSession session)
             throws MailboxException {
-        return doGetMailbox(getName(path));
+        return doGetMailbox(getName(path), session);
     }
 
     private String getName(MailboxPath path) {
         StringBuffer sb = new StringBuffer();
         sb.append(path.getNamespace());
-        sb.append(MailboxConstants.DEFAULT_DELIMITER);
+        sb.append(getDelimiter());
 
         if (path.getUser() != null) {
             sb.append(path.getUser());
-            sb.append(MailboxConstants.DEFAULT_DELIMITER);
+            sb.append(getDelimiter());
         }
         sb.append(path.getName());
         return sb.toString();
     }
-    private TorqueMailbox doGetMailbox(String mailboxName)
+    private TorqueMailbox doGetMailbox(String mailboxName, MailboxSession 
session)
             throws MailboxException {
         try {
             synchronized (mailboxes) {
@@ -194,7 +194,7 @@ public class TorqueMailboxManager implem
                     TorqueMailbox torqueMailbox = (TorqueMailbox) mailboxes
                             .get(mailboxName);
                     if (torqueMailbox == null) {
-                        torqueMailbox = new TorqueMailbox(mailboxRow, lock);
+                        torqueMailbox = new TorqueMailbox(mailboxRow, session, 
lock);
                         mailboxes.put(mailboxName, torqueMailbox);
                     }
 
@@ -221,14 +221,14 @@ public class TorqueMailboxManager implem
         final int length = namespaceName.length();
         if (length == 0) {
             getLog().warn("Ignoring mailbox with empty name");
-        } else if (namespaceName.charAt(length - 1) == 
MailboxConstants.DEFAULT_DELIMITER) {
+        } else if (namespaceName.charAt(length - 1) == getDelimiter()) {
             createMailbox(namespaceName.substring(0, length - 1), 
mailboxSession);
         } else {
             synchronized (mailboxes) {
                 // Create root first
                 // If any creation fails then mailbox will not be created
                 // TODO: transaction
-                int index = 
namespaceName.indexOf(MailboxConstants.DEFAULT_DELIMITER);
+                int index = namespaceName.indexOf(getDelimiter());
                 int count = 0;
                 while (index >= 0) {
                     // Until explicit namespace support is added,
@@ -242,7 +242,7 @@ public class TorqueMailboxManager implem
                             doCreate(mailbox);
                         }
                     }
-                    index = 
namespaceName.indexOf(MailboxConstants.DEFAULT_DELIMITER, ++index);
+                    index = namespaceName.indexOf(getDelimiter(), ++index);
                 }
                 if (mailboxExists(getMailboxPath(namespaceName), 
mailboxSession)) {
                     throw new MailboxExistsException(namespaceName); 
@@ -347,8 +347,8 @@ public class TorqueMailboxManager implem
 
     public void copyMessages(MessageRange set, MailboxPath from, MailboxPath 
to,
             MailboxSession session) throws MailboxException {
-        TorqueMailbox toMailbox = doGetMailbox(getName(to));
-        TorqueMailbox fromMailbox = doGetMailbox(getName(from));
+        TorqueMailbox toMailbox = doGetMailbox(getName(to), session);
+        TorqueMailbox fromMailbox = doGetMailbox(getName(from), session);
         fromMailbox.copyTo(set, toMailbox, session);
     }
 
@@ -387,7 +387,7 @@ public class TorqueMailboxManager implem
                         } else {
                             inferiors = 
MailboxMetaData.Children.HAS_NO_CHILDREN;
                         }
-                        results.add(new SimpleMailboxMetaData(sPath, 
MailboxConstants.DEFAULT_DELIMITER_STRING, inferiors, Selectability.NONE));
+                        results.add(new SimpleMailboxMetaData(sPath, 
getDelimiter(), inferiors, Selectability.NONE));
                     }
                 }
             }
@@ -440,7 +440,7 @@ public class TorqueMailboxManager implem
     }
 
     public MailboxPath getMailboxPath(String name) {
-        String nameParts[] = name.split("\\" 
+MailboxConstants.DEFAULT_DELIMITER_STRING,3);
+        String nameParts[] = name.split("\\" +getDelimiter(),3);
         if (nameParts.length < 3) {
             return new MailboxPath(nameParts[0], null, nameParts[1]);
         }
@@ -459,7 +459,7 @@ public class TorqueMailboxManager implem
     }
 
     public void addListener(MailboxPath path, MailboxListener listener, 
MailboxSession session) throws MailboxException {
-        final TorqueMailbox mailbox = doGetMailbox(getName(path));
+        final TorqueMailbox mailbox = doGetMailbox(getName(path), session);
         mailbox.addListener(listener);
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to