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 jo...@apache.org on 2006/12/03 20:59:21 UTC

svn commit: r481870 - in /james/server/trunk: ./ src/conf/ src/java/org/apache/james/core/ src/java/org/apache/james/imapserver/ src/java/org/apache/james/mailboxmanager/impl/ src/java/org/apache/james/mailboxmanager/mailstore/ src/java/org/apache/jame...

Author: joachim
Date: Sun Dec  3 11:59:18 2006
New Revision: 481870

URL: http://svn.apache.org/viewvc?view=rev&rev=481870
Log:
Introducing MailboxManagerFactory and VirtualMailboxManager
introducing MailstoreMailboxManager to access legacy MailRepositories
merged revions 471673:481814 from https://svn.apache.org/repos/asf/james/server/sandbox/

Added:
    james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/DefaultMailboxManagerProvider.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/DefaultMailboxManagerProvider.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/DefaultMailboxManagerProvider.xinfo
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/DefaultMailboxManagerProvider.xinfo
    james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/VirtualMailboxManager.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/VirtualMailboxManager.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerFactory.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerFactory.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/mailstore/
      - copied from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailstore/
    james/server/trunk/src/java/org/apache/james/mailboxmanager/mailstore/MailStoreMailboxManager.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailstore/MailStoreMailboxManager.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/mailstore/MailStoreMailboxManagerFactory.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailstore/MailStoreMailboxManagerFactory.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/mailstore/MailstoreMailboxCache.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailstore/MailstoreMailboxCache.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/mailstore/MyAvalonMailStore.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailstore/MyAvalonMailStore.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/mailstore/MyAvalonMailStore.xinfo
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailstore/MyAvalonMailStore.xinfo
    james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerFactory.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerFactory.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailRepositoryMailboxSession.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/MailRepositoryMailboxSession.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/impl/DefaultMailboxManagerProviderTest.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/impl/DefaultMailboxManagerProviderTest.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerFactoryTest.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerFactoryTest.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerIntegrationTest.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerIntegrationTest.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerTest.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/impl/VirtualMailboxManagerTest.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/mailstore/
      - copied from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/mailstore/
    james/server/trunk/src/test/org/apache/james/mailboxmanager/mailstore/MailStoreMailboxCacheTest.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/mailstore/MailStoreMailboxCacheTest.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/mock/MockMailboxManagerFactory.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/mock/MockMailboxManagerFactory.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/repository/
      - copied from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/repository/
    james/server/trunk/src/test/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepositoryTest.java
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepositoryTest.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/testdata/
      - copied from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/testdata/
    james/server/trunk/src/test/org/apache/james/mailboxmanager/testdata/DefaultMailboxManagerConf.xml
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/testdata/DefaultMailboxManagerConf.xml
    james/server/trunk/src/test/org/apache/james/mailboxmanager/testdata/MixedMailstores.xml
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/testdata/MixedMailstores.xml
    james/server/trunk/src/test/org/apache/james/mailboxmanager/testdata/VirtualRepositoryMix.xml
      - copied unchanged from r481814, james/server/sandbox/mailbox-namespaces/src/test/org/apache/james/mailboxmanager/testdata/VirtualRepositoryMix.xml
Removed:
    james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/AvalonMailStore.xinfo
    james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MyAvalonMailStore.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MyAvalonMailStore.xinfo
    james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProvider.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProvider.xinfo
Modified:
    james/server/trunk/build.xml
    james/server/trunk/src/conf/james-assembly.xml
    james/server/trunk/src/conf/james-config.xml
    james/server/trunk/src/conf/mailboxManagerSqlResources.xml
    james/server/trunk/src/java/org/apache/james/core/AvalonMailStore.xinfo
    james/server/trunk/src/java/org/apache/james/imapserver/ImapSession.java
    james/server/trunk/src/java/org/apache/james/imapserver/ImapSessionImpl.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerProvider.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java
    james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
    james/server/trunk/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java
    james/server/trunk/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java

