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]

Reply via email to