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]