Modified: james/server/trunk/build.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/build.xml?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/build.xml (original)
+++ james/server/trunk/build.xml Sun Dec  3 11:59:18 2006
@@ -779,6 +779,7 @@
         </javac>
         <copy todir="${build.test.classes}">
             <fileset dir="${junitjava.dir}" includes="**/*.zone" />
+            <fileset dir="${junitjava.dir}" includes="**/*.xml" />        	
         </copy>
     </target>
 

Modified: james/server/trunk/src/conf/james-assembly.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/james-assembly.xml?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/conf/james-assembly.xml (original)
+++ james/server/trunk/src/conf/james-assembly.xml Sun Dec  3 11:59:18 2006
@@ -39,10 +39,19 @@
              role="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" />
   </block>
 
-  <block name="mailboxmanager" class="org.apache.james.mailboxmanager.torque.TorqueMailboxManagerProvider">
-    <provide name="filesystem" role="org.apache.james.services.FileSystem" />
-  </block>  
     
+  <block name="mailboxmanager" class="org.apache.james.mailboxmanager.impl.DefaultMailboxManagerProvider">
+      <provide name="filesystem" role="org.apache.james.services.FileSystem" />
+      <provide name="mailboxmanager-mailstore" role="org.apache.avalon.cornerstone.services.store.Store" />      
+  </block>  
+
+  <block name="mailboxmanager-mailstore" class="org.apache.james.mailboxmanager.mailstore.MyAvalonMailStore" >
+    <provide name="database-connections"
+             role="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" />
+    <provide name="filesystem" role="org.apache.james.services.FileSystem" />     
+  </block>      
+ 
+   
   <!-- The James Spool Manager block  -->
   <block name="spoolmanager" class="org.apache.james.transport.JamesSpoolManager" >
     <provide name="spoolrepository" role="org.apache.james.services.SpoolRepository"/>
@@ -185,15 +194,9 @@
     <provide name="dnsserver" role="org.apache.james.services.DNSServer"/>
   </block>
 
-  <!-- The High Level Storage block 
-  <block name="mailstore" class="org.apache.james.core.AvalonMailStore" >
-    <provide name="database-connections"
-             role="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" />
-    <provide name="filesystem" role="org.apache.james.services.FileSystem" />
-  </block>
-  -->
+  <!-- The High Level Storage block -->
     
-  <block name="mailstore" class="org.apache.james.mailboxmanager.repository.MyAvalonMailStore" >
+  <block name="mailstore" class="org.apache.james.core.AvalonMailStore" >
     <provide name="database-connections"
              role="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" />
     <provide name="mailboxmanager"

Modified: james/server/trunk/src/conf/james-config.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/james-config.xml?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/conf/james-config.xml (original)
+++ james/server/trunk/src/conf/james-config.xml Sun Dec  3 11:59:18 2006
@@ -70,10 +70,11 @@
 
       <!-- Alternative inbox repository definition for DB use. -->
       <!-- Stores message body in file system, rest in database -->
-      <!-- TEMPORARY DEFAULT: dbfile using Derby  -->
+      <!-- TEMPORARY DEFAULT: dbfile using Derby -->         
       <inboxRepository>
          <repository destinationURL="dbfile://maildb/inbox/" type="MAIL"/>
       </inboxRepository>
+
       <!-- TEMPORARY DEFAULT: dbfile using Derby  -->
 
       <!-- Alternative inbox repository definition for mbox use. -->
@@ -89,10 +90,10 @@
       -->
       <!-- Experimental IMAP support
       <inboxRepository>
-         <repository destinationURL="mailboxmanager://users/" type="MAIL" />
+         <repository destinationURL="mailboxmanager://#mail/" 
+                     postfix=".INBOX" translateDelimiters="true" type="MAIL" />
       </inboxRepository>
-      -->
-      
+       -->
       <!-- Set to true to support virtualHosting. If virtualHosting support is enabled the server will accept thread every user independ on -->
       <!-- domain level. -->
       <enableVirtualHosting> false </enableVirtualHosting>     
