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]