Author: norman
Date: Sat Mar 20 19:19:26 2010
New Revision: 925660
URL: http://svn.apache.org/viewvc?rev=925660&view=rev
Log:
Use CND for subscriptions (IMAP-120)
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/JCRUtils.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.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=925660&r1=925659&r2=925660&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
Sat Mar 20 19:19:26 2010
@@ -19,8 +19,14 @@
package org.apache.james.imap.functional.jcr;
import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
import org.apache.commons.io.FileUtils;
+import org.apache.jackrabbit.commons.cnd.CndImporter;
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.config.RepositoryConfig;
import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
@@ -56,6 +62,14 @@ public class JCRHostSystem extends ImapH
RepositoryConfig config = RepositoryConfig.create(new
InputSource(this.getClass().getClassLoader().getResourceAsStream("test-repository.xml")),
JACKRABBIT_HOME);
repository = RepositoryImpl.create(config);
+ Session session = repository.login(new SimpleCredentials("user",
new char[0]),"default");
+ // Register the custom node types defined in the CND file
+ // TODO: should we move this to the MailboxManager implementation ?
+ InputStream is = Thread.currentThread().getContextClassLoader()
+
.getResourceAsStream("org/apache/james/imap/jcr/imap.cnd");
+ CndImporter.registerNodeTypes(new InputStreamReader(is), session);
+ session.logout();
+
userManager = new InMemoryUserManager();
mailboxManager = new JCRGlobalUserMailboxManager(userManager, new
JCRGlobalUserSubscriptionManager(repository, null, "user", "pass",
JCRImapConstants.MAX_SCALING), repository, null, "user", "pass",
JCRImapConstants.MAX_SCALING);
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=925660&r1=925659&r2=925660&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
Sat Mar 20 19:19:26 2010
@@ -131,6 +131,10 @@ public class JCRUtils implements JCRImap
* @throws RepositoryException
*/
public static Node createNodeRecursive(Node rootNode, String nodePath)
throws PathNotFoundException, ItemExistsException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
+ return createNodeRecursive(rootNode, nodePath, null);
+ }
+
+ public static Node createNodeRecursive(Node rootNode, String nodePath,
String primaryNodeTypeName) throws PathNotFoundException, ItemExistsException,
VersionException, ConstraintViolationException, LockException,
RepositoryException {
Node parent = rootNode;
String nodeNames[] = nodePath.split(NODE_DELIMITER);
for (int i = 0; i < nodeNames.length; i++) {
@@ -138,7 +142,11 @@ public class JCRUtils implements JCRImap
if (parent.hasNode(nodeName)) {
parent = parent.getNode(nodeName);
} else {
- parent = parent.addNode(nodeName);
+ if (i +1 == nodeNames.length && primaryNodeTypeName != null) {
+ parent = parent.addNode(nodeName, primaryNodeTypeName);
+ } else {
+ parent = parent.addNode(nodeName);
+ }
}
}
return parent;
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=925660&r1=925659&r2=925660&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
Sat Mar 20 19:19:26 2010
@@ -31,7 +31,6 @@ import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import org.apache.commons.logging.Log;
-import org.apache.jackrabbit.JcrConstants;
import org.apache.james.imap.api.display.HumanReadableText;
import org.apache.james.imap.jcr.AbstractJCRMapper;
import org.apache.james.imap.jcr.JCRUtils;
@@ -86,7 +85,7 @@ public class JCRSubscriptionMapper exten
*/
public Subscription findFindMailboxSubscriptionForUser(String user, String
mailbox) throws SubscriptionException {
try {
- String queryString = "//" + PATH + "//element(*)[@" +
JCRSubscription.USERNAME_PROPERTY + "='" + user + "'] AND [@" +
JCRSubscription.MAILBOX_PROPERTY +"='" + mailbox + "']";
+ String queryString = "//" + PATH +
"//element(*,imap:subscription)[@" + JCRSubscription.USERNAME_PROPERTY + "='" +
user + "'] AND [@" + JCRSubscription.MAILBOX_PROPERTY +"='" + mailbox + "']";
QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
@@ -116,7 +115,7 @@ public class JCRSubscriptionMapper exten
public List<Subscription> findSubscriptionsForUser(String user) throws
SubscriptionException {
List<Subscription> subList = new ArrayList<Subscription>();
try {
- String queryString = "//" + PATH + "//element(*)[@" +
JCRSubscription.USERNAME_PROPERTY + "='" + user + "']";
+ String queryString = "//" + PATH +
"//element(*,imap:subscription)[@" + JCRSubscription.USERNAME_PROPERTY + "='" +
user + "']";
QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
@@ -156,8 +155,7 @@ public class JCRSubscriptionMapper exten
if (sub == null) {
String nodePath =
JCRUtils.escapePath(PATH,JCRUtils.createScaledPath(new String[] {username,
mailbox}, getScaling()));
- node =
JCRUtils.createNodeRecursive(getSession().getRootNode(), nodePath);
- node.addMixin(JcrConstants.MIX_REFERENCEABLE);
+ node =
JCRUtils.createNodeRecursive(getSession().getRootNode(), nodePath,
"imap:subscription");
} else {
node = sub.getNode();
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java?rev=925660&r1=925659&r2=925660&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java
Sat Mar 20 19:19:26 2010
@@ -23,7 +23,6 @@ import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.apache.commons.logging.Log;
-import org.apache.jackrabbit.JcrConstants;
import org.apache.james.imap.jcr.Persistent;
import org.apache.james.imap.jcr.JCRImapConstants;
import org.apache.james.imap.store.user.model.Subscription;
@@ -35,8 +34,8 @@ import org.apache.james.imap.store.user.
public class JCRSubscription implements Subscription, Persistent,
JCRImapConstants {
private static final String TOSTRING_SEPARATOR = " ";
- public final static String USERNAME_PROPERTY = PROPERTY_PREFIX +
"subscriptionUsername";
- public final static String MAILBOX_PROPERTY = PROPERTY_PREFIX +
"subscriptionMailbox";
+ public final static String USERNAME_PROPERTY = "imap:subscriptionUsername";
+ public final static String MAILBOX_PROPERTY = "imap:subscriptionMailbox";
private Node node;
private final Log log;
@@ -122,22 +121,13 @@ public class JCRSubscription implements
*/
}
- public String getUUID() {
- if (isPersistent()) {
- try {
- return node.getUUID();
- } catch (RepositoryException e) {
- log.error("Unable to access property " +
JcrConstants.JCR_UUID, e);
- }
- }
- return null;
- }
-
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
- result = PRIME * result + getUUID().hashCode();
+ result = PRIME * result + getUser().hashCode();
+ result = PRIME * result + getMailbox().hashCode();
+
return result;
}
@@ -150,7 +140,7 @@ public class JCRSubscription implements
if (getClass() != obj.getClass())
return false;
final JCRSubscription other = (JCRSubscription) obj;
- if (getUUID() != other.getUUID())
+ if (getUser() != other.getUser() || getMailbox() != other.getMailbox())
return false;
return true;
}
@@ -162,7 +152,6 @@ public class JCRSubscription implements
*/
public String toString() {
final String result = "Subscription ( "
- + "uuid = " + this.getUUID() + TOSTRING_SEPARATOR
+ "user = " + this.getUser() + TOSTRING_SEPARATOR
+ "mailbox = " + this.getMailbox() + TOSTRING_SEPARATOR
+ " )";
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]