[prev in list] [next in list] [prev in thread] [next in thread]
List: james-dev
Subject: svn commit: r959420 - in /james/imap/trunk:
From: norman () apache ! org
Date: 2010-06-30 20:04:57
Message-ID: 20100630200457.95CF423888D1 () eris ! apache ! org
[Download RAW message or body]
Author: norman
Date: Wed Jun 30 20:04:57 2010
New Revision: 959420
URL: http://svn.apache.org/viewvc?rev=959420&view=rev
Log:
Handle the construction of the node path for the username in a protected method \
(IMAP-173)
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxSessionMapperFactory.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
Modified: james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache \
/james/imap/functional/AbstractStressTest.java?rev=959420&r1=959419&r2=959420&view=diff
==============================================================================
--- james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java \
(original)
+++ james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java \
Wed Jun 30 20:04:57 2010 @@ -49,7 +49,7 @@ public abstract class AbstractStressTest
MailboxSession session = getMailboxManager().createSystemSession("test", new \
SimpleLog("Test")); getMailboxManager().startProcessingRequest(session);
- getMailboxManager().createMailbox(StoreMailboxManager.USER_NAMESPACE_PREFIX \
+".INBOX", session); + \
getMailboxManager().createMailbox(StoreMailboxManager.USER_NAMESPACE_PREFIX \
+".username.INBOX", session); getMailboxManager().endProcessingRequest(session);
getMailboxManager().logout(session, false);
final AtomicBoolean fail = new AtomicBoolean(false);
@@ -68,7 +68,7 @@ public abstract class AbstractStressTest
try {
getMailboxManager().startProcessingRequest(session);
- Mailbox m = \
getMailboxManager().getMailbox(StoreMailboxManager.USER_NAMESPACE_PREFIX +".INBOX", \
session); + Mailbox m = \
getMailboxManager().getMailbox(StoreMailboxManager.USER_NAMESPACE_PREFIX \
+".username.INBOX", session);
System.out.println("Append message with uid=" + \
m.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), \
new Date(), session, false, new Flags()));
getMailboxManager().endProcessingRequest(session);
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java?rev=959420&r1=959419&r2=959420&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java \
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java \
Wed Jun 30 20:04:57 2010 @@ -18,10 +18,12 @@
****************************************************************/
package org.apache.james.imap.jcr;
+import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.commons.logging.Log;
+import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.james.imap.api.display.HumanReadableText;
import org.apache.james.imap.mailbox.MailboxException;
import org.apache.james.imap.mailbox.MailboxSession;
@@ -40,12 +42,15 @@ public abstract class AbstractJCRMapper
private final MailboxSessionJCRRepository repository;
private final MailboxSession mSession;
private final NodeLocker locker;
-
- public AbstractJCRMapper(final MailboxSessionJCRRepository repository, \
MailboxSession mSession, NodeLocker locker, Log logger) { + private final int \
scaling; + private final static char PAD ='_';
+
+ public AbstractJCRMapper(final MailboxSessionJCRRepository repository, \
MailboxSession mSession, NodeLocker locker, int scaling, Log logger) { \
this.repository = repository; this.mSession = mSession;
this.logger = logger;
this.locker = locker;
+ this.scaling = scaling;
}
public NodeLocker getNodeLocker() {
@@ -114,6 +119,70 @@ public abstract class AbstractJCRMapper
repository.logout(mSession);
}
-
+ /**
+ * Construct the user node path part, using the specified scaling factor.
+ * If the username is not long enough it will fill it with {@link #PAD}
+ *
+ * So if you use a scaling of 2 it will look like:
+ *
+ * foo:
+ * f/fo/foo
+ *
+ * fo:
+ * f/fo/fo
+ *
+ * f:
+ * f/f_/fo
+ *
+ * @param username
+ * @return path
+ */
+ protected String constructUserPathPart(String username) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0 ; i < scaling; i++) {
+ if (username.length() > i) {
+ sb.append(username.substring(0,i+1));
+ } else {
+ sb.append(username);
+ int a = i - username.length();
+ for (int b = 0; b < a; b++) {
+ sb.append(PAD);
+ }
+ }
+ sb.append(NODE_DELIMITER);
+ }
+ sb.append(username);
+ return sb.toString();
+
+ }
+
+ /**
+ * Create the needed Node structure for the given username using the given Node \
as parent. + *
+ * The method will use {@link #constructUserPathPart(String)} for create the \
needed node path and split + * it when a NODE_DELIMITER was found
+ *
+ * @param parent
+ * @param username
+ * @return userNode
+ * @throws RepositoryException
+ */
+ protected Node createUserPathStructure(Node parent, String username)
+ throws RepositoryException {
+ String userpath = constructUserPathPart(username);
+
+ String[] userPathParts = userpath.split(NODE_DELIMITER);
+ for (int a = 0; a < userPathParts.length; a++) {
+ parent = JcrUtils.getOrAddNode(parent, userPathParts[a],
+ "nt:unstructured");
+
+ // thats the last user node so add the right mixin type
+ if (a + 1 == userPathParts.length)
+ parent.addMixin("jamesMailbox:user");
+ }
+
+ return parent;
+
+ }
}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/ \
imap/jcr/JCRMailboxSessionMapperFactory.java?rev=959420&r1=959419&r2=959420&view=diff \
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxSessionMapperFactory.java \
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxSessionMapperFactory.java \
Wed Jun 30 20:04:57 2010 @@ -44,6 +44,7 @@ public class JCRMailboxSessionMapperFact
private final Log logger;
private final char delimiter;
private final NodeLocker locker;
+ private final int DEFAULT_SCALING = 2;
public JCRMailboxSessionMapperFactory(final MailboxSessionJCRRepository \
repository, final NodeLocker locker) { this(repository, locker, \
DEFAULT_FOLDER_DELIMITER); @@ -59,19 +60,19 @@ public class \
JCRMailboxSessionMapperFact
@Override
public MailboxMapper<String> createMailboxMapper(MailboxSession session) throws \
MailboxException {
- JCRMailboxMapper mapper = new JCRMailboxMapper(repository, session, locker, \
logger, delimiter); + JCRMailboxMapper mapper = new \
JCRMailboxMapper(repository, session, locker, DEFAULT_SCALING, logger, delimiter); \
return mapper; }
@Override
public MessageMapper<String> createMessageMapper(MailboxSession session) throws \
MailboxException {
- JCRMessageMapper messageMapper = new JCRMessageMapper(repository, session, \
locker, logger); + JCRMessageMapper messageMapper = new \
JCRMessageMapper(repository, session, locker, DEFAULT_SCALING, logger); return \
messageMapper; }
@Override
public SubscriptionMapper createSubscriptionMapper(MailboxSession session) \
throws SubscriptionException {
- JCRSubscriptionMapper mapper = new JCRSubscriptionMapper(repository, \
session, locker, logger); + JCRSubscriptionMapper mapper = new \
JCRSubscriptionMapper(repository, session, locker, DEFAULT_SCALING, logger); return \
mapper; }
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java?rev=959420&r1=959419&r2=959420&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java \
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java \
Wed Jun 30 20:04:57 2010 @@ -53,8 +53,8 @@ public class JCRMailboxMapper extends Ab
private char delimiter;
- public JCRMailboxMapper(final MailboxSessionJCRRepository repos, MailboxSession \
session, final NodeLocker locker, final Log logger, char delimiter) {
- super(repos, session, locker, logger);
+ public JCRMailboxMapper(final MailboxSessionJCRRepository repos, MailboxSession \
session, final NodeLocker locker, final int scaling, final Log logger, char \
delimiter) { + super(repos, session, locker, scaling, logger);
this.delimiter = delimiter;
}
@@ -191,21 +191,12 @@ public class JCRMailboxMapper extends Ab
//split the name so we can construct a nice node tree
final String nameParts[] = name.split("\\" + \
String.valueOf(delimiter), 3); + node = \
JcrUtils.getOrAddNode(node, nameParts[0], "nt:unstructured"); + \
node = createUserPathStructure(node, nameParts[1]); + node = \
JcrUtils.getOrAddNode(node, nameParts[2], "nt:unstructured"); + \
node.addMixin("jamesMailbox:mailbox"); +
- // this loop will create a structure like:
- // /mailboxes/u/user/INBOX
- //
- // This is needed to minimize the child nodes a bit
- for (int i = 0; i < nameParts.length; i++) {
- String part = nameParts[i];
- if (i == 1) {
- node = JcrUtils.getOrAddNode(node, \
String.valueOf(part.charAt(0)), "nt:unstructured");
-
- }
- node = JcrUtils.getOrAddNode(node, part, \
"nt:unstructured");
- node.addMixin("jamesMailbox:mailbox");
-
- }
jcrMailbox.merge(node);
getSession().save();
@@ -223,6 +214,7 @@ public class JCRMailboxMapper extends Ab
}
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SAVE_FAILED, e);
} catch (InterruptedException e) {
throw new StorageException(HumanReadableText.SAVE_FAILED, e);
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=959420&r1=959419&r2=959420&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java \
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java \
Wed Jun 30 20:04:57 2010 @@ -58,8 +58,8 @@ import org.apache.james.imap.store.mail.
*/
public class JCRMessageMapper extends AbstractJCRMapper implements \
MessageMapper<String> {
- public JCRMessageMapper(final MailboxSessionJCRRepository repos, MailboxSession \
session, NodeLocker locker, final Log logger) {
- super(repos, session, locker, logger);
+ public JCRMessageMapper(final MailboxSessionJCRRepository repos, MailboxSession \
session, NodeLocker locker, final int scaling, final Log logger) { + \
super(repos, session, locker, scaling, logger); }
/**
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/ \
imap/jcr/user/JCRSubscriptionMapper.java?rev=959420&r1=959419&r2=959420&view=diff \
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java \
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java \
Wed Jun 30 20:04:57 2010 @@ -49,8 +49,8 @@ import org.apache.james.imap.store.user.
*/
public class JCRSubscriptionMapper extends AbstractJCRMapper implements \
SubscriptionMapper {
- public JCRSubscriptionMapper(final MailboxSessionJCRRepository repos, \
MailboxSession session, final NodeLocker locker, final Log log) {
- super(repos,session, locker, log);
+ public JCRSubscriptionMapper(final MailboxSessionJCRRepository repos, \
MailboxSession session, final NodeLocker locker, final int scaling, final Log log) { \
+ super(repos,session, locker, scaling, log); }
/*
@@ -174,14 +174,8 @@ public class JCRSubscriptionMapper exten
if (sub == null) {
Node subscriptionsNode = \
JcrUtils.getOrAddNode(getSession().getRootNode(), MAILBOXES_PATH);
- // this loop will create a structure like:
- // /mailboxes/u/user
- //
// This is needed to minimize the child nodes a bit
- Node userNode = JcrUtils.getOrAddNode(subscriptionsNode, \
String.valueOf(username.charAt(0)));
- userNode = JcrUtils.getOrAddNode(userNode, \
String.valueOf(username));
- node = JcrUtils.getOrAddNode(userNode, mailbox, "nt:unstructured");
- node.addMixin("jamesMailbox:user");
+ node = createUserPathStructure(subscriptionsNode, username);
} else {
node = sub.getNode();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic