You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/03/17 19:58:38 UTC

svn commit: r924419 - in /james/imap/trunk: deployment/src/test/resources/ jcr/src/main/java/org/apache/james/imap/jcr/ jcr/src/main/java/org/apache/james/imap/jcr/mail/ jcr/src/main/java/org/apache/james/imap/jcr/mail/model/ jcr/src/main/java/org/apac...

Author: norman
Date: Wed Mar 17 18:58:37 2010
New Revision: 924419

URL: http://svn.apache.org/viewvc?rev=924419&view=rev
Log:
More fixes for JCR implementation, now only 3 tests fails (IMAP-93) 

Modified:
    james/imap/trunk/deployment/src/test/resources/test-repository.xml
    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/JCRHeader.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.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/mail/model/JCRProperty.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/resources/test-repository.xml
URL: http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/resources/test-repository.xml?rev=924419&r1=924418&r2=924419&view=diff
==============================================================================
--- james/imap/trunk/deployment/src/test/resources/test-repository.xml (original)
+++ james/imap/trunk/deployment/src/test/resources/test-repository.xml Wed Mar 17 18:58:37 2010
@@ -54,7 +54,7 @@
             class: FQN of class implementing the PersistenceManager interface
         -->
 		<PersistenceManager class="org.apache.jackrabbit.core.persistence.mem.InMemPersistenceManager">
-			<param name="persistent" value="true"/>
+			<param name="persistent" value="false"/>
 		</PersistenceManager>
         
         <SearchIndex class='org.apache.jackrabbit.core.query.lucene.SearchIndex'>
@@ -74,7 +74,7 @@
         </FileSystem>
 
 		<PersistenceManager class="org.apache.jackrabbit.core.persistence.mem.InMemPersistenceManager">
-			<param name="persistent" value="true"/>
+			<param name="persistent" value="false"/>
 		</PersistenceManager>
         
     </Versioning>

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=924419&r1=924418&r2=924419&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 Wed Mar 17 18:58:37 2010
@@ -97,4 +97,6 @@ public class JCRUtils implements JCRImap
             session.getAttributes().put(JCR_SESSIONS, sessions); 
         }
     }