@@ -103,20 +104,77 @@
       
    </James>
 
-   <!-- Experimental IMAP support -->
-   <mailboxmanager>
-       <torque-properties>
-           <property name="torque.database.default" value="mailboxmanager" />
-           <property name="torque.database.mailboxmanager.adapter" value="derby" />
-           <property name="torque.dsfactory.mailboxmanager.factory" value="org.apache.torque.dsfactory.SharedPoolDataSourceFactory" />
-           <property name="torque.dsfactory.mailboxmanager.connection.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
-           <property name="torque.dsfactory.mailboxmanager.connection.url" value="jdbc:derby:../apps/james/var/mailboxmanager-derbydb;create=true" />
-           <property name="torque.dsfactory.mailboxmanager.connection.user" value="app" />
-           <property name="torque.dsfactory.mailboxmanager.connection.password" value="app" />
-           <property name="torque.dsfactory.mailboxmanager.pool.maxActive" value="100" />
-      </torque-properties>  
-   </mailboxmanager>    
-
+    <!--
+        Don't forget to activate mailboxmanager inboxRepository in the 
+        James block, if you want to receive mail in your IMAP mailbox
+    --> 
+    <mailboxmanager>
+        <namespaces>
+            <usernamespace name="#mail" delimiter="."/>
+        </namespaces>
+        <factory
+            class="org.apache.james.mailboxmanager.impl.VirtualMailboxManagerFactory">
+            <mounts>
+                <mount>
+                    <point point="#mail"/>
+                    <target class="org.apache.james.mailboxmanager.torque.TorqueMailboxManagerFactory">
+                        <torque-properties>
+                            <property name="torque.database.default"
+                                value="mailboxmanager"/>
+                            <property
+                                name="torque.database.mailboxmanager.adapter"
+                                value="derby"/>
+                            <property
+                                name="torque.dsfactory.mailboxmanager.factory"
+                                value="org.apache.torque.dsfactory.SharedPoolDataSourceFactory"/>
+                            <property
+                                name="torque.dsfactory.mailboxmanager.connection.driver"
+                                value="org.apache.derby.jdbc.EmbeddedDriver"/>
+                            <property
+                                name="torque.dsfactory.mailboxmanager.connection.url"
+                                value="jdbc:derby:../apps/james/var/mailboxmanager-derbydb;create=true"/>
+                            <property
+                                name="torque.dsfactory.mailboxmanager.connection.user"
+                                value="app"/>
+                            <property
+                                name="torque.dsfactory.mailboxmanager.connection.password"
+                                value="app"/>
+                            <property
+                                name="torque.dsfactory.mailboxmanager.pool.maxActive"
+                                value="100"/>
+                        </torque-properties>
+                    </target>
+                </mount>
+                <!--  You could configure your local-address-error processor with 
+                      the repositoryPath mailboxmanager://#system.address-error/ 
+                 -->
+                <mount>
+                    <point point="#system"/>
+                    <target
+                        class="org.apache.james.mailboxmanager.mailstore.MailStoreMailboxManagerFactory">
+                        <repository destinationURL="file://var/mail/system/"
+                            type="MAIL"/>
+                    </target>
+                </mount>                
+                <!-- Mail to user1 goes to a file repository
+                <mount>
+                    <point point="#mail.user1"/>
+                    <target
+                        class="org.apache.james.mailboxmanager.mailstore.MailStoreMailboxManagerFactory">
+                        <repository destinationURL="file://var/mail/inboxes/user1"
+                            type="MAIL"/>
+                    </target>
+                </mount>        
+                -->
+            </mounts>
+        </factory>
+    </mailboxmanager>
+    
+  <!-- Experimental IMAP support 
+      
+        Don't forget to activate mailboxmanager inboxRepository in the 
+        James block, if you want to receive mail in your IMAP mailbox
+    -->     
    <imap-connections>
       <!-- RFC 3501 requires a minimum timeout of 30 minutes -->
       <idle-timeout>1800000</idle-timeout>
