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]

Reply via email to