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 15:09:54 UTC
svn commit: r922857 - in
/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr:
mail/JCRMailboxMapper.java mail/JCRMessageMapper.java
user/JCRSubscriptionMapper.java
Author: norman
Date: Sun Mar 14 14:09:53 2010
New Revision: 922857
URL: http://svn.apache.org/viewvc?rev=922857&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/user/JCRSubscriptionMapper.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=922857&r1=922856&r2=922857&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 14:09:53 2010
@@ -125,7 +125,6 @@ public class JCRMailboxMapper extends JC
}
/*
- * TODO: This is not really efficient..
*
* (non-Javadoc)
*
@@ -136,18 +135,10 @@ 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:like(@" + JCRMailbox.NAME_PROPERTY + ",'" +mailboxName+"%')]";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
NodeIterator it = result.getNodes();
- 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;
+ return it.hasNext();
} catch (RepositoryException e) {
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
}
@@ -208,7 +199,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:like(@" + JCRMailbox.NAME_PROPERTY + ",'%" + name + "%')]";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
NodeIterator it = result.getNodes();
while (it.hasNext()) {
@@ -243,6 +234,7 @@ public class JCRMailboxMapper extends JC
node.addMixin(JcrConstants.MIX_REFERENCEABLE);
}
((JCRMailbox)mailbox).merge(node);
+ System.out.println("MAILBOX" + mailbox.getName());
getSession().save();
} catch (RepositoryException e) {
e.printStackTrace();
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=922857&r1=922856&r2=922857&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 14:09:53 2010
@@ -174,7 +174,7 @@ public class JCRMessageMapper extends JC
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 + "'] && [@" + JCRMailboxMembership.UID_PROPERTY + ">" + uid + "]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">" + uid + "]";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -187,7 +187,7 @@ public class JCRMessageMapper extends JC
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 + "'] && [@" + JCRMailboxMembership.UID_PROPERTY + "=" + uid + "]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + "=" + uid + "]";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
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=922857&r1=922856&r2=922857&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 14:09:53 2010
@@ -26,16 +26,17 @@ import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryManager;
+import javax.jcr.query.QueryResult;
import org.apache.commons.logging.Log;
import org.apache.james.imap.api.display.HumanReadableText;
import org.apache.james.imap.jcr.JCRMapper;
-import org.apache.james.imap.jcr.Persistent;
-import org.apache.james.imap.jcr.JCRImapConstants;
import org.apache.james.imap.jcr.JCRUtils;
+import org.apache.james.imap.jcr.Persistent;
import org.apache.james.imap.jcr.user.model.JCRSubscription;
import org.apache.james.imap.mailbox.SubscriptionException;
-import org.apache.james.imap.store.transaction.NonTransactionalMapper;
import org.apache.james.imap.store.user.SubscriptionMapper;
import org.apache.james.imap.store.user.model.Subscription;
@@ -83,7 +84,7 @@ public class JCRSubscriptionMapper exten
/*
* (non-Javadoc)
*
- * @seeorg.apache.james.imap.store.user.SubscriptionMapper#
+ * @see org.apache.james.imap.store.user.SubscriptionMapper#
* findFindMailboxSubscriptionForUser(java.lang.String, java.lang.String)
*/
public Subscription findFindMailboxSubscriptionForUser(String user, String mailbox) throws SubscriptionException {
@@ -107,8 +108,12 @@ public class JCRSubscriptionMapper exten
public List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException {
List<Subscription> subList = new ArrayList<Subscription>();
try {
- Node node = getSession().getRootNode().getNode(JCRUtils.createPath(PATH , user));
- NodeIterator nodeIt = node.getNodes("*");
+ String queryString = "//" + PATH + "//element(*)[@" + JCRSubscription.USERNAME_PROPERTY + "='" + user + "']";
+
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
+ QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
+
+ NodeIterator nodeIt = result.getNodes();
while (nodeIt.hasNext()) {
subList.add(new JCRSubscription(nodeIt.nextNode(), log));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org