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: [email protected]
For additional commands, e-mail: [email protected]