@@ -130,7 +188,6 @@
       <!-- port 993 is the well-known/IANA registered port for IMAPs ie over SSL/TLS -->
       <!-- port 143 is the well-known/IANA registered port for Standard IMAP4 -->
       <port>10143</port>
-
       <handler>
        <!-- RFC 3501 requires a minimum timeout of 30 minutes -->
        <connectiontimeout>1800000</connectiontimeout>         
@@ -1227,6 +1284,148 @@
    </mailstore>
 
 
+   <!-- The Mailstore block used by mailboxmanager -->  
+    
+   <mailboxmanager-mailstore>
+      <repositories>
+        <repository class="org.apache.james.mailboxmanager.repository.MailboxManagerMailRepository">
+            <protocols>
+               <protocol>mailboxmanager</protocol>
+            </protocols>
+            <types>
+               <type>MAIL</type>
+            </types>
+            <config>
+               <sqlFile>file://conf/mailboxManagerSqlResources.xml</sqlFile>
+            </config>
+         </repository>
+         <!-- File based repositories.  These repositories store all message data -->
+         <!-- in the file system. -->
+         <repository class="org.apache.james.mailrepository.AvalonMailRepository">
+            <protocols>
+               <protocol>file</protocol>
+            </protocols>
+            <types>
+               <type>MAIL</type>
+            </types>
+            <!-- Set if the messages should be listed sorted. False by default -->
+            <config FIFO="false"/> 
+         </repository>
+         <repository class="org.apache.james.mailrepository.AvalonSpoolRepository">
+            <protocols>
+               <protocol>file</protocol>
+            </protocols>
+            <types>
+               <type>SPOOL</type>
+            </types>
+         </repository>
+
+         <!-- JDBC based repositories.  These repositories store all message data -->
+         <!-- in the database. -->
+         <repository class="org.apache.james.mailrepository.JDBCMailRepository">
+            <protocols>
+               <protocol>db</protocol>
+            </protocols>
+            <types>
+               <type>MAIL</type>
+            </types>
+            <config>
+               <sqlFile>file://conf/sqlResources.xml</sqlFile>
+               <!-- Set the size threshold for in memory handling of storing operations -->
+               <!-- Default is currently 409600000 due to a bug with mysql and binary stream -->
+               <!-- currently under investigation. Please change this only if you know what -->
+               <!-- you do. -->
+               <!--
+               <inMemorySizeLimit>4096</inMemorySizeLimit>
+                -->
+            </config>
+         </repository>
+
+         <repository class="org.apache.james.mailrepository.JDBCSpoolRepository">
+            <protocols>
+               <protocol>db</protocol>
+            </protocols>
+            <types>
+               <type>SPOOL</type>
+            </types>
+            <config>
+               <sqlFile>file://conf/sqlResources.xml</sqlFile>
+               <maxcache>1000</maxcache>
+            </config>
+         </repository>
+
+         <!-- These repositories store message delivery and headers in the DB, and the body to the filesystem -->
+         <repository class="org.apache.james.mailrepository.JDBCMailRepository">
+            <protocols>
+               <protocol>dbfile</protocol>
+            </protocols>
+            <types>
+               <type>MAIL</type>
+            </types>
+            <config>
+               <sqlFile>file://conf/sqlResources.xml</sqlFile>
+               <filestore>file://var/dbmail</filestore>
+            </config>
+         </repository>
+
+         <repository class="org.apache.james.mailrepository.JDBCSpoolRepository">
+            <protocols>
+               <protocol>dbfile</protocol>
+            </protocols>
+            <types>
+               <type>SPOOL</type>
+            </types>
+            <config>
+               <sqlFile>file://conf/sqlResources.xml</sqlFile>
+               <filestore>file://var/dbmail</filestore>
+               <maxcache>1000</maxcache>
+            </config>
+         </repository>
+
+         <!-- The mbox repository is designed for MAIL only; SPOOL performance would be less than ideal-->
+         <repository class="org.apache.james.mailrepository.MBoxMailRepository">
+            <protocols>
+               <protocol>mbox</protocol>
+            </protocols>
+            <types>
+               <type>MAIL</type>
+            </types>
+            <!-- Set if the messages should be listed sorted. False by default -->
+            <config FIFO="false"/> 
+         </repository>
+
+         <repository class="org.apache.james.mailrepository.filepair.File_Persistent_Object_Repository">
+            <protocols>
+               <protocol>file</protocol>
+            </protocols>
+            <types>
+               <type>OBJECT</type>
+            </types>
+            <models>
+               <model>SYNCHRONOUS</model>
+               <model>ASYNCHRONOUS</model>
+               <model>CACHE</model>
+            </models>
+         </repository>
+
+         <repository class="org.apache.james.mailrepository.filepair.File_Persistent_Stream_Repository">
+            <protocols>
+               <protocol>file</protocol>
+            </protocols>
+            <types>
+               <type>STREAM</type>
+            </types>
+            <models>
+               <model>SYNCHRONOUS</model>
+               <model>ASYNCHRONOUS</model>
+               <model>CACHE</model>
+            </models>
+         </repository>
+      </repositories>
+      
+   </mailboxmanager-mailstore>
+
+    
    <!-- The User Storage block -->
    <users-store>
       <!-- Configure User Repositories here. -->

