Author: rdonkin
Date: Sun May 10 17:05:18 2009
New Revision: 773366

URL: http://svn.apache.org/viewvc?rev=773366&view=rev
Log:
Allow deliminator to be configured through injection.  IMAP-70 
https://issues.apache.org/jira/browse/IMAP-70

Modified:
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
    
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=773366&r1=773365&r2=773366&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
 Sun May 10 17:05:18 2009
@@ -47,9 +47,6 @@
 import org.apache.james.imap.store.mail.model.Mailbox;
 
 public abstract class StoreMailboxManager extends AbstractLogEnabled 
implements MailboxManager {
-
-    public static final char HIERARCHY_DELIMITER = '.';
-    
     public static final String USER_NAMESPACE_PREFIX = "#mail";
     
     private static final char SQL_WILDCARD_CHAR = '%';
@@ -60,11 +57,19 @@
 
     private final Authenticator authenticator;    
     private final Subscriber subscriber;    
+    
+    private final char delimiter;
 
     public StoreMailboxManager(final Authenticator authenticator, final 
Subscriber subscriber) {
+        this(authenticator, subscriber, '.');
+    }
+
+    
+    public StoreMailboxManager(final Authenticator authenticator, final 
Subscriber subscriber, final char delimiter) {
         mailboxes = new HashMap<String, StoreMailbox>();
         this.authenticator = authenticator;
         this.subscriber = subscriber;
+        this.delimiter = delimiter;
     }
 
     protected abstract StoreMailbox createMailbox(Mailbox mailboxRow);
@@ -106,14 +111,14 @@
         final int length = namespaceName.length();
         if (length == 0) {
             getLog().warn("Ignoring mailbox with empty name");
-        } else if (namespaceName.charAt(length - 1) == HIERARCHY_DELIMITER) {
+        } else if (namespaceName.charAt(length - 1) == delimiter) {
             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(HIERARCHY_DELIMITER);
+                int index = namespaceName.indexOf(delimiter);
                 int count = 0;
                 while (index >= 0) {
                     // Until explicit namespace support is added,
@@ -127,7 +132,7 @@
                             doCreate(mailbox);
                         }
                     }
-                    index = namespaceName.indexOf(HIERARCHY_DELIMITER, 
++index);
+                    index = namespaceName.indexOf(delimiter, ++index);
                 }
                 if (mailboxExists(namespaceName, mailboxSession)) {
                     throw new MailboxExistsException(namespaceName); 
@@ -181,7 +186,7 @@
             changeMailboxName(from, to);
 
             // rename submailbox
-            final List<Mailbox> subMailboxes = 
mapper.findMailboxWithNameLike(from + HIERARCHY_DELIMITER + "%");
+            final List<Mailbox> subMailboxes = 
mapper.findMailboxWithNameLike(from + delimiter + "%");
             for (Mailbox sub:subMailboxes) {
                 final String subOriginalName = sub.getName();
                 final String subNewName = to + 
subOriginalName.substring(from.length());
@@ -230,7 +235,7 @@
         }
 
         final String search = mailboxExpression.getCombinedName(
-                HIERARCHY_DELIMITER).replace(freeWildcard, SQL_WILDCARD_CHAR)
+                delimiter).replace(freeWildcard, SQL_WILDCARD_CHAR)
                 .replace(localWildcard, SQL_WILDCARD_CHAR);
 
         final MailboxMapper mapper = createMailboxMapper();