+    
+    
 }

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=924419&r1=924418&r2=924419&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 Mar 17 18:58:37 2010
@@ -225,21 +225,15 @@ public class JCRMailboxMapper extends Ab
         try {
             createNodeIfNotExists(PATH);
             JCRMailbox jcrMailbox = (JCRMailbox)mailbox;
-            JCRMailbox savedMailbox = null;
+            Node node = null;
 
-            try {
-                savedMailbox = (JCRMailbox) findMailboxByName(mailbox.getName());
-            } catch (MailboxNotFoundException e) {
-                // no mailbox with this name..
+            if (jcrMailbox.isPersistent()) {
+                node = getSession().getNodeByUUID(jcrMailbox.getUUID());
             }
-            
-            Node node;
-            if (savedMailbox == null) {
+            if (node == null) {
                 node = getSession().getRootNode().addNode(nodePath);
                 node.addMixin(JcrConstants.MIX_REFERENCEABLE);
-            } else {
-                node = savedMailbox.getNode();
-            }
+           } 
             
             jcrMailbox.merge(node);
 

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=924419&r1=924418&r2=924419&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 Mar 17 18:58:37 2010
@@ -387,12 +387,15 @@ public class JCRMessageMapper extends Ab
         JCRMailboxMembership membership = (JCRMailboxMembership) message;
         try {
             createNodeIfNotExists(PATH);
-            String path = JCRUtils.createPath(PATH, String.valueOf(membership.getUid()));
-            Node messageNode;
+            Node messageNode = null;;
             
-            if (getSession().getRootNode().hasNode(path)) {
-                messageNode = getSession().getRootNode().getNode(path);
-            } else {
+            if (membership.isPersistent()) {
+                messageNode = getSession().getNodeByUUID(membership.getUUID());
+            }
+
+            if (messageNode == null) {
+                String path = JCRUtils.createPath(PATH, String.valueOf(membership.getUid()));
+
                 messageNode = getSession().getRootNode().addNode(path);
                 messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
             }
@@ -455,7 +458,7 @@ public class JCRMessageMapper extends Ab
                     } else if (low == high) {
                         queryBuilder.append(" AND [@" + JCRMailboxMembership.UID_PROPERTY +"=").append(low).append("]");
                     } else {
-                        queryBuilder.append(" AND [@" + JCRMailboxMembership.UID_PROPERTY +"<").append(low).append("] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">").append(high).append("]");
+                        queryBuilder.append(" AND [@" + JCRMailboxMembership.UID_PROPERTY +"<=").append(high).append("] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=").append(low).append("]");
                     }
                 }
             }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java?rev=924419&r1=924418&r2=924419&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java Wed Mar 17 18:58:37 2010
@@ -22,6 +22,7 @@ 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.mail.model.AbstractComparableHeader;
@@ -33,6 +34,7 @@ import org.apache.james.imap.store.mail.
  *
  */
 public class JCRHeader extends AbstractComparableHeader implements JCRImapConstants, Persistent{
+    private static final String TOSTRING_SEP = " ";
 
     public final static String FIELDNAME_PROPERTY = PROPERTY_PREFIX + "headerFieldName";
     public final static String VALUE_PROPERTY = PROPERTY_PREFIX + "headerFalue";
@@ -145,4 +147,51 @@ public class JCRHeader extends AbstractC
         this.value = null;
         */
     }
+    
+    
+    public String getUUID() {
+        if (isPersistent()) {
+            try {
+                return node.getUUID();
+            } catch (RepositoryException e) {
+                logger.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();
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JCRHeader other = (JCRHeader) obj;
+        if (getUUID() != other.getUUID())
+            return false;
+        return true;
+    }
+
+    public String toString()
+    {
+        final String retValue =  "Header ( "
+            + "UUID = " + this.getUUID() + TOSTRING_SEP
+            + "lineNumber = " + this.getLineNumber() + TOSTRING_SEP
+            + "field = " + this.getFieldName() + TOSTRING_SEP
+            + "value = " + this.getValue() + TOSTRING_SEP
+            + " )";
+        return retValue;
+    }
+
 }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java?rev=924419&r1=924418&r2=924419&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java Wed Mar 17 18:58:37 2010
@@ -33,12 +33,13 @@ import org.apache.james.imap.store.mail.
  */
 public class JCRMailbox implements Mailbox, JCRImapConstants, Persistent{
 
-    public final static String ID_PROPERTY = PROPERTY_PREFIX + "mailboxId";
+    private static final String TAB = " ";
+
+    
     public final static String NAME_PROPERTY = PROPERTY_PREFIX + "mailboxName";
     public final static String UIDVALIDITY_PROPERTY = PROPERTY_PREFIX + "mailboxUidValidity";
     public final static String LASTUID_PROPERTY = PROPERTY_PREFIX + "mailboxLastUid";
 
-    private long id = -1;
     private String name;
     private long uidValidity;
     private long lastUid = 0;
@@ -97,21 +98,6 @@ public class JCRMailbox implements Mailb
         return lastUid;
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.store.mail.model.Mailbox#getMailboxId()
-     */
-    public long getMailboxId() {
-        if (isPersistent()) {
-            try {
-                return node.getProperty(ID_PROPERTY).getLong();
-            } catch (RepositoryException e) {
-                logger.error("Unable to access property " + ID_PROPERTY, e);
-            }
-        }
-        return id;
-    }
-
    
     /*
      * (non-Javadoc)
@@ -181,7 +167,6 @@ public class JCRMailbox implements Mailb
      * @see org.apache.james.imap.jcr.Persistent#merge(javax.jcr.Node)
      */
     public void  merge(Node node) throws RepositoryException {
-        node.setProperty(ID_PROPERTY,  getMailboxId());
         node.setProperty(NAME_PROPERTY, getName());
         node.setProperty(UIDVALIDITY_PROPERTY, getUidValidity());
         node.setProperty(LASTUID_PROPERTY, getLastUid());   
@@ -205,4 +190,47 @@ public class JCRMailbox implements Mailb
         }
         return null;  
     }
+    
+    @Override
+    public String toString()
+    {
+        final String retValue = "Mailbox ( "
+            + "mailboxUID = " + this.getUUID() + TAB
+            + "name = " + this.getName() + TAB
+            + "uidValidity = " + this.getUidValidity() + TAB
+            + "lastUid = " + this.getLastUid() + TAB
+            + " )";
+        return retValue;
+    }
+    
+    @Override
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + (int) getUUID().hashCode();
+        return result;
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JCRMailbox other = (JCRMailbox) obj;
+        if (getUUID() != other.getUUID())
+            return false;
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.imap.store.mail.model.Mailbox#getMailboxId()
+     */
+    public long getMailboxId() {
+        return getUUID().hashCode();
+    }
+
 }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java?rev=924419&r1=924418&r2=924419&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java Wed Mar 17 18:58:37 2010
@@ -42,6 +42,7 @@ import org.apache.james.imap.store.mail.
  */
 public class JCRMailboxMembership extends AbstractMailboxMembership implements
 		Persistent, JCRImapConstants {
+    private static final String TOSTRING_SEPARATOR = " ";
 
 	public final static String MAILBOX_UUID_PROPERTY = PROPERTY_PREFIX
 			+ "mailboxUUID";
@@ -480,5 +481,50 @@ public class JCRMailboxMembership extend
 		uid = 0;
 		*/
 	}
+	
+
+    @Override
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + getUUID().hashCode();
+        result = PRIME * result + getMailboxUUID().hashCode();
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JCRMailboxMembership other = (JCRMailboxMembership) obj;
+        if (getMailboxUUID() != other.getMailboxUUID())
+            return false;
+        if (getUUID() != other.getUUID())
+            return false;
+        return true;
+    }
+
+    public String toString()
+    {
+        final String retValue = 
+            "mailbox("
+            + "mailboxUUID = " + this.getMailboxUUID() + TOSTRING_SEPARATOR
+            + "uuid = " + this.getUUID() + TOSTRING_SEPARATOR
+            + "internalDate = " + this.getInternalDate() + TOSTRING_SEPARATOR
+            + "size = " + this.getSize() + TOSTRING_SEPARATOR
+            + "answered = " + this.isAnswered() + TOSTRING_SEPARATOR
+            + "deleted = " + this.isDeleted() + TOSTRING_SEPARATOR
+            + "draft = " + this.isDraft() + TOSTRING_SEPARATOR
+            + "flagged = " + this.isFlagged() + TOSTRING_SEPARATOR
+            + "recent = " + this.isRecent() + TOSTRING_SEPARATOR
+            + "seen = " + this.isSeen() + TOSTRING_SEPARATOR
+            + " )";
+
+        return retValue;
+    }
 
 }

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=924419&r1=924418&r2=924419&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 Wed Mar 17 18:58:37 2010
@@ -327,6 +327,7 @@ public class JCRMessage extends Abstract
             }
         } else {
             headersNode = node.addNode(HEADERS_NODE);
+            headersNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
         }
         
             
