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 13:54:44 UTC

svn commit: r924261 - in /james/imap/trunk: deployment/src/test/java/org/apache/james/imap/functional/jcr/ 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/o...

Author: norman
Date: Wed Mar 17 12:54:44 2010
New Revision: 924261

URL: http://svn.apache.org/viewvc?rev=924261&view=rev
Log:
Fix a some more bugs, one found by jukka.. Thx! (IMAP-93)

Modified:
    james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
    james/imap/trunk/deployment/src/test/resources/test-repository.xml
    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/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

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=924261&r1=924260&r2=924261&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 Wed Mar 17 12:54:44 2010
@@ -21,11 +21,8 @@ package org.apache.james.imap.functional
 import java.io.File;
 import java.io.FileInputStream;
 
-import javax.jcr.Repository;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.TransientRepository;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.functional.ImapHostSystem;
@@ -104,10 +101,6 @@ public class JCRHostSystem extends ImapH
             repository.shutdown();
             repository = null;
         }
-        
-        
-        //File home = new File(JACKRABBIT_HOME);
-        //delete(home);
     }
     
     private void delete(File home) throws Exception{
@@ -122,7 +115,6 @@ public class JCRHostSystem extends ImapH
                 }            
             }
             home.delete();
-            FileUtils.deleteDirectory(home);
         }
     }
 

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=924261&r1=924260&r2=924261&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 12:54:44 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="false"/>
+			<param name="persistent" value="true"/>
 		</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="false"/>
