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