@@ -240,7 +245,7 @@
             final String name = mailbox.getName();
             if (name.startsWith(base)) {
                 final String match = name.substring(baseLength);
-                if (mailboxExpression.isExpressionMatch(match, 
HIERARCHY_DELIMITER)) {
+                if (mailboxExpression.isExpressionMatch(match, delimiter)) {
                     final MailboxMetaData.Children inferiors; 
                     if (hasChildren(name, mapper)) {
                         inferiors = MailboxMetaData.Children.HAS_CHILDREN;
@@ -264,7 +269,7 @@
      * @throws TorqueException
      */
     private boolean hasChildren(String name, final MailboxMapper mapper) 
throws StorageException {
-        return mapper.hasChildren(name, HIERARCHY_DELIMITER);
+        return mapper.hasChildren(name, delimiter);
     }
 
     public boolean mailboxExists(String mailboxName, MailboxSession session) 
throws MailboxException {
@@ -293,14 +298,14 @@
     }
 
     public MailboxSession createSession(String userName, Log log) {
-        return new SimpleMailboxSession(random.nextLong(), userName, log, 
HIERARCHY_DELIMITER);
+        return new SimpleMailboxSession(random.nextLong(), userName, log, 
delimiter);
     }
 
     public String resolve(final String userName, String mailboxPath) {
-        if (mailboxPath.charAt(0) != HIERARCHY_DELIMITER) {
-            mailboxPath = HIERARCHY_DELIMITER + mailboxPath;
+        if (mailboxPath.charAt(0) != delimiter) {
+            mailboxPath = delimiter + mailboxPath;
         }
-        final String result = USER_NAMESPACE_PREFIX + HIERARCHY_DELIMITER + 
userName
+        final String result = USER_NAMESPACE_PREFIX + delimiter + userName
         + mailboxPath;
         return result;
     }

Modified: 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=773366&r1=773365&r2=773366&view=diff
==============================================================================
--- 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 (original)
+++ 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 Sun May 10 17:05:18 2009
@@ -56,8 +56,6 @@
 
 public class TorqueMailboxManager implements MailboxManager {
 
-    public static final char HIERARCHY_DELIMITER = '.';
-    
     public static final String USER_NAMESPACE_PREFIX = "#mail";
     
     private static final char SQL_WILDCARD_CHAR = '%';
@@ -72,10 +70,17 @@
 
     private final UserManager userManager;
 
+    private final char delimiter;
+    
     public TorqueMailboxManager(final UserManager userManager) {
+        this(userManager, '.');
+    }
+    
+    public TorqueMailboxManager(final UserManager userManager, final char 
delimiter) {
         this.lock = new ReentrantWriterPreferenceReadWriteLock();
         mailboxes = new HashMap<String, TorqueMailbox>();
         this.userManager = userManager;
+        this.delimiter = delimiter;
     }
 
     public Mailbox getMailbox(String mailboxName, MailboxSession session)
@@ -117,14 +122,14 @@
         final int length = namespaceName.length();
         if (length == 0) {
             getLog().warn("Ignoring mailbox with empty name");
-        } else if (namespaceName.charAt(length - 1) == HIERARCHY_DELIMITER) {
+        } else if (namespaceName.charAt(length - 1) == delimiter) {
             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(HIERARCHY_DELIMITER);
+                int index = namespaceName.indexOf(delimiter);
                 int count = 0;
                 while (index >= 0) {
                     // Until explicit namespace support is added,
@@ -138,7 +143,7 @@
                             doCreate(mailbox);
                         }
                     }
-                    index = namespaceName.indexOf(HIERARCHY_DELIMITER, 
++index);
+                    index = namespaceName.indexOf(delimiter, ++index);
                 }
                 if (mailboxExists(namespaceName, mailboxSession)) {
                     throw new MailboxExistsException(namespaceName); 
@@ -207,7 +212,7 @@
                 // rename submailbox
                 Criteria c = new Criteria();
                 c.add(MailboxRowPeer.NAME,
-                        (Object) (from + HIERARCHY_DELIMITER + "%"),
+                        (Object) (from + delimiter + "%"),
                         Criteria.LIKE);
                 List l = MailboxRowPeer.doSelect(c);
                 for (Iterator iter = l.iterator(); iter.hasNext();) {
@@ -255,7 +260,7 @@
         }
 
         final String search = mailboxExpression.getCombinedName(
-                HIERARCHY_DELIMITER).replace(freeWildcard, SQL_WILDCARD_CHAR)
+                delimiter).replace(freeWildcard, SQL_WILDCARD_CHAR)
                 .replace(localWildcard, SQL_WILDCARD_CHAR);
 
         Criteria criteria = new Criteria();
@@ -268,7 +273,7 @@
                 final String name = mailboxRow.getName();
                 if (name.startsWith(base)) {
                     final String match = name.substring(baseLength);
-                    if (mailboxExpression.isExpressionMatch(match, 
HIERARCHY_DELIMITER)) {
+                    if (mailboxExpression.isExpressionMatch(match, delimiter)) 
{
                         final MailboxMetaData.Children inferiors; 
                         if (hasChildren(name)) {
                             inferiors = MailboxMetaData.Children.HAS_CHILDREN;
@@ -295,7 +300,7 @@
      */
     private boolean hasChildren(String name) throws TorqueException {
         final Criteria criteria = new Criteria();
-        criteria.add(MailboxRowPeer.NAME, (Object)(name + HIERARCHY_DELIMITER 
+ SQL_WILDCARD_CHAR), Criteria.LIKE);
+        criteria.add(MailboxRowPeer.NAME, (Object)(name + delimiter + 
SQL_WILDCARD_CHAR), Criteria.LIKE);
         final List mailboxes = MailboxRowPeer.doSelect(criteria);
         return !mailboxes.isEmpty();
     }
@@ -345,14 +350,14 @@
     }
 
     public MailboxSession createSession(String userName, Log log) {
-        return new TorqueMailboxSession(random.nextLong(), log, userName, 
HIERARCHY_DELIMITER);
+        return new TorqueMailboxSession(random.nextLong(), log, userName, 
delimiter);
     }
 
     public String resolve(final String userName, String mailboxPath) {
-        if (mailboxPath.charAt(0) != HIERARCHY_DELIMITER) {
-            mailboxPath = HIERARCHY_DELIMITER + mailboxPath;
+        if (mailboxPath.charAt(0) != delimiter) {
+            mailboxPath = delimiter + mailboxPath;
         }
-        final String result = USER_NAMESPACE_PREFIX + HIERARCHY_DELIMITER + 
userName
+        final String result = USER_NAMESPACE_PREFIX + delimiter + userName
                 + mailboxPath;
         return result;
     }



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

Reply via email to