Modified: james/server/trunk/src/conf/mailboxManagerSqlResources.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/mailboxManagerSqlResources.xml?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/conf/mailboxManagerSqlResources.xml (original)
+++ james/server/trunk/src/conf/mailboxManagerSqlResources.xml Sun Dec  3 11:59:18 2006
@@ -22,7 +22,7 @@
 
   <dbOptions>
   </dbOptions>
-  <sqlDefs name="org.apache.james.mailboxmanager.torque.TorqueMailboxManagerProvider">
+  <sqlDefs name="org.apache.james.mailboxmanager.torque.TorqueMailboxManagerFactory">
 
     <sql name="tableName">${table}</sql>
 

Modified: james/server/trunk/src/java/org/apache/james/core/AvalonMailStore.xinfo
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/core/AvalonMailStore.xinfo?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/AvalonMailStore.xinfo (original)
+++ james/server/trunk/src/java/org/apache/james/core/AvalonMailStore.xinfo Sun Dec  3 11:59:18 2006
@@ -19,6 +19,9 @@
     <dependency>
       <service name="org.apache.james.services.FileSystem" version="1.0"/>
     </dependency>
+    <dependency>
+      <service name="org.apache.james.mailboxmanager.manager.MailboxManagerProvider" version="1.0"/>
+    </dependency>    
   </dependencies>
 
 </blockinfo>

Modified: james/server/trunk/src/java/org/apache/james/imapserver/ImapSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/imapserver/ImapSession.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/imapserver/ImapSession.java (original)
+++ james/server/trunk/src/java/org/apache/james/imapserver/ImapSession.java Sun Dec  3 11:59:18 2006
@@ -115,8 +115,9 @@
 
     /**
      * closes the Mailbox if needed
+     * @throws MailboxManagerException 
      */
-    void closeMailbox();
+    void closeMailbox() throws MailboxManagerException;
 
     MailboxManager getMailboxManager() throws MailboxManagerException;
 

Modified: james/server/trunk/src/java/org/apache/james/imapserver/ImapSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/imapserver/ImapSessionImpl.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/imapserver/ImapSessionImpl.java (original)
+++ james/server/trunk/src/java/org/apache/james/imapserver/ImapSessionImpl.java Sun Dec  3 11:59:18 2006
@@ -218,7 +218,7 @@
 
     public String buildFullName(String mailboxName) throws MailboxManagerException {
         if (!mailboxName.startsWith(NAMESPACE_PREFIX)) {
-            mailboxName = getMailboxManager().getPersonalDefaultNamespace(user).getName()+HIERARCHY_DELIMITER+mailboxName;
+            mailboxName = mailboxManagerProvider.getPersonalDefaultNamespace(user).getName()+HIERARCHY_DELIMITER+mailboxName;
         }
         return mailboxName;
     }

Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManager.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManager.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManager.java Sun Dec  3 11:59:18 2006
@@ -22,8 +22,6 @@
 import org.apache.james.mailboxmanager.GeneralMessageSet;
 import org.apache.james.mailboxmanager.ListResult;
 import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.Namespace;
