Author: norman
Date: Sun Mar 14 08:49:31 2010
New Revision: 922790

URL: http://svn.apache.org/viewvc?rev=922790&view=rev
Log:
Fix some bugs in JCR implementation (IMAP-93)
Remove TorqueMailboxSession and just use SimpleMailboxSession

Added:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
Removed:
    
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxSession.java
Modified:
    
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
    
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/JCRMailboxManager.java
    
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
    
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
    
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
    
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java

Modified: 
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
 (original)
+++ 
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
 Sun Mar 14 08:49:31 2010
@@ -134,7 +134,7 @@ public abstract class ImapHostSystem imp
         }
 
         public void stop() throws Exception {
-
+               ImapHostSystem.this.stop();
         }
 
         public void writeLine(String line) throws Exception {
@@ -250,4 +250,8 @@ public abstract class ImapHostSystem imp
     }
 
     public abstract boolean addUser(String user, String password) throws 
Exception;
+    
+    protected void stop() throws Exception {
+       
+    }
 }

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=922790&r1=922789&r2=922790&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
 Sun Mar 14 08:49:31 2010
@@ -65,7 +65,7 @@ public class JCRHostSystem extends ImapH
         RepositoryConfig config = RepositoryConfig.create(new 
InputSource(this.getClass().getClassLoader().getResourceAsStream("test-repository.xml")),
 JACKRABBIT_HOME);
         repository = RepositoryImpl.create(config);
         
-        mailboxManager = new JCRGlobalUserMailboxManager(userManager, new 
JCRGlobalUserSubscriptionManager(repository, "default", "user", "pass"), 
repository, "default", "user", "pass");
+        mailboxManager = new JCRGlobalUserMailboxManager(userManager, new 
JCRGlobalUserSubscriptionManager(repository, null, "user", "pass"), repository, 
null, "user", "pass");
         
         final DefaultImapProcessorFactory defaultImapProcessorFactory = new 
DefaultImapProcessorFactory();
         resetUserMetaData();
@@ -109,7 +109,6 @@ public class JCRHostSystem extends ImapH
         dir.mkdirs();
     }
 
