Author: rdonkin
Date: Sat Dec 29 11:03:43 2007
New Revision: 607463

URL: http://svn.apache.org/viewvc?rev=607463&view=rev
Log:
Create now creates all ancester mailboxes in hierarchy. As required in RFC 3501.

Modified:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/ListResultImpl.java
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
    
james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Create.test
    
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
    
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java
    
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/SessionTest.java
    
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/ListResultImpl.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/ListResultImpl.java?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/ListResultImpl.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/ListResultImpl.java
 Sat Dec 29 11:03:43 2007
@@ -44,4 +44,7 @@
         return name;
     }
 
+    public String toString() {
+        return "ListResult: " + name;
+    }
 }

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
 Sat Dec 29 11:03:43 2007
@@ -78,6 +78,12 @@
      */
     ImapMailbox getImapMailbox(String mailboxName, boolean autocreate) throws 
MailboxManagerException;
 
+    /**
+     * Creates a new mailbox.
+     * Any intermediary mailboxes missing from the hierarchy should be created.
+     * @param mailboxName name, not null
+     * @throws MailboxManagerException
+     */
     void createMailbox(String mailboxName) throws MailboxManagerException;
 
     void deleteMailbox(String mailboxName) throws MailboxManagerException;

Modified: 
james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Create.test
URL: 
http://svn.apache.org/viewvc/james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Create.test?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Create.test
 (original)
+++ 
james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Create.test
 Sat Dec 29 11:03:43 2007
@@ -31,6 +31,26 @@
 # Create quoted
 C: 14 CREATE "Pepe juan"
 S: 14 OK CREATE completed.
+#
+# [EMAIL PROTECTED]
+# When mailbox name is suffixed with hierarchy separator
+# name created must remove tailing delimiter
+C: 15 CREATE another.test.
+S: 15 OK CREATE completed.
+C: 16 LIST "" another*
+S: \* LIST \(\) "." "another"
+S: \* LIST \(\) "." "another.test"
+S: 16 OK LIST completed.
+#
+# [EMAIL PROTECTED]
+# Intermediary mailboxes which don't exist should be created
+C: 17 CREATE alpha.beta.gamma
+S: 17 OK CREATE completed.
+C: 18 LIST "" alpha*
+S: \* LIST \(\) "." "alpha"
+S: \* LIST \(\) "." "alpha.beta"
+S: \* LIST \(\) "." "alpha.beta.gamma"
+S: 18 OK LIST completed.
 
 # Cleanup
 C: a1 DELETE test1.subfolder1
@@ -42,4 +62,14 @@
 C: a1 DELETE test
 S: a1 OK DELETE completed.
 C: a10 DELETE "Pepe juan"
-S: a10 OK DELETE completed.
\ No newline at end of file
+S: a10 OK DELETE completed.
+C: a11 DELETE alpha.beta.gamma
+S: a11 OK DELETE completed.
+C: a11 DELETE alpha.beta
+S: a11 OK DELETE completed.
+C: a11 DELETE alpha
+S: a11 OK DELETE completed.
+C: a11 DELETE another.test
+S: a11 OK DELETE completed.
+C: a11 DELETE another
+S: a11 OK DELETE completed.
\ No newline at end of file

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
 Sat Dec 29 11:03:43 2007
@@ -196,10 +196,10 @@
     {
         ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        System.out.println("IN :" + s);
+        //System.out.println("IN :" + s);
         handler.handleRequest(is, os, session);
         String out = os.toString();
-        System.out.println("OUT:" + out);
+        //System.out.println("OUT:" + out);
         return out;
         
     }

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java
 Sat Dec 29 11:03:43 2007
@@ -69,7 +69,8 @@
                 USER_MAILBOX_ROOT + ".test1.test1neu",
                 USER_MAILBOX_ROOT + ".test1.test1b",
                 USER_MAILBOX_ROOT + ".test2.test2a",
-                USER_MAILBOX_ROOT + ".test2.test2b" };
+                USER_MAILBOX_ROOT + ".test2.test2b",
+                USER_MAILBOX_ROOT + ".test2"};
         verifyFolderList(expected, getFolderNames());
 
         verifyCommand(new LogoutClientCommand());