+			<param name="persistent" value="true"/>
 		</PersistenceManager>
         
     </Versioning>

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=924261&r1=924260&r2=924261&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 Wed Mar 17 12:54:44 2010
@@ -78,7 +78,7 @@ public class JCRMailbox extends StoreMai
     
     @Override
     protected MailboxMembership copyMessage(MailboxMembership originalMessage, long uid) {
-        MailboxMembership newRow = new JCRMailboxMembership(uuid, uid, (JCRMailboxMembership) originalMessage, log);
+        MailboxMembership newRow = new JCRMailboxMembership(getMailboxUUID(), uid, (JCRMailboxMembership) originalMessage, log);
         return newRow;
     }
 

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=924261&r1=924260&r2=924261&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 12:54:44 2010
@@ -23,7 +23,6 @@ import java.util.List;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.query.Query;
@@ -64,14 +63,12 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#countMessagesInMailbox()
      */
     public long countMessagesInMailbox() throws StorageException {
-        
         try {
             String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
             NodeIterator nodes = result.getNodes();
             long count = nodes.getSize();
-            
             if (count == -1) {
                 count = 0;
                 while(nodes.hasNext()) {
@@ -166,6 +163,8 @@ public class JCRMessageMapper extends Ab
                     results = findMessagesInMailboxBetweenUIDs(uuid, from, to);
                     break;       
             }
+            System.out.println("FOUND=" + results.size() + " TYPE="+ type.toString());
+
             return results;
         } catch (RepositoryException e) {
             e.printStackTrace();
@@ -306,7 +305,7 @@ public class JCRMessageMapper extends Ab
             switch (type) {
                 default:
                 case ALL:
-                    results = findMessagesInMailbox(uuid);
+                    results = findDeletedMessagesInMailbox(uuid);
                     break;
                 case FROM:
                     results = findDeletedMessagesInMailboxAfterUID(uuid, from);
@@ -318,11 +317,6 @@ public class JCRMessageMapper extends Ab
                     results = findDeletedMessagesInMailboxBetweenUIDs(uuid, from, to);
                     break;       
             }
-            for (int i = 0; i < results.size();i++) {
-                MailboxMembership membership = results.get(i);
-                System.out.println("UID= " + membership.getUid() + " DELETED=" + membership.isDeleted());
-            }
-            //System.out.println("DELETE FOUND=" + results.size() + " TYPE="+ type.toString());
             return results;
         } catch (RepositoryException e) {
             e.printStackTrace();

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=924261&r1=924260&r2=924261&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 12:54:44 2010
@@ -73,7 +73,7 @@ public class JCRHeader extends AbstractC
     public String getFieldName() {
         if (isPersistent()) {
             try {
-                return  node.getProperty(FIELDNAME_PROPERTY).getString();
+                return node.getProperty(FIELDNAME_PROPERTY).getString();
             } catch (RepositoryException e) {
                 logger.error("Unable to access property " + FIELDNAME_PROPERTY, e);
             }
@@ -88,7 +88,7 @@ public class JCRHeader extends AbstractC
     public int getLineNumber() {
         if (isPersistent()) {
             try {
-                return  new Long(node.getProperty(LINENUMBER_PROPERTY).getLong()).intValue();
+                return new Long(node.getProperty(LINENUMBER_PROPERTY).getLong()).intValue();
             } catch (RepositoryException e) {
                 logger.error("Unable to access property " + FIELDNAME_PROPERTY, e);
             }

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=924261&r1=924260&r2=924261&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 12:54:44 2010
@@ -32,8 +32,14 @@ import org.apache.james.imap.jcr.JCRImap
 import org.apache.james.imap.jcr.Persistent;
 import org.apache.james.imap.store.mail.model.AbstractMailboxMembership;
 import org.apache.james.imap.store.mail.model.Document;
+import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.mail.model.MailboxMembership;
 import org.apache.james.imap.store.mail.model.PropertyBuilder;
 
+/**
+ * JCR implementation of {@link MailboxMembership}
+ *
+ */
 public class JCRMailboxMembership extends AbstractMailboxMembership implements
 		Persistent, JCRImapConstants {
 
@@ -166,10 +172,15 @@ public class JCRMailboxMembership extend
 		throw new UnsupportedOperationException("Not Supported. Use UUID");
 	}
 
+	/**
+	 * Return the MailboxUUID for the mapped {@link Mailbox}
+	 * 
+	 * @return mailbox
+	 */
 	public String getMailboxUUID() {
 		if (isPersistent()) {
 			try {
-				node.getProperty(MAILBOX_UUID_PROPERTY).getString();
+				return node.getProperty(MAILBOX_UUID_PROPERTY).getString();
 			} catch (RepositoryException e) {
 				logger.error("Unable to access property "
 						+ MAILBOX_UUID_PROPERTY, e);
@@ -383,6 +394,11 @@ public class JCRMailboxMembership extend
 		}
 	}
 
+	/**
+	 * Return the UUID for this instance
+	 * 
+	 * @return uuid
+	 */
 	public String getUUID() {
 		if (isPersistent()) {
 			try {

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=924261&r1=924260&r2=924261&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 12:54:44 2010
@@ -36,10 +36,15 @@ import org.apache.james.imap.jcr.JCRImap
 import org.apache.james.imap.jcr.JCRUtils;
 import org.apache.james.imap.jcr.Persistent;
 import org.apache.james.imap.store.mail.model.AbstractDocument;
+import org.apache.james.imap.store.mail.model.Document;
 import org.apache.james.imap.store.mail.model.Header;
 import org.apache.james.imap.store.mail.model.Property;
 import org.apache.james.imap.store.mail.model.PropertyBuilder;
 
+/**
+ * JCR implementation of {@link Document}
+ *
+ */
 public class JCRMessage extends AbstractDocument implements JCRImapConstants, Persistent{
 
     private Node node;
@@ -174,7 +179,8 @@ public class JCRMessage extends Abstract
         if (isPersistent()) {
             try {
                 List<Header> headers = new ArrayList<Header>();
-                NodeIterator nodeIt = node.getNodes(HEADERS_NODE + NODE_DELIMITER +"*");
+                Node headersNode = node.getNode(HEADERS_NODE);
+                NodeIterator nodeIt = headersNode.getNodes();
                 while (nodeIt.hasNext()) {
                     headers.add(new JCRHeader(nodeIt.nextNode(), logger));
                 }
@@ -210,7 +216,7 @@ public class JCRMessage extends Abstract
         if (isPersistent()) {
             try {
                 List<Property> properties = new ArrayList<Property>();
-                NodeIterator nodeIt = node.getNodes(PROPERTIES_NODE + NODE_DELIMITER +"*");
+                NodeIterator nodeIt = node.getNode(PROPERTIES_NODE).getNodes();
                 while (nodeIt.hasNext()) {
                     properties.add(new JCRProperty(nodeIt.nextNode(), logger));
                 }
@@ -302,36 +308,60 @@ public class JCRMessage extends Abstract
         node.setProperty(SUBTYPE_PROPERTY, getSubType());
         node.setProperty(BODY_START_OCTET_PROPERTY, getBodyStartOctet());
 
+        // copy the headers and store them in memory as pure pojos
+        List<Header> currentHeaders = getHeaders();
+        List<Header> newHeaders = new ArrayList<Header>();
+        for (int i = 0 ; i < currentHeaders.size(); i++) {
+            newHeaders.add(new JCRHeader(currentHeaders.get(i), logger));
+        }
+        
         Node headersNode;
-        // check if some headers are already stored on this.
-        // if so remove the node just to be sure we get fresh data
+        // check if some headers are already stored
         if (node.hasNode(HEADERS_NODE)) {
+            
             headersNode = node.getNode(HEADERS_NODE);
-            headersNode.remove();
+            NodeIterator iterator = headersNode.getNodes();
+            // remove old headers
+            while(iterator.hasNext()) {
+                iterator.nextNode().remove();
+            }
+        } else {
+            headersNode = node.addNode(HEADERS_NODE);
         }
         
-        headersNode = node.addNode(HEADERS_NODE);
-        
-        for (int i = 0; i < getHeaders().size(); i++) {
-            JCRHeader header = (JCRHeader) getHeaders().get(i);
+            
+        // 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());
             header.merge(headerNode);
         }
       
+        List<Property> currentProperties = getProperties();
+        List<Property> newProperites = new ArrayList<Property>();
+        for (int i = 0; i < currentProperties.size(); i++) {
+            Property prop = currentProperties.get(i);
+            newProperites.add(new JCRProperty(prop, i, logger));
+        }
         Node propertiesNode;
         
         // check if some properties are already stored on this.
-        // if so remove the node just to be sure we get fresh data
         if (node.hasNode(PROPERTIES_NODE)) {
             propertiesNode = node.getNode(PROPERTIES_NODE);
-            propertiesNode.remove();
-        } 
+            
+            // remove old properties, we will add a bunch of new ones
+            NodeIterator iterator = propertiesNode.getNodes();
+            while(iterator.hasNext()) {
+                iterator.nextNode().remove();
+            }
+        } else {
+            propertiesNode = node.addNode(PROPERTIES_NODE);
+        }
         
-        propertiesNode = node.addNode(PROPERTIES_NODE);
 
-        
-        for (int i = 0; i < getProperties().size(); i++) {
-            JCRProperty prop = (JCRProperty) getProperties().get(i);
+        // 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()));
             prop.merge(propNode);
         }



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