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]