Author: norman
Date: Fri Mar 19 14:29:19 2010
New Revision: 925235
URL: http://svn.apache.org/viewvc?rev=925235&view=rev
Log:
Support for "auto scaling" of nodes. By default it will use the max scaling for
better performance(IMAP-118)
Added:
james/imap/trunk/jcr/src/test/
james/imap/trunk/jcr/src/test/java/
james/imap/trunk/jcr/src/test/java/org/
james/imap/trunk/jcr/src/test/java/org/apache/
james/imap/trunk/jcr/src/test/java/org/apache/james/
james/imap/trunk/jcr/src/test/java/org/apache/james/imap/
james/imap/trunk/jcr/src/test/java/org/apache/james/imap/jcr/
james/imap/trunk/jcr/src/test/java/org/apache/james/imap/jcr/JCRUtilsTest.java
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.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/JCRGlobalMailbox.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserSubscriptionManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.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/mail/model/JCRMessage.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
Fri Mar 19 14:29:19 2010
@@ -28,6 +28,7 @@ import org.apache.james.imap.functional.
import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.jcr.JCRGlobalUserMailboxManager;
import org.apache.james.imap.jcr.JCRGlobalUserSubscriptionManager;
+import org.apache.james.imap.jcr.JCRImapConstants;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
import org.apache.james.test.functional.HostSystem;
@@ -57,7 +58,7 @@ public class JCRHostSystem extends ImapH
userManager = new InMemoryUserManager();
- mailboxManager = new JCRGlobalUserMailboxManager(userManager, new
JCRGlobalUserSubscriptionManager(repository, null, "user", "pass"), repository,
null, "user", "pass");
+ mailboxManager = new JCRGlobalUserMailboxManager(userManager, new
JCRGlobalUserSubscriptionManager(repository, null, "user", "pass",
JCRImapConstants.MAX_SCALING), repository, null, "user", "pass",
JCRImapConstants.MAX_SCALING);
final DefaultImapProcessorFactory defaultImapProcessorFactory =
new DefaultImapProcessorFactory();
resetUserMetaData();
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=925235&r1=925234&r2=925235&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
Fri Mar 19 14:29:19 2010
@@ -37,9 +37,15 @@ import org.apache.james.imap.store.trans
public abstract class AbstractJCRMapper extends AbstractTransactionalMapper
implements JCRImapConstants{
private final Session session;
+ private final int scaling;
- public AbstractJCRMapper(final Session session) {
+ public AbstractJCRMapper(final Session session, final int scaling) {
this.session = session;
+ this.scaling = scaling;
+ }
+
+ protected int getScaling() {
+ return scaling;
}
/**
@@ -87,11 +93,4 @@ public abstract class AbstractJCRMapper
// no rollback supported by level 1 jcr
}
- protected void createNodeIfNotExists(String path) throws
RepositoryException, PathNotFoundException {
-
- if (session.getRootNode().hasNode(path) == false) {
- session.getRootNode().addNode(path);
- }
- }
-
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalMailbox.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalMailbox.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalMailbox.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalMailbox.java
Fri Mar 19 14:29:19 2010
@@ -42,8 +42,8 @@ public class JCRGlobalMailbox extends JC
private final char[] password;
public JCRGlobalMailbox(final
org.apache.james.imap.jcr.mail.model.JCRMailbox mailbox, MailboxSession session,
- Repository repository, String workspace, String
username, char[] password,Log log) {
- super(mailbox, session, repository, workspace, log);
+ Repository repository, String workspace, String
username, char[] password, final int scaling, Log log) {
+ super(mailbox, session, repository, workspace, scaling, log);
this.username = username;
this.password = password;
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java
Fri Mar 19 14:29:19 2010
@@ -47,8 +47,8 @@ public class JCRGlobalUserMailboxManager
private final String username;
private final char[] password;
- public JCRGlobalUserMailboxManager(final Authenticator authenticator,
final Subscriber subscriber, final Repository repository, final String
workspace, final String username, final String password) {
- super(authenticator, subscriber, repository, workspace);
+ public JCRGlobalUserMailboxManager(final Authenticator authenticator,
final Subscriber subscriber, final Repository repository, final String
workspace, final String username, final String password, final int scaling) {
+ super(authenticator, subscriber, repository, workspace, scaling);
this.username = username;
if (password != null) {
@@ -61,7 +61,7 @@ public class JCRGlobalUserMailboxManager
public void deleteEverything() throws MailboxException {
Session session = getSession(null);
- final MailboxMapper mapper = new JCRMailboxMapper(session,getLog());
+ final MailboxMapper mapper = new JCRMailboxMapper(session,
getScaling(), getLog());
mapper.execute(new TransactionalMapper.Transaction() {
public void run() throws MailboxException {
@@ -75,7 +75,7 @@ public class JCRGlobalUserMailboxManager
@Override
protected StoreMailbox createMailbox(Mailbox mailboxRow, MailboxSession
session) {
- JCRMailbox mailbox = new
JCRGlobalMailbox((org.apache.james.imap.jcr.mail.model.JCRMailbox) mailboxRow,
session, getRepository(), getWorkspace(), username, password, getLog());
+ JCRMailbox mailbox = new
JCRGlobalMailbox((org.apache.james.imap.jcr.mail.model.JCRMailbox) mailboxRow,
session, getRepository(), getWorkspace(), username, password, getScaling(),
getLog());
return mailbox;
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserSubscriptionManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserSubscriptionManager.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserSubscriptionManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserSubscriptionManager.java
Fri Mar 19 14:29:19 2010
@@ -40,8 +40,8 @@ public class JCRGlobalUserSubscriptionMa
private final String username;
private final char[] password;
- public JCRGlobalUserSubscriptionManager(final Repository repository, final
String workspace, final String username, final String password) {
- super(repository, workspace);
+ public JCRGlobalUserSubscriptionManager(final Repository repository, final
String workspace, final String username, final String password, final int
scaling) {
+ super(repository, workspace, scaling);
this.username = username;
if (password != null) {
this.password = password.toCharArray();
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
Fri Mar 19 14:29:19 2010
@@ -24,6 +24,14 @@ package org.apache.james.imap.jcr;
*/
public interface JCRImapConstants {
+ /**
+ * Node path scaling
+ */
+ public final static int MAX_SCALING = -1;
+
+ public final static int MIN_SCALING = 0;
+
+
/**
* Delimiter for Nodes
*/
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
Fri Mar 19 14:29:19 2010
@@ -57,16 +57,27 @@ public class JCRMailbox extends StoreMai
private final String workspace;
private final Log log;
private final String uuid;
+ private final int scaling;
- public JCRMailbox(final org.apache.james.imap.jcr.mail.model.JCRMailbox
mailbox, final MailboxSession session, final Repository repository, final
String workspace, final Log log) {
+ public JCRMailbox(final org.apache.james.imap.jcr.mail.model.JCRMailbox
mailbox, final MailboxSession session, final Repository repository, final
String workspace, final int scaling, final Log log) {
super(mailbox, session );
this.repository = repository;
this.workspace = workspace;
this.log = log;
this.uuid = mailbox.getUUID();
+ this.scaling = scaling;
}
+ /**
+ * Return the scaling depth
+ *
+ * @return scaling
+ */
+ protected int getScaling() {
+ return scaling;
+ }
+
@Override
public long getMailboxId() {
throw new UnsupportedOperationException("Please use getMailboxUUID for
this implementation");
@@ -110,7 +121,7 @@ public class JCRMailbox extends StoreMai
Session jcrSession = getSession(session);
JCRUtils.addJCRSession(session, jcrSession);
- JCRMessageMapper messageMapper = new JCRMessageMapper(jcrSession,
getMailboxUUID(), log);
+ JCRMessageMapper messageMapper = new JCRMessageMapper(jcrSession,
getMailboxUUID(), getScaling(), log);
return messageMapper;
@@ -127,7 +138,7 @@ public class JCRMailbox extends StoreMai
Session jcrSession = getSession(session);
JCRUtils.addJCRSession(session, jcrSession);
- JCRMailboxMapper mapper = new JCRMailboxMapper(jcrSession, log);
+ JCRMailboxMapper mapper = new JCRMailboxMapper(jcrSession,
getScaling(), log);
return mapper;
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
Fri Mar 19 14:29:19 2010
@@ -56,16 +56,26 @@ public class JCRMailboxManager extends S
private final Repository repository;
private final String workspace;
private final Log logger = LogFactory.getLog(JCRMailboxManager.class);
- public JCRMailboxManager(final Authenticator authenticator, final
Subscriber subscriber, final Repository repository, final String workspace) {
+ private final int scaling;
+ public JCRMailboxManager(final Authenticator authenticator, final
Subscriber subscriber, final Repository repository, final String workspace,
final int scaling) {
super(authenticator, subscriber);
this.repository = repository;
this.workspace = workspace;
+ this.scaling = scaling;
}
+ /**
+ * Return the scaling depth
+ *
+ * @return scaling
+ */
+ protected int getScaling() {
+ return scaling;
+ }
@Override
protected StoreMailbox createMailbox(Mailbox mailboxRow, MailboxSession
session) {
- JCRMailbox mailbox = new
JCRMailbox((org.apache.james.imap.jcr.mail.model.JCRMailbox) mailboxRow,
session, getRepository(), getWorkspace(), getLog());
+ JCRMailbox mailbox = new
JCRMailbox((org.apache.james.imap.jcr.mail.model.JCRMailbox) mailboxRow,
session, getRepository(), getWorkspace(), getScaling(), getLog());
return mailbox;
}
@@ -76,7 +86,7 @@ public class JCRMailboxManager extends S
JCRUtils.addJCRSession(session, jcrSession);
- JCRMailboxMapper mapper = new JCRMailboxMapper(jcrSession, getLog());
+ JCRMailboxMapper mapper = new JCRMailboxMapper(jcrSession,
getScaling(), getLog());
return mapper;
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
Fri Mar 19 14:29:19 2010
@@ -47,20 +47,32 @@ public class JCRSubscriptionManager exte
private final Log logger = LogFactory.getLog(JCRSubscriptionManager.class);
private final Repository repository;
private final String workspace;
+ private final int scaling;
- public JCRSubscriptionManager(final Repository repository, final String
workspace) {
+ public JCRSubscriptionManager(final Repository repository, final String
workspace, final int scaling) {
super();
+ this.scaling = scaling;
this.workspace = workspace;
this.repository = repository;
}
+
+ /**
+ * Return the scaling depth
+ *
+ * @return scaling
+ */
+ protected int getScaling() {
+ return scaling;
+ }
+
@Override
protected SubscriptionMapper createMapper(MailboxSession session) throws
SubscriptionException {
Session jcrSession = getSession(session);
JCRUtils.addJCRSession(session, jcrSession);
- JCRSubscriptionMapper mapper = new JCRSubscriptionMapper(jcrSession,
logger);
+ JCRSubscriptionMapper mapper = new JCRSubscriptionMapper(jcrSession,
getScaling(), logger);
return mapper;
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java
Fri Mar 19 14:29:19 2010
@@ -21,7 +21,14 @@ package org.apache.james.imap.jcr;
import java.util.ArrayList;
import java.util.List;
+import javax.jcr.ItemExistsException;
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.version.VersionException;
import org.apache.jackrabbit.util.Text;
import org.apache.james.imap.mailbox.MailboxSession;
@@ -37,13 +44,112 @@ public class JCRUtils implements JCRImap
*/
public final static String JCR_SESSIONS = "JCR_SESSIONS";
+
+ /**
+ * Create a scaled path for the given path, where scaling is the nesting
mode.
+ * There will be no escaping of illegal chars at this point
+ *
+ * With scaling -1 it will create a sub-path for every char in the path.
+ *
+ * So for example:
+ *
+ * scaling = -1
+ * user/test:
+ * u/us/use/user/t/te/tes/test
+ *
+ * scaling = 2
+ * user/test:
+ * u/us/user/t/te/test
+ *
+ * scaling = 0
+ * user/test:
+ * user/test
+ *
+ *
+ * @param path
+ * @param scaling
+ * @return scaledPath
+ */
+ public static String createScaledPath(String path, int scaling) {
+ if (scaling == MIN_SCALING) {
+ return path;
+ } else {
+ StringBuffer buffer = new StringBuffer();
+ String[] pathParts = path.split(NODE_DELIMITER);
+
+ for (int a = 0; a < pathParts.length; a++) {
+ String subPath = pathParts[a];
+
+ for (int i = 0; i < subPath.length(); i++) {
+
+ if ( scaling != MAX_SCALING && i == scaling) {
+ buffer.append(subPath);
+
+ if (a +1 != pathParts.length) {
+ buffer.append(NODE_DELIMITER);
+ }
+ break;
+ } else {
+ buffer.append(subPath.substring(0,i +1));
+
+ if (i +1 != subPath.length() || a +1 !=
pathParts.length) {
+ buffer.append(NODE_DELIMITER);
+ }
+ }
+ }
+ }
+ return buffer.toString();
+ }
+ }
+
+ public static String createScaledPath(String[] paths, int scaling) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < paths.length; i++) {
+ String path = paths[i];
+ sb.append(path);
+ if (i + 1 != path.length()) {
+ sb.append(NODE_DELIMITER);
+ }
+ }
+ return createScaledPath(sb.toString(), scaling);
+ }
+
+
+
+ /**
+ * Create a node path recursive from the given root {...@link Node}. This
includes
+ * to create all subnodes
+ *
+ * @param rootNode
+ * @param nodePath
+ * @return lastNode
+ * @throws PathNotFoundException
+ * @throws ItemExistsException
+ * @throws VersionException
+ * @throws ConstraintViolationException
+ * @throws LockException
+ * @throws RepositoryException
+ */
+ public static Node createNodeRecursive(Node rootNode, String nodePath)
throws PathNotFoundException, ItemExistsException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
+ Node parent = rootNode;
+ String nodeNames[] = nodePath.split(NODE_DELIMITER);
+ for (int i = 0; i < nodeNames.length; i++) {
+ String nodeName = Text.escapeIllegalJcrChars(nodeNames[i]);
+ if (parent.hasNode(nodeName)) {
+ parent = parent.getNode(nodeName);
+ } else {
+ parent = parent.addNode(nodeName);
+ }
+ }
+ return parent;
+ }
/**
* Create a path which can be used for nodes. It handles the escaping etc
*
* @param subNodes
* @return completePath
*/
- public static String createPath(String... subNodes) {
+ public static String escapePath(String... subNodes) {
StringBuffer pathBuf = new StringBuffer();
for (int i = 0; i < subNodes.length; i++) {
@@ -59,7 +165,6 @@ public class JCRUtils implements JCRImap
}
}
return pathBuf.toString();
-
}
/**
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=925235&r1=925234&r2=925235&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
Fri Mar 19 14:29:19 2010
@@ -52,8 +52,8 @@ public class JCRMailboxMapper extends Ab
public final String PATH = PROPERTY_PREFIX + "mailboxes";
private final Log logger;
- public JCRMailboxMapper(final Session session, final Log logger) {
- super(session);
+ public JCRMailboxMapper(final Session session, final int scaling,final Log
logger) {
+ super(session, scaling);
this.logger = logger;
}
@@ -221,9 +221,7 @@ public class JCRMailboxMapper extends Ab
*/
public void save(Mailbox mailbox) throws StorageException {
- String nodePath = JCRUtils.createPath(PATH, mailbox.getName());
try {
- createNodeIfNotExists(PATH);
JCRMailbox jcrMailbox = (JCRMailbox)mailbox;
Node node = null;
@@ -231,7 +229,9 @@ public class JCRMailboxMapper extends Ab
node = getSession().getNodeByUUID(jcrMailbox.getUUID());
}
if (node == null) {
- node = getSession().getRootNode().addNode(nodePath);
+ String nodePath =
JCRUtils.escapePath(PATH,JCRUtils.createScaledPath(mailbox.getName(),
getScaling()));
+
+ node =
JCRUtils.createNodeRecursive(getSession().getRootNode(), nodePath);
node.addMixin(JcrConstants.MIX_REFERENCEABLE);
}
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=925235&r1=925234&r2=925235&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
Fri Mar 19 14:29:19 2010
@@ -50,8 +50,8 @@ public class JCRMessageMapper extends Ab
private final Log logger;
private final String uuid;
- public JCRMessageMapper(final Session session, final String uuid, final
Log logger) {
- super(session);
+ public JCRMessageMapper(final Session session, final String uuid, final
int scaling, final Log logger) {
+ super(session,scaling);
this.logger = logger;
this.uuid = uuid;
}
@@ -383,16 +383,16 @@ public class JCRMessageMapper extends Ab
public void save(MailboxMembership message) throws StorageException {
JCRMailboxMembership membership = (JCRMailboxMembership) message;
try {
- createNodeIfNotExists(PATH);
- Node messageNode = null;;
+ JCRUtils.createNodeRecursive(getSession().getRootNode(), PATH);
+ Node messageNode = null;
if (membership.isPersistent()) {
messageNode = getSession().getNodeByUUID(membership.getUUID());
}
if (messageNode == null) {
- String path = JCRUtils.createPath(PATH,
String.valueOf(membership.getUid()));
-
+ // TODO: Maybe we should use some kind of hashes for scaling
here
+ String path = JCRUtils.escapePath(PATH,
String.valueOf(membership.getUid()));
messageNode = getSession().getRootNode().addNode(path);
messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java?rev=925235&r1=925234&r2=925235&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
Fri Mar 19 14:29:19 2010
@@ -365,7 +365,7 @@ public class JCRMessage extends Abstract
// store new properties
for (int i = 0; i < newProperites.size(); i++) {
JCRProperty prop = (JCRProperty)newProperites.get(i);
- Node propNode =
propertiesNode.addNode(JCRUtils.createPath(prop.getNamespace()+ "." +
prop.getLocalName()));
+ Node propNode =
propertiesNode.addNode(JCRUtils.escapePath(String.valueOf(prop.getOrder())));
prop.merge(propNode);
}
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=925235&r1=925234&r2=925235&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
Fri Mar 19 14:29:19 2010
@@ -49,8 +49,8 @@ public class JCRSubscriptionMapper exten
private final Log log;
private final static String PATH = PROPERTY_PREFIX + "subscriptions";
- public JCRSubscriptionMapper(final Session session, final Log log) {
- super(session);
+ public JCRSubscriptionMapper(final Session session, final int
scaling,final Log log) {
+ super(session, scaling);
this.log = log;
}
@@ -146,7 +146,6 @@ public class JCRSubscriptionMapper exten
public void save(Subscription subscription) throws SubscriptionException {
String username = subscription.getUser();
String mailbox = subscription.getMailbox();
- String nodename = JCRUtils.createPath(PATH, username, mailbox);
try {
Node node = null;
@@ -155,11 +154,9 @@ public class JCRSubscriptionMapper exten
// its a new subscription
if (sub == null) {
- createNodeIfNotExists(PATH);
- // just a hack for now
- createNodeIfNotExists(JCRUtils.createPath(PATH,username));
+ String nodePath =
JCRUtils.escapePath(PATH,JCRUtils.createScaledPath(new String[] {username,
mailbox}, getScaling()));
- node = getSession().getRootNode().addNode(nodename);
+ node =
JCRUtils.createNodeRecursive(getSession().getRootNode(), nodePath);
node.addMixin(JcrConstants.MIX_REFERENCEABLE);
} else {
node = sub.getNode();
Added:
james/imap/trunk/jcr/src/test/java/org/apache/james/imap/jcr/JCRUtilsTest.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/test/java/org/apache/james/imap/jcr/JCRUtilsTest.java?rev=925235&view=auto
==============================================================================
---
james/imap/trunk/jcr/src/test/java/org/apache/james/imap/jcr/JCRUtilsTest.java
(added)
+++
james/imap/trunk/jcr/src/test/java/org/apache/james/imap/jcr/JCRUtilsTest.java
Fri Mar 19 14:29:19 2010
@@ -0,0 +1,58 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.imap.jcr;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class JCRUtilsTest {
+
+ @Test
+ public void testCreateScalingPath() {
+ String path = "user/myname";
+
+ // no scaling at all
+ String scaledPath = JCRUtils.createScaledPath(path, 0);
+ assertEquals(path, scaledPath);
+
+ // max scaling
+ String scaledPath2 = JCRUtils.createScaledPath(path, -1);
+ assertEquals("u/us/use/user/m/my/myn/myna/mynam/myname", scaledPath2);
+
+ // max scaling
+ String scaledPathInt = JCRUtils.createScaledPath(path, -1);
+ assertEquals("1", scaledPathInt);
+
+ // test with scaling longer then any sub path
+ String scaledPath3 = JCRUtils.createScaledPath(path, 10);
+ assertEquals("u/us/use/user/m/my/myn/myna/mynam/myname", scaledPath3);
+
+
+ // scaling of 2
+ String scaledPath4 = JCRUtils.createScaledPath(path, 2);
+ assertEquals("u/us/user/m/my/myname", scaledPath4);
+
+ // scaling of 4
+ String scaledPath5 = JCRUtils.createScaledPath(path, 4);
+ assertEquals("u/us/use/user/m/my/myn/myna/myname", scaledPath5);
+
+ }
+
+}
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=925235&r1=925234&r2=925235&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
Fri Mar 19 14:29:19 2010
@@ -199,7 +199,6 @@ public abstract class StoreMailboxManage
public void run() throws MailboxException {
Mailbox mailbox = mapper.findMailboxByName(mailboxName);
- System.out.println(mailbox);
if (mailbox == null) {
throw new MailboxNotFoundException("Mailbox not
found");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]