@@ -356,6 +357,8 @@ public class JCRMessage extends Abstract
             }
         } else {
             propertiesNode = node.addNode(PROPERTIES_NODE);
+            propertiesNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
+
         }
         
 
@@ -394,5 +397,38 @@ public class JCRMessage extends Abstract
         }
         return bodyStartOctet;
     }
+    
+
+    @Override
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + getUUID().hashCode();
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JCRMessage other = (JCRMessage) obj;
+        if (getUUID() != other.getUUID())
+            return false;
+        return true;
+    }
+
+    public String toString()
+    {
+        final String retValue = 
+            "message("
+            + "uuid = " + getUUID()
+            + " )";
+        return retValue;
+    }
+
 
 }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java?rev=924419&r1=924418&r2=924419&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java Wed Mar 17 18:58:37 2010
@@ -22,6 +22,7 @@ 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;
 
@@ -169,4 +170,58 @@ public class JCRProperty extends Abstrac
         value = null;
         */
     }
+    
+    
+    public String getUUID() {
+        if (isPersistent()) {
+            try {
+                return node.getUUID();
+            } catch (RepositoryException e) {
+                logger.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();
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JCRProperty other = (JCRProperty) obj;
+        if (getUUID() != other.getUUID())
+            return false;
+        return true;
+    }
+
+    /**
+     * Constructs a <code>String</code> with all attributes
+     * in name = value format.
+     *
+     * @return a <code>String</code> representation 
+     * of this object.
+     */
+    public String toString()
+    {
+        final String result = "Property ( "
+            + "uuid = " + this.getUUID() + " "
+            + "localName = " + this.getLocalName() + " "
+            + "namespace = " + this.getNamespace() + " "
+            + "value = " + this.getValue() 
+            + " )";
+    
+        return result;
+    }
 }

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=924419&r1=924418&r2=924419&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 Mar 17 18:58:37 2010
@@ -31,6 +31,7 @@ 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;
@@ -139,8 +140,8 @@ public class JCRSubscriptionMapper exten
         String nodename = JCRUtils.createPath(PATH, username, mailbox);
         try {
 
-            
-            Node node;
+            Node node = null;
+         
             JCRSubscription sub = (JCRSubscription) findFindMailboxSubscriptionForUser(username, mailbox);
             
             // its a new subscription
@@ -150,6 +151,7 @@ public class JCRSubscriptionMapper exten
                 createNodeIfNotExists(JCRUtils.createPath(PATH,username));
                 
                 node = getSession().getRootNode().addNode(nodename);
+                node.addMixin(JcrConstants.MIX_REFERENCEABLE);
             } 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=924419&r1=924418&r2=924419&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 Wed Mar 17 18:58:37 2010
@@ -23,6 +23,7 @@ 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;
@@ -32,6 +33,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";
     
@@ -118,5 +121,55 @@ public class JCRSubscription implements 
         username = null;
         */
     }
+    
+    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();
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JCRSubscription other = (JCRSubscription) obj;
+        if (getUUID() != other.getUUID())
+            return false;
+        return true;
+    }
+
+    /**
+     * Renders output suitable for debugging.
+     *
+     * @return output suitable for debugging
+     */
+    public String toString()
+    {
+        final String result = "Subscription ( "
+            + "uuid = " + this.getUUID() + TOSTRING_SEPARATOR
+            + "user = " + this.getUser() + TOSTRING_SEPARATOR
+            + "mailbox = " + this.getMailbox() + TOSTRING_SEPARATOR
+            + " )";
+    
+        return result;
+    }
+    
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org