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/14 14:36:01 UTC
svn commit: r922842 - in /james/imap/trunk:
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/apache/james/imap/jcr/user/
store/src/main/java/org/apache/james/imap/store/
Author: norman
Date: Sun Mar 14 13:36:01 2010
New Revision: 922842
URL: http://svn.apache.org/viewvc?rev=922842&view=rev
Log:
Fix some bugs in JCR implementation mostly XPath queries (IMAP-93)
Modified:
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/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/user/JCRSubscriptionMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
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=922842&r1=922841&r2=922842&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 Sun Mar 14 13:36:01 2010
@@ -101,6 +101,7 @@ public class JCRMailboxMapper extends JC
} catch (PathNotFoundException e) {
// mailbox does not exists..
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.DELETED_FAILED, e);
}
}
@@ -118,12 +119,14 @@ public class JCRMailboxMapper extends JC
} catch (PathNotFoundException e) {
// nothing todo
} catch (RepositoryException e) {
-
+ e.printStackTrace();
throw new StorageException(HumanReadableText.DELETED_FAILED, e);
}
}
/*
+ * TODO: This is not really efficient..
+ *
* (non-Javadoc)
*
* @see
@@ -133,10 +136,18 @@ public class JCRMailboxMapper extends JC
public boolean existsMailboxStartingWith(String mailboxName) throws StorageException {
try {
QueryManager manager = getSession().getWorkspace().getQueryManager();
- String queryString = "//" + PATH + "//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'" + mailboxName + "*')]";
+ String queryString = "//" + PATH + "//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'" + mailboxName + "')]";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
NodeIterator it = result.getNodes();
- return it.hasNext();
+ while (it.hasNext()) {
+ Node nextNode = it.nextNode();
+ String name = nextNode.getProperty(JCRMailbox.NAME_PROPERTY).getString();
+ System.out.println("NAME=" + name);
+ if (name.startsWith(mailboxName)) {
+ return true;
+ }
+ }
+ return false;
} catch (RepositoryException e) {
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
@@ -152,7 +163,6 @@ public class JCRMailboxMapper extends JC
}
public Mailbox findMailboxByUUID(String uuid) throws StorageException, MailboxNotFoundException {
- System.out.println("UUID="+uuid);
try {
return new JCRMailbox(getSession().getNodeByUUID(uuid),logger);
} catch (PathNotFoundException e) {
@@ -198,7 +208,7 @@ public class JCRMailboxMapper extends JC
List<Mailbox> mailboxList = new ArrayList<Mailbox>();
try {
QueryManager manager = getSession().getWorkspace().getQueryManager();
- String queryString = "//" + PATH + "//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'*" + name + "*')]";
+ String queryString = "//" + PATH + "//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'" + name + "')]";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
NodeIterator it = result.getNodes();
while (it.hasNext()) {
@@ -234,7 +244,6 @@ public class JCRMailboxMapper extends JC
}
((JCRMailbox)mailbox).merge(node);
getSession().save();
- System.out.println("U="+node.getUUID());
} catch (RepositoryException e) {
e.printStackTrace();
throw new StorageException(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=922842&r1=922841&r2=922842&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 14 13:36:01 2010
@@ -23,6 +23,7 @@ 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;
@@ -30,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.JCRMapper;
import org.apache.james.imap.jcr.JCRUtils;
@@ -67,8 +69,19 @@ public class JCRMessageMapper extends JC
String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
- return result.getNodes().getSize();
+ NodeIterator nodes = result.getNodes();
+ long count = nodes.getSize();
+
+ if (count == -1) {
+ count = 0;
+ while(nodes.hasNext()) {
+ nodes.nextNode();
+ count++;
+ }
+ }
+ return count;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.COUNT_FAILED, e);
}
@@ -84,11 +97,23 @@ public class JCRMessageMapper extends JC
public long countUnseenMessagesInMailbox() throws StorageException {
try {
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + JCRMailboxMembership.SEEN_PROPERTY +"='" + false +"']";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.SEEN_PROPERTY +"='false']";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
- return result.getNodes().getSize();
+ NodeIterator nodes = result.getNodes();
+ long count = nodes.getSize();
+
+ if (count == -1) {
+ count = 0;
+ while(nodes.hasNext()) {
+ nodes.nextNode();
+
+ count++;
+ }
+ }
+ return count;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.COUNT_FAILED, e);
}
}
@@ -106,6 +131,7 @@ public class JCRMessageMapper extends JC
try {
getSession().getNodeByUUID(membership.getUUID()).remove();
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.DELETED_FAILED, e);
}
}
@@ -141,6 +167,7 @@ public class JCRMessageMapper extends JC
}
return results;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
}
@@ -173,7 +200,7 @@ public class JCRMessageMapper extends JC
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 + "'] && [@" + JCRMailboxMembership.UID_PROPERTY + ">" + from + "] && [@" + JCRMailboxMembership.UID_PROPERTY + "<" + to + "]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">" + from + "] AND [@" + JCRMailboxMembership.UID_PROPERTY + "<" + to + "]";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -207,7 +234,7 @@ public class JCRMessageMapper extends JC
public List<MailboxMembership> findMarkedForDeletionInMailbox(MessageRange set) throws StorageException {
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + JCRMailboxMembership.DELETED_PROPERTY +"=" + true +"]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.DELETED_PROPERTY +"='true']";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -217,6 +244,7 @@ public class JCRMessageMapper extends JC
}
return list;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
}
@@ -232,7 +260,7 @@ public class JCRMessageMapper extends JC
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + JCRMailboxMembership.RECENT_PROPERTY +"=" + true +"]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.RECENT_PROPERTY +"='true']";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -242,6 +270,7 @@ public class JCRMessageMapper extends JC
}
return list;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
}
@@ -255,7 +284,7 @@ public class JCRMessageMapper extends JC
public List<MailboxMembership> findUnseenMessagesInMailboxOrderByUid() throws StorageException {
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + JCRMailboxMembership.SEEN_PROPERTY +"=" + false +"] order by @" + JCRMailboxMembership.UID_PROPERTY;
+ String queryString = "//" + PATH + "//element(*)[@" + 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();
@@ -265,6 +294,7 @@ public class JCRMessageMapper extends JC
}
return list;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
}
@@ -280,18 +310,22 @@ public class JCRMessageMapper extends JC
Node messageNode;
JCRMailboxMembership membership = (JCRMailboxMembership) message;
try {
+ createPathIfNotExists();
+
if (membership.isPersistent()) {
messageNode = getSession().getNodeByUUID(membership.getUUID());
} else {
messageNode = getSession().getRootNode().addNode(JCRUtils.createPath(PATH, String.valueOf(membership.getUid())));
+ messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
}
membership.merge(messageNode);
getSession().save();
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SAVE_FAILED, e);
}
@@ -317,6 +351,7 @@ public class JCRMessageMapper extends JC
}
return list;
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
}
@@ -342,11 +377,11 @@ public class JCRMessageMapper extends JC
final long high = ranges[i].getHighValue();
if (low == Long.MAX_VALUE) {
- queryBuilder.append(" and [@" + JCRMailboxMembership.UID_PROPERTY +"<=").append(high).append("]");
+ queryBuilder.append(" AND [@" + JCRMailboxMembership.UID_PROPERTY +"<=").append(high).append("]");
} else if (low == high) {
- queryBuilder.append(" and [@" + JCRMailboxMembership.UID_PROPERTY +"=").append(low).append("]");
+ 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(low).append("] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">").append(high).append("]");
}
}
}
@@ -354,4 +389,11 @@ public class JCRMessageMapper extends JC
final String jql = queryBuilder.toString();
return jql;
}
+
+
+ protected void createPathIfNotExists() throws RepositoryException, PathNotFoundException {
+ if (getSession().getRootNode().hasNode(JCRUtils.createPath(PATH)) == false) {
+ getSession().getRootNode().addNode(JCRUtils.createPath(PATH));
+ }
+ }
}
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=922842&r1=922841&r2=922842&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 Sun Mar 14 13:36:01 2010
@@ -173,10 +173,10 @@ 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());
+ node.setProperty(ID_PROPERTY, id);
+ node.setProperty(NAME_PROPERTY, name);
+ node.setProperty(UIDVALIDITY_PROPERTY, uidValidity);
+ node.setProperty(LASTUID_PROPERTY, lastUid);
this.node = node;
id = 0;
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=922842&r1=922841&r2=922842&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 14 13:36:01 2010
@@ -42,14 +42,14 @@ public class JCRMailboxMembership extend
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
- + "flags:answered";
+ + "answered";
public final static String DELETED_PROPERTY = PROPERTY_PREFIX
- + "flags:deleted";
- public final static String DRAFT_PROPERTY = PROPERTY_PREFIX + "flags:draft";
+ + "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
- + "flags:recent";
- public final static String SEEN_PROPERTY = PROPERTY_PREFIX + "flags:seen";
+ + "recent";
+ public final static String SEEN_PROPERTY = PROPERTY_PREFIX + "seen";
public final static String INTERNAL_DATE_PROPERTY = PROPERTY_PREFIX
+ "internalDate";
@@ -58,7 +58,6 @@ public class JCRMailboxMembership extend
private Date internalDate;
private int size;
private JCRMessage message;
- private String messageUUID;
private boolean answered;
private boolean deleted;
private boolean draft;
@@ -123,17 +122,6 @@ public class JCRMailboxMembership extend
* org.apache.james.imap.store.mail.model.MailboxMembership#getDocument()
*/
public Document getDocument() {
- if (isPersistent()) {
- try {
- return new JCRMessage(node.getNode(messageUUID), logger);
-
- } catch (RepositoryException e) {
- logger
- .error("Unable to access property " + FLAGGED_PROPERTY,
- e);
- }
- return null;
- }
return message;
}
@@ -434,19 +422,19 @@ public class JCRMailboxMembership extend
node.setProperty(DRAFT_PROPERTY, draft);
node.setProperty(FLAGGED_PROPERTY, flagged);
node.setProperty(RECENT_PROPERTY, recent);
- ;
+
node.setProperty(SEEN_PROPERTY, seen);
- ;
+
Calendar cal = Calendar.getInstance();
cal.setTime(internalDate);
node.setProperty(INTERNAL_DATE_PROPERTY, cal);
- Node messageNode = node.addNode(messageUUID);
+ Node messageNode = node.addNode("message");
+ messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
message.merge(messageNode);
this.node = node;
- mailboxUUID = null;
answered = false;
deleted = false;
draft = false;
@@ -454,7 +442,6 @@ public class JCRMailboxMembership extend
internalDate = null;
mailboxUUID = null;
message = null;
- messageUUID = null;
recent = false;
seen = false;
size = 0;
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=922842&r1=922841&r2=922842&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 14 13:36:01 2010
@@ -73,7 +73,7 @@ public class JCRMessage extends Abstract
this.fullContentOctets = content.length;
this.bodyStartOctet = bodyStartOctet;
this.headers = new ArrayList<JCRHeader>(headers);
- textualLineCount = propertyBuilder.getTextualLineCount();
+ this.textualLineCount = propertyBuilder.getTextualLineCount();
this.mediaType = propertyBuilder.getMediaType();
this.subType = propertyBuilder.getSubType();
final List<Property> properties = propertyBuilder.toProperties();
@@ -156,7 +156,7 @@ public class JCRMessage extends Abstract
public long getFullContentOctets() {
if (isPersistent()) {
try {
- return node.getNode(JcrConstants.JCR_CONTENT).getProperty(FULL_CONTENT_OCTETS_PROPERTY).getLong();
+ return node.getProperty(FULL_CONTENT_OCTETS_PROPERTY).getLong();
} catch (RepositoryException e) {
logger.error("Unable to retrieve property " + FULL_CONTENT_OCTETS_PROPERTY, e);
@@ -229,9 +229,9 @@ public class JCRMessage extends Abstract
public String getSubType() {
if (isPersistent()) {
try {
- return node.getNode(JcrConstants.JCR_CONTENT).getProperty(SUBTYPE_PROPERTY).getString();
+ return node.getProperty(SUBTYPE_PROPERTY).getString();
} catch (RepositoryException e) {
- logger.error("Unable to retrieve node " + JcrConstants.JCR_MIMETYPE, e);
+ logger.error("Unable to retrieve node " + SUBTYPE_PROPERTY, e);
}
return null;
}
@@ -245,7 +245,7 @@ public class JCRMessage extends Abstract
public Long getTextualLineCount() {
if (isPersistent()) {
try {
- return node.getNode(JcrConstants.JCR_CONTENT).getProperty(TEXTUAL_LINE_COUNT_PROPERTY).getLong();
+ return node.getProperty(TEXTUAL_LINE_COUNT_PROPERTY).getLong();
} catch (RepositoryException e) {
logger.error("Unable to retrieve property " + TEXTUAL_LINE_COUNT_PROPERTY, e);
@@ -271,6 +271,16 @@ public class JCRMessage extends Abstract
return node != null;
}
+ public String getUUID() {
+ if (isPersistent()) {
+ try {
+ return node.getUUID();
+ } catch (RepositoryException e) {
+ logger.error("Unable to access UUID", e);
+ }
+ }
+ return null;
+ }
/*
* (non-Javadoc)
* @see org.apache.james.imap.jcr.Persistent#merge(javax.jcr.Node)
@@ -285,22 +295,34 @@ public class JCRMessage extends Abstract
contentNode.setProperty(JcrConstants.JCR_DATA, new ByteArrayInputStream(content));
contentNode.setProperty(JcrConstants.JCR_MIMETYPE, mediaType);
- contentNode.setProperty(BODY_START_OCTET_PROPERTY, bodyStartOctet);
- contentNode.setProperty(FULL_CONTENT_OCTETS_PROPERTY, fullContentOctets);
- contentNode.setProperty(FULL_CONTENT_OCTETS_PROPERTY, fullContentOctets);
- contentNode.setProperty(TEXTUAL_LINE_COUNT_PROPERTY, textualLineCount);
- contentNode.setProperty(SUBTYPE_PROPERTY, subType);
+ node.setProperty(FULL_CONTENT_OCTETS_PROPERTY, fullContentOctets);
+ node.setProperty(TEXTUAL_LINE_COUNT_PROPERTY, textualLineCount);
+ node.setProperty(SUBTYPE_PROPERTY, subType);
+ node.setProperty(BODY_START_OCTET_PROPERTY, new Long(bodyStartOctet));
+
+ Node headersNode;
+ if (node.hasNode(HEADERS_NODE)) {
+ headersNode = node.getNode(HEADERS_NODE);
+ headersNode.remove();
+ } else {
+ headersNode = node.addNode(HEADERS_NODE);
+ }
- Node headersNode = contentNode.getNode(HEADERS_NODE);
- headersNode.remove();
for (int i = 0; i < headers.size(); i++) {
JCRHeader header = (JCRHeader) headers.get(i);
Node headerNode = headersNode.addNode(header.getFieldName());
header.merge(headerNode);
}
- Node propertiesNode = contentNode.getNode(PROPERTIES_NODE);
- propertiesNode.remove();
+ Node propertiesNode;
+
+ if (node.hasNode(PROPERTIES_NODE)) {
+ propertiesNode = node.getNode(PROPERTIES_NODE);
+ propertiesNode.remove();
+ } else {
+ propertiesNode = node.addNode(PROPERTIES_NODE);
+ }
+
for (int i = 0; i < properties.size(); i++) {
JCRProperty prop = (JCRProperty) properties.get(i);
Node propNode = propertiesNode.addNode(JCRUtils.createPath(prop.getNamespace()+ "." + prop.getLocalName()));
@@ -324,7 +346,7 @@ public class JCRMessage extends Abstract
protected int getBodyStartOctet() {
if (isPersistent()) {
try {
- return new Long(node.getNode(JcrConstants.JCR_CONTENT).getProperty(BODY_START_OCTET_PROPERTY).getLong()).intValue();
+ return new Long(node.getProperty(BODY_START_OCTET_PROPERTY).getLong()).intValue();
} catch (RepositoryException e) {
logger.error("Unable to retrieve property " + TEXTUAL_LINE_COUNT_PROPERTY, e);
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=922842&r1=922841&r2=922842&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 Sun Mar 14 13:36:01 2010
@@ -121,6 +121,12 @@ public class JCRSubscriptionMapper exten
}
+ protected void createPathIfNotExists(String path) throws RepositoryException, PathNotFoundException {
+ if (getSession().getRootNode().hasNode(JCRUtils.createPath(path)) == false) {
+ getSession().getRootNode().addNode(JCRUtils.createPath(path));
+ }
+ }
+
/*
* (non-Javadoc)
*
@@ -133,11 +139,15 @@ public class JCRSubscriptionMapper exten
String mailbox = subscription.getMailbox();
String nodename = JCRUtils.createPath(username, mailbox);
try {
+ createPathIfNotExists(PATH);
Node node = getSession().getRootNode().getNode(PATH);
Node subNode;
if (node.hasNode(nodename)) {
subNode = node.getNode(nodename);
} else {
+ if (node.hasNode(username) == false) {
+ node.addNode(username);
+ }
subNode = node.addNode(nodename);
}
@@ -146,6 +156,7 @@ public class JCRSubscriptionMapper exten
getSession().save();
} catch (RepositoryException e) {
+ e.printStackTrace();
throw new SubscriptionException(HumanReadableText.SAVE_FAILED, e);
}
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=922842&r1=922841&r2=922842&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java Sun Mar 14 13:36:01 2010
@@ -241,10 +241,13 @@ public abstract class StoreMailbox imple
tracker.found(uid, message.createFlags());
return uid;
} catch (IOException e) {
+ e.printStackTrace();
throw new MailboxException(HumanReadableText.FAILURE_MAIL_PARSE, e);
} catch (MessagingException e) {
+ e.printStackTrace();
throw new MailboxException(HumanReadableText.FAILURE_MAIL_PARSE, e);
} catch (MimeException e) {
+ e.printStackTrace();
throw new MailboxException(HumanReadableText.FAILURE_MAIL_PARSE, e);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org