Author: norman
Date: Sun Mar 21 11:33:23 2010
New Revision: 925754

URL: http://svn.apache.org/viewvc?rev=925754&view=rev
Log:
more work on using CND and organize the node tree (IMAP-120)

Modified:
    james/imap/trunk/deployment/src/test/resources/log4j.properties
    
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/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/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/resources/org/apache/james/imap/jcr/imap.cnd
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java

Modified: james/imap/trunk/deployment/src/test/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/resources/log4j.properties?rev=925754&r1=925753&r2=925754&view=diff
==============================================================================
--- james/imap/trunk/deployment/src/test/resources/log4j.properties (original)
+++ james/imap/trunk/deployment/src/test/resources/log4j.properties Sun Mar 21 
11:33:23 2010
@@ -1,4 +1,4 @@
-log4j.rootLogger=WARN, A1
+log4j.rootLogger=ERROR, A1
 log4j.appender.A1=org.apache.log4j.ConsoleAppender
 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
 

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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -81,6 +81,7 @@ public abstract class AbstractJCRMapper 
                 session.save();
             }
         } catch (RepositoryException e) {
+            e.printStackTrace();
             throw new MailboxException(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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -46,7 +46,7 @@ import org.apache.james.imap.store.mail.
 
 public class JCRMessageMapper extends AbstractJCRMapper implements 
MessageMapper {
 
-    private final static String PATH = PROPERTY_PREFIX + "mailboxMemberships";
+    private final static String PATH =  "mailboxes";
     private final Log logger;
     private final String uuid;
 
@@ -64,7 +64,7 @@ public class JCRMessageMapper extends Ab
      */
     public long countMessagesInMailbox() throws StorageException {
         try {
-            String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
+            String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
             QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             NodeIterator nodes = result.getNodes();
@@ -94,7 +94,7 @@ public class JCRMessageMapper extends Ab
     public long countUnseenMessagesInMailbox() throws StorageException {
         
         try {
-            String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.SEEN_PROPERTY +"='false']";
+            String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.SEEN_PROPERTY +"='false']";
             QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             NodeIterator nodes = result.getNodes();
@@ -172,7 +172,7 @@ public class JCRMessageMapper extends Ab
 
     private List<MailboxMembership> findMessagesInMailboxAfterUID(String uuid, 
long uid) throws RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -186,7 +186,7 @@ public class JCRMessageMapper extends Ab
 
     private List<MailboxMembership> findMessagesInMailboxWithUID(String uuid, 
long uid) throws RepositoryException  {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "=" + uid + "] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "=" + uid + "] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -200,7 +200,7 @@ public class JCRMessageMapper extends Ab
 
     private List<MailboxMembership> findMessagesInMailboxBetweenUIDs(String 
uuid, long from, long to) throws RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "<=" + to + "] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "<=" + to + "] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
         
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -215,7 +215,7 @@ public class JCRMessageMapper extends Ab
     private List<MailboxMembership> findMessagesInMailbox(String uuid) throws 
RepositoryException {        
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
         getSession().refresh(true);
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -231,7 +231,7 @@ public class JCRMessageMapper extends Ab
     
     private List<MailboxMembership> 
findDeletedMessagesInMailboxAfterUID(String uuid, long uid) throws 
RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
  
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -245,7 +245,7 @@ public class JCRMessageMapper extends Ab
 
     private List<MailboxMembership> findDeletedMessagesInMailboxWithUID(String 
uuid, long uid) throws RepositoryException  {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "=" + uid + "] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true']  order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "=" + uid + "] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true']  order by @" + 
JCRMailboxMembership.UID_PROPERTY;
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
 
@@ -259,7 +259,7 @@ public class JCRMessageMapper extends Ab
 
     private List<MailboxMembership> 
findDeletedMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws 
RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "<=" + to + "] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + 
JCRMailboxMembership.UID_PROPERTY + "<=" + to + "] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
        
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -274,7 +274,7 @@ public class JCRMessageMapper extends Ab
     private List<MailboxMembership> findDeletedMessagesInMailbox(String uuid) 
throws RepositoryException {
         
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-        String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+        String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.DELETED_PROPERTY+ "='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
         
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -333,7 +333,7 @@ public class JCRMessageMapper extends Ab
         
         try {
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-            String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.RECENT_PROPERTY +"='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+            String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.RECENT_PROPERTY +"='true'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
             
             QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -357,7 +357,7 @@ public class JCRMessageMapper extends Ab
     public List<MailboxMembership> findUnseenMessagesInMailbox() throws 
StorageException {
         try {
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
-            String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.SEEN_PROPERTY +"='false'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
+            String queryString = "//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + 
JCRMailboxMembership.SEEN_PROPERTY +"='false'] order by @" + 
JCRMailboxMembership.UID_PROPERTY;
           
             QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
@@ -383,7 +383,8 @@ public class JCRMessageMapper extends Ab
     public void save(MailboxMembership message) throws StorageException {
         JCRMailboxMembership membership = (JCRMailboxMembership) message;
         try {
-            JCRUtils.createNodeRecursive(getSession().getRootNode(), PATH);
+            Node mailboxNode = getSession().getNodeByUUID(uuid);
+            //JCRUtils.createNodeRecursive(getSession().getRootNode(), 
mailboxN);
             Node messageNode = null;
             
             if (membership.isPersistent()) {
@@ -392,8 +393,9 @@ public class JCRMessageMapper extends Ab
 
             if (messageNode == null) {
                 // 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);
+                String path = mailboxNode.getPath() + NODE_DELIMITER + 
JCRUtils.escapePath(String.valueOf(membership.getUid()));
+                path = path.substring(1, path.length());
+                messageNode = 
getSession().getRootNode().addNode(path,"imap:mailboxMembership");
                 messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
             }
             membership.merge(messageNode);
@@ -439,7 +441,7 @@ public class JCRMessageMapper extends Ab
      */
     private String formulateXPath(String uuid, SearchQuery query) {
         final StringBuilder queryBuilder = new StringBuilder(50);
-        queryBuilder.append("//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] ");
+        queryBuilder.append("//" + PATH + 
"//element(*,imap:mailboxMembership)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] ");
         final List<Criterion> criteria = query.getCriterias();
         if (criteria.size() == 1) {
             final Criterion firstCriterion = criteria.get(0);

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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -22,7 +22,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.mail.model.AbstractComparableHeader;
@@ -36,9 +35,9 @@ 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";
-    public final static String LINENUMBER_PROPERTY = PROPERTY_PREFIX + 
"headerLineNumber";
+    public final static String FIELDNAME_PROPERTY = "imap:headerFieldName";
+    public final static String VALUE_PROPERTY = "imap:headerValue";
+    public final static String LINENUMBER_PROPERTY = "imap:headerLineNumber";
 
     private String fieldName;
     private String value;
@@ -147,25 +146,15 @@ 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();
+        result = PRIME * result + getFieldName().hashCode();
+        result = PRIME * result + getValue().hashCode();
+
         return result;
     }
 
@@ -178,14 +167,13 @@ public class JCRHeader extends AbstractC
         if (getClass() != obj.getClass())
             return false;
         final JCRHeader other = (JCRHeader) obj;
-        if (getUUID() != other.getUUID())
+        if (getValue() != other.getValue() || getFieldName() != 
other.getFieldName())
             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

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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -44,23 +44,19 @@ public class JCRMailboxMembership extend
                Persistent, JCRImapConstants {
     private static final String TOSTRING_SEPARATOR = " ";
 
-       public final static String MAILBOX_UUID_PROPERTY = PROPERTY_PREFIX
-                       + "mailboxUUID";
-       public final static String UID_PROPERTY = PROPERTY_PREFIX + "uid";
-       public final static String SIZE_PROPERTY = PROPERTY_PREFIX + "size";
-       public final static String ANSWERED_PROPERTY = PROPERTY_PREFIX
-                       + "answered";
-       public final static String DELETED_PROPERTY = PROPERTY_PREFIX
-                       + "deleted";
-       public final static String DRAFT_PROPERTY = PROPERTY_PREFIX + "draft";
-       public final static String FLAGGED_PROPERTY = PROPERTY_PREFIX + 
"flagged";
-       public final static String RECENT_PROPERTY = PROPERTY_PREFIX
-                       + "recent";
-       public final static String SEEN_PROPERTY = PROPERTY_PREFIX + "seen";
-       public final static String INTERNAL_DATE_PROPERTY = PROPERTY_PREFIX
-                       + "internalDate";
+       public final static String MAILBOX_UUID_PROPERTY = "imap:mailboxUUID";
+       public final static String UID_PROPERTY = "imap:uid";
+       public final static String SIZE_PROPERTY = "imap:size";
+       public final static String ANSWERED_PROPERTY = "imap:answered";
+       public final static String DELETED_PROPERTY = "imap:deleted";
+       public final static String DRAFT_PROPERTY =  "imap:draft";
+       public final static String FLAGGED_PROPERTY = "imap:flagged";
+       public final static String RECENT_PROPERTY = "imap:recent";
+       public final static String SEEN_PROPERTY = "imap:seen";
+       public final static String INTERNAL_DATE_PROPERTY = "imap:internalDate";
+    public final static String MESSAGE_NODE = "message";
 
-       public final static String MESSAGE_NODE = "message";
+       public final static String MESSAGE_NODE_TYPE = "imap:message";
        
        private String mailboxUUID;
        private long uid;
@@ -460,7 +456,7 @@ public class JCRMailboxMembership extend
                if (node.hasNode(MESSAGE_NODE)) {
                    messageNode = node.getNode(MESSAGE_NODE);
                } else {
-               messageNode = node.addNode(MESSAGE_NODE);
+               messageNode = node.addNode(MESSAGE_NODE, MESSAGE_NODE_TYPE);
                messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
                }
                ((JCRMessage)getDocument()).merge(messageNode);

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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -58,13 +58,16 @@ public class JCRMessage extends Abstract
     private List<JCRProperty> properties;
     private int bodyStartOctet;
     
-    public final static String BODY_START_OCTET_PROPERTY = PROPERTY_PREFIX + 
"messageBodyStartOctet";
-    public final static String FULL_CONTENT_OCTETS_PROPERTY = PROPERTY_PREFIX 
+ "messageFullContentOctets";
-    public final static String HEADERS_NODE = PROPERTY_PREFIX + 
"messageHeaders";
-    public final static String PROPERTIES_NODE = PROPERTY_PREFIX + 
"messageProperties";
+    public final static String BODY_START_OCTET_PROPERTY = 
"imap:messageBodyStartOctet";
+    public final static String FULL_CONTENT_OCTETS_PROPERTY =  
"imap:messageFullContentOctets";
+    public final static String HEADERS_NODE_TYPE =  "imap:messageHeaders";
+    public final static String HEADERS_NODE =  "messageHeaders";
 
-    public final static String TEXTUAL_LINE_COUNT_PROPERTY  = PROPERTY_PREFIX 
+ "messageTextualLineCount";
-    public final static String SUBTYPE_PROPERTY  = PROPERTY_PREFIX + 
"messageSubType";
+    public final static String PROPERTIES_NODE_TYPE =  
"imap:messageProperties";
+    public final static String PROPERTIES_NODE =  "messageProperties";
+
+    public final static String TEXTUAL_LINE_COUNT_PROPERTY  = 
"imap:messageTextualLineCount";
+    public final static String SUBTYPE_PROPERTY  = "imap:messageSubType";
 
     public JCRMessage(Node node, Log logger) {
         this.logger= logger;
@@ -326,15 +329,14 @@ public class JCRMessage extends Abstract
                 iterator.nextNode().remove();
             }
         } else {
-            headersNode = node.addNode(HEADERS_NODE);
-            headersNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
+            headersNode = node.addNode(HEADERS_NODE, HEADERS_NODE_TYPE);
         }
         
             
         // add headers to the message again
         for (int i = 0; i < newHeaders.size(); i++) {
             JCRHeader header = (JCRHeader) newHeaders.get(i);
-            Node headerNode = headersNode.addNode(header.getFieldName());
+            Node headerNode = headersNode.addNode(header.getFieldName(), 
"imap:messageHeader");
             header.merge(headerNode);
         }
       
@@ -356,16 +358,14 @@ public class JCRMessage extends Abstract
                 iterator.nextNode().remove();
             }
         } else {
-            propertiesNode = node.addNode(PROPERTIES_NODE);
-            propertiesNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
-
+            propertiesNode = node.addNode(PROPERTIES_NODE, 
"imap:messageProperties");
         }
         
 
         // store new properties
         for (int i = 0; i < newProperites.size(); i++) {
             JCRProperty prop = (JCRProperty)newProperites.get(i);
-            Node propNode = 
propertiesNode.addNode(JCRUtils.escapePath(String.valueOf(prop.getOrder())));
+            Node propNode = 
propertiesNode.addNode(JCRUtils.escapePath(String.valueOf(prop.getOrder())), 
"imap:messageProperty");
             prop.merge(propNode);
         }
       

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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -22,7 +22,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;
 
@@ -42,10 +41,10 @@ public class JCRProperty extends Abstrac
     private String value;
     private int order;
 
-    public final static String NAMESPACE_PROPERTY = PROPERTY_PREFIX + 
"namespace";
-    public final static String LOCALNAME_PROPERTY = PROPERTY_PREFIX + 
"localName";
-    public final static String VALUE_PROPERTY = PROPERTY_PREFIX + "value";
-    public final static String ORDER_PROPERTY = PROPERTY_PREFIX + "order";
+    public final static String NAMESPACE_PROPERTY = "imap:propertyNamespace";
+    public final static String LOCALNAME_PROPERTY =  "imap:propertyLocalName";
+    public final static String VALUE_PROPERTY =  "imap:propertyValue";
+    public final static String ORDER_PROPERTY =  "imap:propertyOrder";
 
     public JCRProperty(final Node node, final Log logger) {
         this.node = node;
@@ -170,25 +169,15 @@ 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();
+        result = PRIME * result + getLocalName().hashCode();
+        result = PRIME * result + getNamespace().hashCode();
+        result = PRIME * result + getValue().hashCode();
+
         return result;
     }
 
@@ -201,7 +190,7 @@ public class JCRProperty extends Abstrac
         if (getClass() != obj.getClass())
             return false;
         final JCRProperty other = (JCRProperty) obj;
-        if (getUUID() != other.getUUID())
+        if (getLocalName() != other.getLocalName() || getNamespace() != 
other.getNamespace() || getValue() !=other.getValue())
             return false;
         return true;
     }
@@ -215,7 +204,6 @@ public class JCRProperty extends Abstrac
      */
     public String toString() {
         final String result = "Property ( "
-            + "uuid = " + this.getUUID() + " "
             + "localName = " + this.getLocalName() + " "
             + "namespace = " + this.getNamespace() + " "
             + "value = " + this.getValue() 

Modified: 
james/imap/trunk/jcr/src/main/resources/org/apache/james/imap/jcr/imap.cnd
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/resources/org/apache/james/imap/jcr/imap.cnd?rev=925754&r1=925753&r2=925754&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/resources/org/apache/james/imap/jcr/imap.cnd 
(original)
+++ james/imap/trunk/jcr/src/main/resources/org/apache/james/imap/jcr/imap.cnd 
Sun Mar 21 11:33:23 2010
@@ -21,12 +21,12 @@
     - imap:subscriptionUsername (STRING) mandatory
     - imap:subscriptionMailbox (STRING) mandatory
 
-[imap:header] > nt:base
-    - imap:headerName (STRING) mandatory
+[imap:messageHeader] > nt:base
+    - imap:headerFieldName (STRING) mandatory
     - imap:headerValue(STRING) mandatory
     - imap:headerLineNumber (LONG) mandatory
 
-[imap:property] > nt:base
+[imap:messageProperty] > nt:base
     - imap:propertyNamespace (STRING) mandatory
     - imap:propertyLocalName (STRING) mandatory
     - imap:propertyValue(STRING) mandatory
@@ -35,21 +35,23 @@
 [imap:message] >  mix:referenceable, nt:base
     - imap:messageBodyStartOctet (LONG) mandatory
     - imap:messageFullContentOctets (LONG) mandatory
-    - imap:messageTextualLineCount (LONG) mandatory
-    + imap:headers 
-    + imap:properties
-    + jcr:content mandatory
+    - imap:messageTextualLineCount (LONG)
+    - imap:messageSubType (String) mandatory
+    + messageHeaders (imap:messageHeaders) 
+    + messageProperties (imap:messageProperties)
+    + jcr:content (nt:resource) mandatory 
     
-[imap:headers] > nt:unstructured
-    + imap:header multiple
+[imap:messageHeaders] > nt:unstructured
+    + imap:messageHeader multiple
     
- [imap:properties] > nt:unstructured
-    + imap:property multiple
+ [imap:messageProperties] > nt:unstructured
+    + imap:messageProperty multiple
        
 [imap:mailbox] >  mix:referenceable, nt:base
     - imap:mailboxUidValidity (LONG) mandatory
     - imap:mailboxName (STRING) mandatory
     - imap:mailboxLastUid (LONG) mandatory
+    + * (imap:mailboxMembership) multiple 
  
 [imap:mailboxMembership] >  mix:referenceable, nt:base
     - imap:mailboxUUID (REFERENCE) mandatory < 'imap:mailbox'
@@ -62,7 +64,7 @@
     - imap:recent (BOOLEAN) mandatory
     - imap:seen (BOOLEAN) mandatory
     - imap:internalDate (DATE) mandatory
-    + imap:message
+    + message (imap:message) mandatory
 
     
    

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=925754&r1=925753&r2=925754&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
 Sun Mar 21 11:33:23 2010
@@ -47,6 +47,7 @@ import org.apache.james.imap.mailbox.Sub
 import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
 import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
 import org.apache.james.imap.store.mail.MailboxMapper;
+import org.apache.james.imap.store.mail.MessageMapper;
 import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.transaction.TransactionalMapper;
 
@@ -194,7 +195,9 @@ public abstract class StoreMailboxManage
         session.getLog().info("deleteMailbox " + mailboxName);
         synchronized (mailboxes) {
             // TODO put this into a serilizable transaction
+            
             final MailboxMapper mapper = createMailboxMapper(session);
+            
             mapper.execute(new TransactionalMapper.Transaction() {
 
                 public void run() throws MailboxException {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to