-import org.apache.james.mailboxmanager.Namespaces;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailboxSession;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -92,28 +90,6 @@
     GeneralMailboxSession getGeneralMailboxSession(String mailboxName) throws MailboxManagerException;
     
     ImapMailboxSession getImapMailboxSession(String mailboxName) throws MailboxManagerException;
-
-    /**
-     * The Namespaces a user has access to.
-     * @param forUser TODO
-     * @param user
-     * 
-     * @return
-     */
-    Namespaces getNamespaces(User forUser);
-
-    /**
-     * To get the Inbox you can just to a mailbox
-     * defaultNameSpace=ImapMailboxRepository.getPersonalDefaultNameSpace(user)
-     * inbox=defaultNameSpace.getName()+defaultNameSpace.getHierarchyDelimter()+"INBOX";
-     * TODO add a convinience method to get directly a session mailbox for a users inbox
-     * @param forUser TODO
-     * 
-     * @return
-     */
-    Namespace getPersonalDefaultNamespace(User forUser);
-    
-    
 
     void createMailbox(String mailboxName) throws MailboxManagerException;
 

Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerProvider.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerProvider.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerProvider.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/manager/MailboxManagerProvider.java Sun Dec  3 11:59:18 2006
@@ -22,6 +22,8 @@
 import java.util.Map;
 
 import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.Namespace;
+import org.apache.james.mailboxmanager.Namespaces;
 import org.apache.james.mailboxmanager.mailbox.MailboxSession;
 import org.apache.james.services.User;
 
@@ -37,7 +39,7 @@
      */
     public void deleteEverything() throws MailboxManagerException;
     
-    MailboxSession getInboxSession(User user);
+    MailboxSession getInboxSession(User user) throws MailboxManagerException;
 
     /** 
      *  @param authUser the authorized User for checking credentials 
@@ -57,8 +59,27 @@
      */
     
     void deleteAllUserData(User authUser,User targetUser);
-    
-    
+
+    /**
+     * The Namespaces a user has access to.
+     * @param forUser TODO
+     * @param user
+     * 
+     * @return
+     */
+    Namespaces getNamespaces(User forUser);
+
+    /**
+     * To get the Inbox you can just to a mailbox
+     * defaultNameSpace=ImapMailboxRepository.getPersonalDefaultNameSpace(user)
+     * inbox=defaultNameSpace.getName()+defaultNameSpace.getHierarchyDelimter()+"INBOX";
+     * TODO add a convinience method to get directly a session mailbox for a users inbox
+     * @param forUser TODO
+     * 
+     * @return
+     */
+    Namespace getPersonalDefaultNamespace(User forUser);
+
     /**
      * key: <b>String</b> - mailbox name <br />
      * value: <b>Integer</b> - count of open sessions <br />
@@ -68,5 +89,4 @@
      */
     
     Map getOpenMailboxSessionCountMap();
-
 }

Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java Sun Dec  3 11:59:18 2006
@@ -37,10 +37,8 @@
 import org.apache.commons.logging.impl.SimpleLog;
 import org.apache.james.core.MailImpl;
 import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.Namespace;
 import org.apache.james.mailboxmanager.mailbox.Mailbox;
 import org.apache.james.mailboxmanager.mailbox.MailboxSession;
-import org.apache.james.mailboxmanager.manager.MailboxManager;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 import org.apache.james.services.User;
 import org.apache.james.userrepository.DefaultJamesUser;