-       @Override
        protected void stop() throws Exception {
                //repository.shutdown();
                System.out.println("HERE");

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=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- james/imap/trunk/deployment/src/test/resources/test-repository.xml 
(original)
+++ james/imap/trunk/deployment/src/test/resources/test-repository.xml Sun Mar 
14 08:49:31 2010
@@ -28,7 +28,7 @@
         (e.g. registered namespaces, custom node types, etc.)
     -->
     <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="target/repository"/>
+        <param name='path' value='${rep.home}/repository'/>
     </FileSystem>
 
     <!--
@@ -45,21 +45,11 @@
            <param name="adminId" value="admin"/>
         </LoginModule>
     </Security>
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="target/repository/workspaces" 
defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="default">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem 
class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="default"/>
+
+    <Workspaces rootPath='${rep.home}/workspaces' defaultWorkspace='default'/>
+    
+    <Workspace name='${wsp.name}'>
+        <FileSystem class='org.apache.jackrabbit.core.fs.mem.MemoryFileSystem'>
         </FileSystem>
         <!--
             persistence manager of the workspace:
@@ -69,11 +59,14 @@
                         <param name="url" value="jdbc:h2:target/wsp_name/db"/>
                         <param name="driver" value="org.h2.Driver"/>
                         <param name="schema" value="h2"/>
-                        <param name="schemaObjectPrefix" value="default_"/>
+                        <param name='schemaObjectPrefix' value='${wsp.name}_'/>
         </PersistenceManager>
         
-        <SearchIndex 
class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="default/index" />
+        <SearchIndex 
class='org.apache.jackrabbit.core.query.lucene.SearchIndex'>
+            <param name='path' value='${wsp.home}/index'/>
+            <param name='textFilterClasses' 
value='org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor'/>
+            <param name='extractorPoolSize' value='2'/>
+            <param name='supportHighlighting' value='true'/>
         </SearchIndex>
         
     </Workspace>
@@ -81,19 +74,30 @@
     <!--
         Configures the versioning
     -->
-    <Versioning rootPath="target/repository/version">
-
-        <FileSystem 
class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="target/repository/version" />
+    <Versioning rootPath='${rep.home}/version'>
+        <FileSystem class='org.apache.jackrabbit.core.fs.mem.MemoryFileSystem'>
+        <!--  
+            <param name='path' value='${rep.home}/version' />
+            -->
         </FileSystem>
 
         <PersistenceManager  
class="org.apache.jackrabbit.core.persistence.db.SimpleDbPersistenceManager">
-                        <param name="url" value="jdbc:h2:target/wsp_name/db"/>
+                        <param name='url' 
value='jdbc:h2:${rep.home}/version/db'/>
                         <param name="driver" value="org.h2.Driver"/>
                         <param name="schema" value="h2"/>
                                        <param name="schemaObjectPrefix" 
value="version_"/>
         </PersistenceManager>
         
     </Versioning>
+    <!--
+        Search index for content that is shared repository wide
+        (/jcr:system tree, contains mainly versions)
+    -->
+    <SearchIndex class='org.apache.jackrabbit.core.query.lucene.SearchIndex'>
+        <param name='path' value='${rep.home}/repository/index'/>
+        <param name='textFilterClasses' 
value='org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor'/>
+        <param name='extractorPoolSize' value='2'/>
+        <param name='supportHighlighting' value='true'/>
+    </SearchIndex>
 
 </Repository>

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
 (original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
 Sun Mar 14 08:49:31 2010
@@ -55,7 +55,7 @@ public class JCRMailboxManager extends S
     private final Repository repository;
     private final String workspace;
     private final Log logger = LogFactory.getLog(JCRMailboxManager.class);
-
+    
     public JCRMailboxManager(final Authenticator authenticator, final 
Subscriber subscriber, final Repository repository, final String workspace) {
         super(authenticator, subscriber);
         this.repository = repository;
@@ -70,7 +70,8 @@ public class JCRMailboxManager extends S
 
     @Override
     protected MailboxMapper createMailboxMapper(MailboxSession session) throws 
MailboxException {
-        return new JCRMailboxMapper(getSession(session), logger);
+        Session jcrSession = getSession(session);
+        return new JCRMailboxMapper(jcrSession, logger);
 
     }
 
@@ -98,7 +99,7 @@ public class JCRMailboxManager extends S
     @Override
     protected void doCreate(String namespaceName, MailboxSession session) 
throws MailboxException {
         final Mailbox mailbox = new 
org.apache.james.imap.jcr.mail.model.JCRMailbox(namespaceName, 
randomUidValidity(), logger);
-        final MailboxMapper mapper = createMailboxMapper(session);
+        final JCRMailboxMapper mapper = 
(JCRMailboxMapper)createMailboxMapper(session);
         mapper.execute(new TransactionalMapper.Transaction() {
 
             public void run() throws MailboxException {
@@ -122,7 +123,8 @@ public class JCRMailboxManager extends S
         }
     }
     
-
+    
+    
     /**
      * Return the JCR workspace
      * 

Added: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java?rev=922790&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java 
(added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java 
Sun Mar 14 08:49:31 2010
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.imap.jcr;
+
+import javax.jcr.Session;
+
+import org.apache.james.imap.store.transaction.NonTransactionalMapper;
+
+public abstract class JCRMapper extends NonTransactionalMapper implements 
JCRImapConstants{
+
+    private final Session session;
+
+    public JCRMapper(final Session session) {
+        this.session = session;
+    }
+    
+    protected Session getSession() {
+        return session;
+    }
+    
+}

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=922790&r1=922789&r2=922790&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 08:49:31 2010
@@ -33,28 +33,26 @@ 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.JCRImapConstants;
+import org.apache.james.imap.jcr.JCRMapper;
 import org.apache.james.imap.jcr.JCRUtils;
 import org.apache.james.imap.jcr.mail.model.JCRMailbox;
 import org.apache.james.imap.mailbox.MailboxNotFoundException;
 import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.store.mail.MailboxMapper;
 import org.apache.james.imap.store.mail.model.Mailbox;
-import org.apache.james.imap.store.transaction.NonTransactionalMapper;
 
 /**
  * JCR implementation of a MailboxMapper
  * 
  * 
  */
-public class JCRMailboxMapper extends NonTransactionalMapper implements 
MailboxMapper,JCRImapConstants {
+public class JCRMailboxMapper extends JCRMapper implements MailboxMapper {
 
-    private final Session session;
     public final String PATH = PROPERTY_PREFIX + "mailboxes";
     private Log logger;
 
     public JCRMailboxMapper(final Session session, final Log logger) {
-        this.session = session;
+        super(session);
         this.logger = logger;
     }
 
@@ -66,16 +64,24 @@ public class JCRMailboxMapper extends No
      * (java.lang.String)
      */
     public long countMailboxesWithName(String name) throws StorageException {
+       
         try {
-               QueryManager manager = session.getWorkspace().getQueryManager();
-               String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailbox.NAME_PROPERTY + "='" + name + "']";
+               QueryManager manager = 
getSession().getWorkspace().getQueryManager();
+               String queryString =  "//" + PATH + "//element(*)[@" + 
JCRMailbox.NAME_PROPERTY + "='" + name + "']";
                QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
                NodeIterator it = result.getNodes();
-               return it.getSize();
+               long resultSize = it.getSize();
+               if (resultSize == -1) {
+                   resultSize = 0;
+                   while (it.hasNext()) {
+                       it.nextNode();
+                       resultSize++;
+                   }
+               }
+               return resultSize;
         } catch (PathNotFoundException e) {
             // not found
         } catch (RepositoryException e) {
-               e.printStackTrace();
             throw new StorageException(HumanReadableText.COUNT_FAILED, e);
         }
         return 0;
@@ -90,8 +96,8 @@ public class JCRMailboxMapper extends No
      */
     public void delete(Mailbox mailbox) throws StorageException {
         try {
-               session.getNodeByUUID(((JCRMailbox) 
mailbox).getUUID()).remove();
-            session.save();
+               getSession().getNodeByUUID(((JCRMailbox) 
mailbox).getUUID()).remove();
+            getSession().save();
         } catch (PathNotFoundException e) {
             // mailbox does not exists..
         } catch (RepositoryException e) {
@@ -106,8 +112,8 @@ public class JCRMailboxMapper extends No
      */
     public void deleteAll() throws StorageException {
         try {
-            session.getRootNode().getNode(PATH).remove();
-            session.save();
+            getSession().getRootNode().getNode(PATH).remove();
+            getSession().save();
 
         } catch (PathNotFoundException e) {
             // nothing todo
@@ -126,7 +132,7 @@ public class JCRMailboxMapper extends No
      */
     public boolean existsMailboxStartingWith(String mailboxName) throws 
StorageException {
         try {
-               QueryManager manager = session.getWorkspace().getQueryManager();
+               QueryManager manager = 
getSession().getWorkspace().getQueryManager();
                String queryString = "//" + PATH + 
"//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'" + mailboxName + 
"*')]";
                QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
                NodeIterator it = result.getNodes();
@@ -142,31 +148,13 @@ public class JCRMailboxMapper extends No
      * @see 
org.apache.james.imap.store.mail.MailboxMapper#findMailboxById(long)
      */
     public Mailbox findMailboxById(long mailboxId) throws StorageException, 
MailboxNotFoundException {
-        /*
-        try {
-            QueryManager manager = session.getWorkspace().getQueryManager();
-            String queryString = 
JCRUtils.createPath(session.getRootNode().getPath(), PATH) + "//element(" + 
mailboxId + ")," + JCRMailbox.ID_PROPERTY + ")";
-            Query query = manager.createQuery(queryString, Query.XPATH);
-
-            NodeIterator nodes = query.execute().getNodes();
-            if (nodes.hasNext() == false) {
-                throw new MailboxNotFoundException(mailboxId);
-            } else {
-                return new JCRMailbox(nodes.nextNode(),logger);
-            }
-        } catch (PathNotFoundException e) {
-            throw new MailboxNotFoundException(mailboxId);
-        } catch (RepositoryException e) {
-            throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
-        }
-        */
         throw new StorageException(HumanReadableText.UNSUPPORTED,null);
     }
 
     public Mailbox findMailboxByUUID(String uuid) throws StorageException, 
MailboxNotFoundException {
         System.out.println("UUID="+uuid);
        try {
-            return new JCRMailbox(session.getNodeByUUID(uuid),logger);
+            return new JCRMailbox(getSession().getNodeByUUID(uuid),logger);
         } catch (PathNotFoundException e) {
             throw new MailboxNotFoundException(uuid);
         } catch (RepositoryException e) {
@@ -183,7 +171,7 @@ public class JCRMailboxMapper extends No
      */
     public Mailbox findMailboxByName(String name) throws StorageException, 
MailboxNotFoundException {
         try {
-               QueryManager manager = session.getWorkspace().getQueryManager();
+               QueryManager manager = 
getSession().getWorkspace().getQueryManager();
                String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailbox.NAME_PROPERTY + "='" + name + "']";
                QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
                NodeIterator it = result.getNodes();
@@ -209,7 +197,7 @@ public class JCRMailboxMapper extends No
     public List<Mailbox> findMailboxWithNameLike(String name) throws 
StorageException {
         List<Mailbox> mailboxList = new ArrayList<Mailbox>();
         try {          
-               QueryManager manager = session.getWorkspace().getQueryManager();
+               QueryManager manager = 
getSession().getWorkspace().getQueryManager();
                String queryString = "//" + PATH + 
"//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'*" + name + 
"*')]";
                QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
                NodeIterator it = result.getNodes();
@@ -232,16 +220,20 @@ public class JCRMailboxMapper extends No
      * imap.store.mail.model.Mailbox)
      */
     public void save(Mailbox mailbox) throws StorageException {
+        
         String nodePath = JCRUtils.createPath(PATH,mailbox.getName());
         try {
+            createPathIfNotExists();
+
             Node node;
-            if (session.getRootNode().hasNode(nodePath)) {
-                node = session.getRootNode().getNode(nodePath);
+            if (getSession().getRootNode().hasNode(nodePath)) {
+                node = getSession().getRootNode().getNode(nodePath);
             } else {
-                node = session.getRootNode().addNode(nodePath, 
JcrConstants.MIX_REFERENCEABLE);
+                node = getSession().getRootNode().addNode(nodePath);
+                node.addMixin(JcrConstants.MIX_REFERENCEABLE);
             }
             ((JCRMailbox)mailbox).merge(node);
-            session.save();
+            getSession().save();
             System.out.println("U="+node.getUUID());
         } catch (RepositoryException e) {
                e.printStackTrace();
@@ -254,7 +246,7 @@ public class JCRMailboxMapper extends No
         JCRMailbox mailbox = (JCRMailbox) findMailboxByUUID(uuid);
         mailbox.consumeUid();
         try {
-            session.save();
+            getSession().save();
         } catch (PathNotFoundException e) {
             throw new MailboxNotFoundException(uuid);
         } catch (RepositoryException e) {
@@ -263,5 +255,11 @@ public class JCRMailboxMapper extends No
         return mailbox;
 
     }
+    
+    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/JCRMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=922790&r1=922789&r2=922790&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 08:49:31 2010
@@ -31,7 +31,7 @@ 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.JCRImapConstants;
+import org.apache.james.imap.jcr.JCRMapper;
 import org.apache.james.imap.jcr.JCRUtils;
 import org.apache.james.imap.jcr.mail.model.JCRMailboxMembership;
 import org.apache.james.imap.mailbox.MessageRange;
@@ -42,17 +42,15 @@ import org.apache.james.imap.mailbox.Sea
 import org.apache.james.imap.mailbox.SearchQuery.NumericRange;
 import org.apache.james.imap.store.mail.MessageMapper;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
-import org.apache.james.imap.store.transaction.NonTransactionalMapper;
 
-public class JCRMessageMapper extends NonTransactionalMapper implements 
MessageMapper, JCRImapConstants {
+public class JCRMessageMapper extends JCRMapper implements MessageMapper {
 
     private final static String PATH = PROPERTY_PREFIX + "mailboxMemberships";
-    private final Session session;
     private final Log logger;
     private String uuid;
 
     public JCRMessageMapper(final Session session, final String uuid, final 
Log logger) {
-        this.session = session;
+        super(session);
         this.logger = logger;
         this.uuid = uuid;
     }
@@ -67,7 +65,7 @@ public class JCRMessageMapper extends No
        
         try {
             String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
-            QueryManager manager = session.getWorkspace().getQueryManager();
+            QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             return result.getNodes().getSize();
         } catch (RepositoryException e) {
@@ -87,7 +85,7 @@ public class JCRMessageMapper extends No
         
         try {
             String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + 
JCRMailboxMembership.SEEN_PROPERTY +"='" + false +"']";
-            QueryManager manager = session.getWorkspace().getQueryManager();
+            QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             return result.getNodes().getSize();
         } catch (RepositoryException e) {
@@ -106,7 +104,7 @@ public class JCRMessageMapper extends No
         JCRMailboxMembership membership = (JCRMailboxMembership) message;
         if (membership.isPersistent()) {
             try {
-                session.getNodeByUUID(membership.getUUID()).remove();
+                getSession().getNodeByUUID(membership.getUUID()).remove();
             } catch (RepositoryException e) {
                 throw new StorageException(HumanReadableText.DELETED_FAILED, 
e);
             }
@@ -150,7 +148,7 @@ public class JCRMessageMapper extends No
     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 + "]";
-        QueryManager manager = session.getWorkspace().getQueryManager();
+        QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
 
         NodeIterator iterator = result.getNodes();
@@ -163,7 +161,7 @@ public class JCRMessageMapper extends No
     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 + "]";
-        QueryManager manager = session.getWorkspace().getQueryManager();
+        QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
 
         NodeIterator iterator = result.getNodes();
@@ -176,7 +174,7 @@ public class JCRMessageMapper extends No
     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 + "]";
-        QueryManager manager = session.getWorkspace().getQueryManager();
+        QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
 
         NodeIterator iterator = result.getNodes();
@@ -189,7 +187,7 @@ public class JCRMessageMapper extends No
     private List<MailboxMembership> findMessagesInMailbox(String uuid) throws 
RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "']";
-        QueryManager manager = session.getWorkspace().getQueryManager();
+        QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
 
         NodeIterator iterator = result.getNodes();
@@ -210,7 +208,7 @@ public class JCRMessageMapper extends No
         try {
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
             String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + 
JCRMailboxMembership.DELETED_PROPERTY +"=" + true +"]";
-            QueryManager manager = session.getWorkspace().getQueryManager();
+            QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             
             NodeIterator iterator = result.getNodes();
@@ -235,7 +233,7 @@ public class JCRMessageMapper extends No
         try {
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
             String queryString = "//" + PATH + "//element(*)[@" + 
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" + 
JCRMailboxMembership.RECENT_PROPERTY +"=" + true +"]";
-            QueryManager manager = session.getWorkspace().getQueryManager();
+            QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             
             NodeIterator iterator = result.getNodes();
@@ -258,7 +256,7 @@ public class JCRMessageMapper extends No
         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;
-            QueryManager manager = session.getWorkspace().getQueryManager();
+            QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, 
Query.XPATH).execute();
             
             NodeIterator iterator = result.getNodes();
@@ -284,13 +282,13 @@ public class JCRMessageMapper extends No
         try {
             if (membership.isPersistent()) {
 
-                messageNode = session.getNodeByUUID(membership.getUUID());
+                messageNode = getSession().getNodeByUUID(membership.getUUID());
 
             } else {
-                messageNode = 
session.getRootNode().addNode(JCRUtils.createPath(PATH, 
String.valueOf(membership.getUid())));
+                messageNode = 
getSession().getRootNode().addNode(JCRUtils.createPath(PATH, 
String.valueOf(membership.getUid())));
             }
             membership.merge(messageNode);
-            session.save();
+            getSession().save();
 
        
         } catch (RepositoryException e) {
@@ -310,7 +308,7 @@ public class JCRMessageMapper extends No
         try {
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
             final String xpathQuery = formulateXPath(uuid, query);
-            QueryManager manager = session.getWorkspace().getQueryManager();
+            QueryManager manager = 
getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(xpathQuery, 
Query.XPATH).execute();
             
             NodeIterator it = result.getNodes();

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=922790&r1=922789&r2=922790&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 08:49:31 2010
@@ -29,6 +29,7 @@ import javax.jcr.Session;
 
 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;
@@ -44,14 +45,13 @@ import org.apache.james.imap.store.user.
  * ends in a "real" action
  * 
  */
-public class JCRSubscriptionMapper extends NonTransactionalMapper implements 
SubscriptionMapper, JCRImapConstants {
+public class JCRSubscriptionMapper extends JCRMapper implements 
SubscriptionMapper {
 
-    private final Session session;
     private final Log log;
     private final static String PATH = PROPERTY_PREFIX + "subscriptions";
 
     public JCRSubscriptionMapper(final Session session, final Log log) {
-        this.session = session;
+        super(session);
         this.log = log;
     }
 
@@ -70,7 +70,7 @@ public class JCRSubscriptionMapper exten
 
                 Node node = ((Persistent) subscription).getNode();
                 node.remove();
-                session.save();
+                getSession().save();
             } catch (PathNotFoundException e) {
                 // do nothing
             } catch (RepositoryException e) {
@@ -88,7 +88,7 @@ public class JCRSubscriptionMapper exten
      */
     public Subscription findFindMailboxSubscriptionForUser(String user, String 
mailbox) throws SubscriptionException {
         try {
-            Node node = 
session.getRootNode().getNode(JCRUtils.createPath(PATH, user, mailbox));
+            Node node = 
getSession().getRootNode().getNode(JCRUtils.createPath(PATH, user, mailbox));
             return new JCRSubscription(node, log);
         } catch (PathNotFoundException e) {
             return null;
@@ -107,7 +107,7 @@ public class JCRSubscriptionMapper exten
     public List<Subscription> findSubscriptionsForUser(String user) throws 
SubscriptionException {
         List<Subscription> subList = new ArrayList<Subscription>();
         try {
-            Node node = session.getRootNode().getNode(JCRUtils.createPath(PATH 
, user));
+            Node node = 
getSession().getRootNode().getNode(JCRUtils.createPath(PATH , user));
             NodeIterator nodeIt = node.getNodes("*");
             while (nodeIt.hasNext()) {
                 subList.add(new JCRSubscription(nodeIt.nextNode(), log));
@@ -133,7 +133,7 @@ public class JCRSubscriptionMapper exten
         String mailbox = subscription.getMailbox();
         String nodename = JCRUtils.createPath(username, mailbox);
         try {
-            Node node = session.getRootNode().getNode(PATH);
+            Node node = getSession().getRootNode().getNode(PATH);
             Node subNode;
             if (node.hasNode(nodename)) {
                 subNode = node.getNode(nodename);
@@ -144,7 +144,7 @@ public class JCRSubscriptionMapper exten
             // Copy new properties to the node
             ((JCRSubscription)subscription).merge(subNode);
 
-            session.save();
+            getSession().save();
         } catch (RepositoryException e) {
             throw new SubscriptionException(HumanReadableText.SAVE_FAILED, e);
         }

Modified: 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
 (original)
+++ 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
 Sun Mar 14 08:49:31 2010
@@ -76,4 +76,5 @@ public class JPATransactionalMapper exte
             entityManager.getTransaction().rollback();
         }
     }
+
 }

Modified: 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
 (original)
+++ 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
 Sun Mar 14 08:49:31 2010
@@ -22,6 +22,7 @@ package org.apache.james.imap.mailbox;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
 import org.apache.commons.logging.Log;
 
@@ -110,6 +111,9 @@ public interface MailboxSession {
      */
     public Collection<Namespace> getSharedSpaces();
     
+    
+    public Map<Object,Object> getAttributes();
+    
     /**
      * Describes a <a href='http://www.isi.edu/in-notes/rfc2342.txt' 
rel='tag'>RFC 2342</a> namespace.
      */
@@ -128,4 +132,6 @@ public interface MailboxSession {
          */
         public String getPrefix();
     }
+    
+    
 }

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
 Sun Mar 14 08:49:31 2010
@@ -21,8 +21,10 @@ package org.apache.james.imap.store;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.james.imap.mailbox.MailboxSession;
@@ -50,6 +52,8 @@ public class SimpleMailboxSession implem
 
     private final List<Locale> localePreferences;
 
+    private final Map<Object, Object> attributes;
+
     public SimpleMailboxSession(final long sessionId, final String userName, 
final Log log, char deliminator,
             final List<Locale> localePreferences) {
         super();
@@ -60,6 +64,7 @@ public class SimpleMailboxSession implem
         otherUsersSpace = null;
         personalSpace = new SimpleMailboxNamespace(deliminator, "");
         this.localePreferences = localePreferences;
+        attributes = new HashMap<Object, Object>();
     }
 
     /*
@@ -152,4 +157,12 @@ public class SimpleMailboxSession implem
         return localePreferences;
     }
 
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.imap.mailbox.MailboxSession#getAttributes()
+     */
+    public Map<Object, Object> getAttributes() {
+        return attributes;
+    }
+
 }

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
 Sun Mar 14 08:49:31 2010
@@ -120,7 +120,7 @@ public abstract class StoreMailboxManage
         synchronized (mailboxes) {
             final MailboxMapper mapper = createMailboxMapper(session);
             Mailbox mailboxRow = mapper.findMailboxByName(mailboxName);
-
+            
             if (mailboxRow == null) {
                 getLog().info("Mailbox '" + mailboxName + "' not found.");
                 throw new MailboxNotFoundException(mailboxName);
@@ -253,7 +253,6 @@ public abstract class StoreMailboxManage
                 }
                 
             });
-
         }
     }
 

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
 Sun Mar 14 08:49:31 2010
@@ -92,7 +92,7 @@ public abstract class StoreSubscriptionM
         final Collection<String> results = new HashSet<String>(INITIAL_SIZE);
         for (Subscription subscription:subscriptions) {
             results.add(subscription.getMailbox());
-        }
+        }        
         return results;
     }
 

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
 Sun Mar 14 08:49:31 2010
@@ -27,7 +27,7 @@ import org.apache.james.imap.mailbox.Mai
  * This class is mostly useful for Mapper implementations which not support 
Transactions
  *
  */
-public class NonTransactionalMapper extends AbstractTransactionalMapper {
+public abstract class NonTransactionalMapper extends 
AbstractTransactionalMapper {
 
 
     /**

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
 Sun Mar 14 08:49:31 2010
@@ -35,7 +35,7 @@ public interface TransactionalMapper {
      * @throws MailboxException
      */
     public void execute(Transaction transaction) throws MailboxException;
-    
+        
     /**
      * Unit of work executed in a Transaction
      *

Modified: 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 (original)
+++ 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 Sun Mar 14 08:49:31 2010
@@ -25,6 +25,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -49,6 +50,7 @@ import org.apache.james.imap.mailbox.Sub
 import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
 import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
 import org.apache.james.imap.store.Authenticator;
+import org.apache.james.imap.store.SimpleMailboxSession;
 import org.apache.james.imap.store.Subscriber;
 import org.apache.james.mailboxmanager.torque.om.MailboxRow;
 import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
@@ -193,6 +195,7 @@ public class TorqueMailboxManager implem
         }
     }
 
+    @SuppressWarnings("unchecked")
     public void renameMailbox(String from, String to, MailboxSession session)
             throws MailboxException {
         getLog().debug("renameMailbox " + from + " to " + to);
@@ -252,6 +255,7 @@ public class TorqueMailboxManager implem
         fromMailbox.copyTo(set, toMailbox, session);
     }
 
+    @SuppressWarnings("unchecked")
     public List<MailboxMetaData> search(final MailboxQuery mailboxExpression, 
MailboxSession session)
             throws MailboxException {
         final char localWildcard = mailboxExpression.getLocalWildcard();
@@ -303,6 +307,7 @@ public class TorqueMailboxManager implem
      * @return true when the mailbox has children, false otherwise
      * @throws TorqueException
      */
+    @SuppressWarnings("unchecked")
     private boolean hasChildren(String name) throws TorqueException {
         final Criteria criteria = new Criteria();
         criteria.add(MailboxRowPeer.NAME, (Object)(name + delimiter + 
SQL_WILDCARD_CHAR), Criteria.LIKE);
@@ -358,9 +363,8 @@ public class TorqueMailboxManager implem
         return createSession(userName, log);
     }
 
-    @SuppressWarnings("unchecked")
-    private TorqueMailboxSession createSession(String userName, Log log) {
-        return new TorqueMailboxSession(random.nextLong(), log, userName, 
delimiter, Collections.EMPTY_LIST);
+    private MailboxSession createSession(String userName, Log log) {
+        return new SimpleMailboxSession(random.nextLong(), userName, log, 
delimiter, new ArrayList<Locale>());
     }
 
     public String resolve(final String userName, String mailboxPath) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to