Index: api/src/main/java/org/apache/james/mailbox/MailboxConstants.java =================================================================== --- api/src/main/java/org/apache/james/mailbox/MailboxConstants.java (revision 1056658) +++ api/src/main/java/org/apache/james/mailbox/MailboxConstants.java (working copy) @@ -32,11 +32,6 @@ 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"; Index: api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java =================================================================== --- api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java (revision 1056658) +++ api/src/main/java/org/apache/james/mailbox/MailboxMetaData.java (working copy) @@ -73,7 +73,7 @@ * * @return delimiter */ - String getHierarchyDelimiter(); + char getHierarchyDelimiter(); /** * Return the MailboxPath Index: api/src/main/java/org/apache/james/mailbox/MailboxQuery.java =================================================================== --- api/src/main/java/org/apache/james/mailbox/MailboxQuery.java (revision 1056658) +++ api/src/main/java/org/apache/james/mailbox/MailboxQuery.java (working copy) @@ -35,6 +35,7 @@ private final int expressionLength; + private final char pathDelimiter; /** * Constructs an expression determining a set of mailbox names. * @@ -49,7 +50,7 @@ * 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 @@ expressionLength = this.expression.length(); this.freeWildcard = freeWildcard; this.localWildcard = localWildcard; + this.pathDelimiter = pathDelimiter; } /** @@ -173,7 +175,7 @@ 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 @@ 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 @@ 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 @@ } } 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(); Index: api/src/main/java/org/apache/james/mailbox/MailboxSession.java =================================================================== --- api/src/main/java/org/apache/james/mailbox/MailboxSession.java (revision 1056658) +++ api/src/main/java/org/apache/james/mailbox/MailboxSession.java (working copy) @@ -126,5 +126,9 @@ */ public Map getAttributes(); - + /** + * Return server side, folder path separator + * @return path separator + */ + public char getPathDelimiter(); } Index: api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java =================================================================== --- api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java (revision 1056658) +++ api/src/main/java/org/apache/james/mailbox/util/SimpleMailboxMetaData.java (working copy) @@ -25,23 +25,24 @@ public class SimpleMailboxMetaData implements MailboxMetaData, Comparable { - 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 @@ this.selectability = selectability; } - /** + /** * Is this mailbox \Noinferiors as per RFC3501. * * @return true if marked, false otherwise @@ -70,7 +71,7 @@ * (non-Javadoc) * @see org.apache.james.mailbox.MailboxMetaData#getHierarchyDelimiter() */ - public String getHierarchyDelimiter() { + public char getHierarchyDelimiter() { return delimiter; } Index: api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java =================================================================== --- api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java (revision 1056658) +++ api/src/test/java/org/apache/james/mailbox/MailboxExpressionTest.java (working copy) @@ -36,7 +36,7 @@ private MailboxQuery create(String expression) { - return new MailboxQuery(BASE_PATH, expression, '*', '%'); + return new MailboxQuery(BASE_PATH, expression, '*', '%', '.'); } @Test @@ -56,13 +56,13 @@ @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 @@ @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()); } Index: api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java =================================================================== --- api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java (revision 1056658) +++ api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java (working copy) @@ -28,6 +28,7 @@ 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 @@ return close == false; } + public char getPathDelimiter() { + return '.'; + } + } Index: jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java =================================================================== --- jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java (revision 1056658) +++ jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java (working copy) @@ -34,7 +34,6 @@ 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 @@ * @see org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(org.apache.james. * imap.store.mail.model.Mailbox) */ - public boolean hasChildren(Mailbox mailbox) + public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, MailboxNotFoundException { try { String name = Text.escapeIllegalXpathSearchChars(mailbox.getName()); @@ -204,7 +203,7 @@ .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(); Index: jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java =================================================================== --- jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java (revision 1056658) +++ jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java (working copy) @@ -21,7 +21,6 @@ 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 @@ public class JPAMailboxSessionMapperFactory extends MailboxSessionMapperFactory { 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 createMailboxMapper(MailboxSession session) { - return new JPAMailboxMapper(entityManagerFactory, delimiter); + return new JPAMailboxMapper(entityManagerFactory); } @Override Index: jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java =================================================================== --- jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java (revision 1056658) +++ jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java (working copy) @@ -42,12 +42,10 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxMapper { 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 @@ /** * @see org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(java.lang.String) */ - public boolean hasChildren(Mailbox mailbox) throws MailboxException, + public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, MailboxNotFoundException { final String name = mailbox.getName() + delimiter + SQL_WILDCARD_CHAR; final Long numberOfChildMailboxes; @@ -153,7 +151,7 @@ return numberOfChildMailboxes != null && numberOfChildMailboxes > 0; } - /* + /* * (non-Javadoc) * @see org.apache.james.mailbox.store.mail.MailboxMapper#list() */ Index: maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java =================================================================== --- maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java (revision 1056658) +++ maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java (working copy) @@ -117,7 +117,7 @@ * (non-Javadoc) * @see org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(org.apache.james.mailbox.store.mail.model.Mailbox) */ - public boolean hasChildren(Mailbox mailbox) throws MailboxException, MailboxNotFoundException { + public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, MailboxNotFoundException { String searchString = mailbox.getName() + MaildirStore.maildirDelimiter + MaildirStore.WILDCARD; List> mailboxes = findMailboxWithPathLike( new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), searchString)); Index: memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java =================================================================== --- memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java (revision 1056658) +++ memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java (working copy) @@ -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 @@ private MessageMapper 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 createMailboxMapper(MailboxSession session) throws MailboxException { return mailboxMapper; Index: memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java =================================================================== --- memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java (revision 1056658) +++ memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java (working copy) @@ -35,11 +35,9 @@ private static final int INITIAL_SIZE = 128; private final Map mailboxesById; - private final char delimiter; - public InMemoryMailboxMapper(char delimiter) { + public InMemoryMailboxMapper() { mailboxesById = new ConcurrentHashMap(INITIAL_SIZE); - this.delimiter = delimiter; } /* @@ -108,7 +106,7 @@ * (non-Javadoc) * @see org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(org.apache.james.mailbox.store.mail.model.Mailbox) */ - public boolean hasChildren(Mailbox mailbox) throws MailboxException, + public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, MailboxNotFoundException { String mailboxName = mailbox.getName() + delimiter; for (final InMemoryMailbox box:mailboxesById.values()) { Index: store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java =================================================================== --- store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java (revision 1056658) +++ store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java (working copy) @@ -75,11 +75,12 @@ * 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 mailbox) + public abstract boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, MailboxNotFoundException; /** Index: store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java =================================================================== --- store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java (revision 1056658) +++ store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java (working copy) @@ -54,14 +54,16 @@ private final List localePreferences; private final Map attributes; + + private final char pathSeparator; public SimpleMailboxSession(final long sessionId, final String userName, final String password, - final Log log, final List localePreferences) { - this(sessionId, userName, password, log, localePreferences, new ArrayList(), null); + final Log log, final List localePreferences, char pathSeparator) { + this(sessionId, userName, password, log, localePreferences, new ArrayList(), null, pathSeparator); } public SimpleMailboxSession(final long sessionId, final String userName, final String password, - final Log log, final List localePreferences, List sharedSpaces, String otherUsersSpace) { + final Log log, final List localePreferences, List sharedSpaces, String otherUsersSpace, char pathSeparator) { this.sessionId = sessionId; this.log = log; this.userName = userName; @@ -77,6 +79,7 @@ this.localePreferences = localePreferences; this.attributes = new HashMap(); + this.pathSeparator = pathSeparator; } /* @@ -186,4 +189,11 @@ return password; } + /** + * @see org.apache.james.mailbox.MailboxSession#getPathDelimiter() + */ + public char getPathDelimiter() { + return pathSeparator; + } + } Index: store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java =================================================================== --- store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (revision 1056658) +++ store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (working copy) @@ -147,8 +147,8 @@ * @param log * @return session */ - private SimpleMailboxSession createSession(String userName, String password, Log log) { - return new SimpleMailboxSession(randomId(), userName, password, log, new ArrayList()); + private MailboxSession createSession(String userName, String password, Log log) { + return new SimpleMailboxSession(randomId(), userName, password, log, new ArrayList(), getDelimiter()); } /** @@ -164,7 +164,7 @@ * (non-Javadoc) * @see org.apache.james.mailbox.MailboxManager#getDelimiter() */ - public final char getDelimiter() { + public char getDelimiter() { return MailboxConstants.DEFAULT_DELIMITER; } @@ -250,14 +250,14 @@ 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 @@ 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 @@ 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)); } } } Index: torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java =================================================================== --- torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java (revision 1056658) +++ torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java (working copy) @@ -90,16 +90,19 @@ 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 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]); } Index: torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java =================================================================== --- torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java (revision 1056658) +++ torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java (working copy) @@ -115,7 +115,7 @@ * @return session */ private SimpleMailboxSession createSession(String userName, String password, Log log) { - return new SimpleMailboxSession(randomId(), userName, password, log, new ArrayList()); + return new SimpleMailboxSession(randomId(), userName, password, log, new ArrayList(), getDelimiter()); } /** @@ -166,22 +166,22 @@ } 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 @@ 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 @@ 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 @@ 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 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 @@ } 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 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 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); }