@@ -55,18 +53,21 @@
 public class MailboxManagerMailRepository extends AbstractMailRepository
         implements Configurable, Serviceable {
 
+    private static final String PREFIX = "mailboxmanager://";
+    
+    // TODO extract delimiter from namespaces
+    private static final String DL = ".";
+
     /**
      * used to map keys to uid and vice versa
      */
     private KeyBidiMap keyBidiMap = null;
 
-    private MailboxManager mailboxManager;
-
     private MailboxGateKeeper mailboxGateKeeper;
 
     private MailboxManagerProvider mailboxManagerProvider;
-
-    private User user;
+    
+    private String mailboxName;
 
     protected String addMessage(MimeMessage message) throws MessagingException {
         try {
@@ -343,36 +344,13 @@
                 throw new RuntimeException("use<1 !");
             }
             if (mailboxSession == null) {
-                Namespace ns = getMailboxManager().getPersonalDefaultNamespace(
-                        user);
-
-                String inbox = ns.getName() + ns.getHierarchyDelimter()
-                        + "INBOX";
-                getMailboxManager().createInbox(user);
-                mailboxSession = getMailboxManager().getImapMailboxSession(
-                        inbox);
+                mailboxSession = getMailboxManagerProvider().getMailboxSession(
+                        null, mailboxName, true);
             }
             return mailboxSession;
         }
     }
 
-    /**
-     * lazy loads a MailboxManager from MailboxManagerProvider
-     * 
-     */
-
-    protected MailboxManager getMailboxManager() throws MessagingException,
-            MailboxManagerException {
-        if (mailboxManager == null) {
-            if (user == null) {
-                throw new MessagingException("user is null");
-            }
-            mailboxManager = getMailboxManagerProvider()
-                    .getMailboxManagerInstance(user);
-        }
-        return mailboxManager;
-    }
-
     protected MailboxManagerProvider getMailboxManagerProvider() {
         return mailboxManagerProvider;
     }
@@ -385,22 +363,38 @@
     public void configure(Configuration conf) throws ConfigurationException {
 
         // fetch user name
-
-        String destinationUrl = conf.getAttribute("destinationURL");
-        if (destinationUrl.endsWith("/")) {
-            destinationUrl = destinationUrl.substring(0, destinationUrl
-                    .length() - 1);
+        String destinationURL = conf.getAttribute("destinationURL");
+        String postfix = conf.getAttribute("postfix", null);
+        boolean translateDelimiter=conf.getAttributeAsBoolean("translateDelimiters",false);
+
+        // transform the URL
+        String name = destinationURL;
+        
+        // remove protocol prefix
+        if (!name.startsWith(PREFIX)) {
+            throw new ConfigurationException("url has to start with "+PREFIX);
+        }
+        name=name.substring(PREFIX.length());                
+        
+        
+        // translate delimiter
+        if (translateDelimiter) {
+            // remove trailing /
+            if (name.endsWith("/")) {
+                name = name.substring(0, name.length() - 1);
+            }
+            name=name.replaceAll("/", DL);
+        }
+        
+        // append postfix
+        if (postfix!=null) {
+            name += postfix;
         }
-        String userName = destinationUrl.substring(destinationUrl
-                .lastIndexOf('/') + 1);
+        
         getLogger().info(
-                "Configured for user: '" + userName + "' URL: '"
-                        + destinationUrl + "'");
-        setUser(new DefaultJamesUser(userName, "none"));
-    }
-
-    public void setUser(User user) {
-        this.user = user;
+                "Configured for mailbox: '" + name + "' URL: '"
+                        + destinationURL + "' translateDelimiter: "+translateDelimiter);
+        setMailboxName(name);
     }
 
     public void service(ServiceManager serviceManager) throws ServiceException {
@@ -417,6 +411,14 @@
             log = new SimpleLog("MailboxManagerMailRepository");
         }
         return log;
+    }
+
+    String getMailboxName() {
+        return mailboxName;
+    }
+
+    public void setMailboxName(String mailboxName) {
+        this.mailboxName = mailboxName;
     }
 
 }

Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java Sun Dec  3 11:59:18 2006
@@ -29,11 +29,7 @@
 import org.apache.james.mailboxmanager.ListResult;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