@@ -79,14 +80,16 @@
             MessagingException, MailboxManagerException {
         verifyCommand(new LoginCommand(USER_NAME, USER_PASSWORD));
 
-        verifyCommand(new RenameClientCommand("test1", "test2"));
+        verifyCommand(new RenameClientCommand("test1", "test3"));
 
         String[] expected = { USER_MAILBOX_ROOT + ".INBOX",
-                USER_MAILBOX_ROOT + ".test", USER_MAILBOX_ROOT + ".test2",
-                USER_MAILBOX_ROOT + ".test2.test1a",
-                USER_MAILBOX_ROOT + ".test2.test1b",
+                USER_MAILBOX_ROOT + ".test", 
+                USER_MAILBOX_ROOT + ".test3",
+                USER_MAILBOX_ROOT + ".test3.test1a",
+                USER_MAILBOX_ROOT + ".test3.test1b",
                 USER_MAILBOX_ROOT + ".test2.test2a",
-                USER_MAILBOX_ROOT + ".test2.test2b" };
+                USER_MAILBOX_ROOT + ".test2.test2b",
+                USER_MAILBOX_ROOT + ".test2"};
         verifyFolderList(expected, getFolderNames());
 
         verifyCommand(new LogoutClientCommand());

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/SessionTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/SessionTest.java?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/SessionTest.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/SessionTest.java
 Sat Dec 29 11:03:43 2007
@@ -40,14 +40,14 @@
 public class SessionTest extends AbstractSessionTest
 {
 
-    String[] existing = 
{USER_MAILBOX_ROOT+".INBOX",USER_MAILBOX_ROOT+".test",USER_MAILBOX_ROOT+".test1",USER_MAILBOX_ROOT+".test1.test1a",USER_MAILBOX_ROOT+".test1.test1b",USER_MAILBOX_ROOT+".test2.test2a",USER_MAILBOX_ROOT+".test2.test2b"};
+    String[] existing = 
{USER_MAILBOX_ROOT+".INBOX",USER_MAILBOX_ROOT+".test",USER_MAILBOX_ROOT+".test1",USER_MAILBOX_ROOT+".test1.test1a",USER_MAILBOX_ROOT+".test1.test1b",USER_MAILBOX_ROOT+".test2",USER_MAILBOX_ROOT+".test2.test2a",USER_MAILBOX_ROOT+".test2.test2b"};
     Set existingSet = null;
 
     public void setUp() throws Exception
     {
         super.setUp();
         existingSet=new HashSet(Arrays.asList(existing));
-        createFolders((String[]) existingSet.toArray(new String[0]));
+        createFolders(existing);
     }
 
 
@@ -84,7 +84,7 @@
         String response=null;
         String start="* LSUB () \".\" ";
         while ((response=br.readLine())!=null) {
-            System.out.println("Parsing "+response);
+            //System.out.println("Parsing "+response);
             if (response.charAt(0)=='*') {
                 assertTrue(response.startsWith(start));
                 String name=response.substring(start.length());

Modified: 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=607463&r1=607462&r2=607463&view=diff
==============================================================================
--- 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 (original)
+++ 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 Sat Dec 29 11:03:43 2007
@@ -108,16 +108,44 @@
     public void createMailbox(String namespaceName)
             throws MailboxManagerException {
         getLog().debug("createMailbox "+namespaceName);
-        synchronized (managers) {
-            MailboxRow mr = new MailboxRow();
-            mr.setName(namespaceName);
-            mr.setLastUid(0);
-            mr.setUidValidity(Math.abs(random.nextInt()));
-            try {
-                mr.save();
-            } catch (Exception e) {
-                throw new MailboxManagerException(e);
+        final int length = namespaceName.length();
+        if (length == 0) {
+            getLog().warn("Ignoring mailbox with empty name");
+        } else if (namespaceName.charAt(length - 1) == HIERARCHY_DELIMITER) {
+            createMailbox(namespaceName.substring(0, length - 1));
+        } else {
+            synchronized (managers) {
+                // Create root first
+                // If any creation fails then mailbox will not be created
+                // TODO: transaction
+                int index = namespaceName.indexOf(HIERARCHY_DELIMITER);
+                int count = 0;
+                while (index>=0) {
+                    // Until explicit namespace support is added,
+                    // this workaround prevents the namespaced elements being 
created
+                    // TODO: add explicit support for namespaces
+                    if (index > 0 && count++ > 1) {
+                        final String mailbox = namespaceName.substring(0, 
index);
+                        if (!existsMailbox(mailbox)) {
+                            doCreate(mailbox);
+                        }
+                    }
+                    index = namespaceName.indexOf(HIERARCHY_DELIMITER, 
++index);
+                }
+                doCreate(namespaceName);
             }
+        }
+    }
+
+    private void doCreate(String namespaceName) throws MailboxManagerException 
{
+        MailboxRow mr = new MailboxRow();
+        mr.setName(namespaceName);
+        mr.setLastUid(0);
+        mr.setUidValidity(Math.abs(random.nextInt()));
+        try {
+            mr.save();
+        } catch (Exception e) {
+            throw new MailboxManagerException(e);
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to