-import org.apache.james.mailboxmanager.Namespace;
-import org.apache.james.mailboxmanager.Namespaces;
 import org.apache.james.mailboxmanager.impl.ListResultImpl;
-import org.apache.james.mailboxmanager.impl.NamespaceImpl;
-import org.apache.james.mailboxmanager.impl.NamespacesImpl;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailboxSession;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -50,10 +46,6 @@
 import org.apache.torque.util.Criteria;
 
 public class TorqueMailboxManager implements MailboxManager {
-    
-    public static final char HIERARCHY_DELIMITER='.';
-    
-    public static final String USER_NAMESPACE="#mail";
 
     private static Random random;
     private MailboxCache mailboxCache;
@@ -135,20 +127,6 @@
        return mailboxCache;
     }
     
-    public Namespaces getNamespaces(User forUser) {
-        NamespacesImpl nameSpaces=new NamespacesImpl();
-        nameSpaces.setShared(new Namespace[0]);
-        Namespace userNamespace=new NamespaceImpl(""+HIERARCHY_DELIMITER,USER_NAMESPACE);
-        nameSpaces.setUser(new Namespace[] {userNamespace}); 
-        Namespace personalDefault = getPersonalDefaultNamespace(forUser);
-        nameSpaces.setPersonal(new Namespace[] {personalDefault}); 
-        nameSpaces.setPersonalDefault(personalDefault);
-        return nameSpaces;
-    }
-
-    public Namespace getPersonalDefaultNamespace(User forUser) {
-        return new NamespaceImpl("" + HIERARCHY_DELIMITER,USER_NAMESPACE+HIERARCHY_DELIMITER+forUser.getUserName());
-    }
 
     public void createMailbox(String namespaceName)
             throws MailboxManagerException {

Modified: james/server/trunk/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java (original)
+++ james/server/trunk/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java Sun Dec  3 11:59:18 2006
@@ -1,3 +1,22 @@
+/****************************************************************
+ * 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.imapserver.mock;
 
 import org.apache.james.imapserver.ImapHandlerConfigurationData;

Modified: james/server/trunk/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java?view=diff&rev=481870&r1=481869&r2=481870
==============================================================================
--- james/server/trunk/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java (original)
+++ james/server/trunk/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java Sun Dec  3 11:59:18 2006
@@ -1,22 +1,45 @@
+/****************************************************************
+ * 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.mailboxmanager.mock;
 
-import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerProvider;
+import org.apache.james.mailboxmanager.impl.DefaultMailboxManagerProvider;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerFactory;
 import org.apache.james.test.mock.james.MockFileSystem;
 
 public class TorqueMailboxManagerProviderSingleton {
     
     
-    private static TorqueMailboxManagerProvider torqueMailboxManagerProvider;
+    private static DefaultMailboxManagerProvider defaultMailboxManagerProvider;
 
-    public synchronized static TorqueMailboxManagerProvider getTorqueMailboxManagerProviderInstance() throws Exception {
-        if (torqueMailboxManagerProvider==null) {
-            torqueMailboxManagerProvider=new TorqueMailboxManagerProvider() {{
+    public synchronized static MailboxManagerProvider getTorqueMailboxManagerProviderInstance() throws Exception {
+        if (defaultMailboxManagerProvider==null) {
+            TorqueMailboxManagerFactory torqueMailboxManagerFactory=new TorqueMailboxManagerFactory() {{
                 setFileSystem(new MockFileSystem());
             }};
-            torqueMailboxManagerProvider.configureDefaults();
-            torqueMailboxManagerProvider.initialize();
+            torqueMailboxManagerFactory.configureDefaults();
+            torqueMailboxManagerFactory.initialize();
+            defaultMailboxManagerProvider=new DefaultMailboxManagerProvider();
+            defaultMailboxManagerProvider.setMailboxManagerFactory(torqueMailboxManagerFactory);
         }
-        return torqueMailboxManagerProvider;
+        return defaultMailboxManagerProvider;
         
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org