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 rd...@apache.org on 2009/04/08 06:11:03 UTC

svn commit: r762791 - in /james/imap/trunk: seda/src/test/resources/org/apache/james/imap/scripts/ store/src/main/java/org/apache/james/imap/store/ torque/src/main/java/org/apache/james/mailboxmanager/torque/

Author: rdonkin
Date: Tue Apr  7 14:31:14 2009
New Revision: 762791

URL: http://svn.apache.org/viewvc?rev=762791&view=rev
Log:
Basic (slow) implementation for torque and other mailbox stores IMAP-73 https://issues.apache.org/jira/browse/IMAP-73

Modified:
    james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/Create.test
    james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListMailboxes.test
    james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPercentWildcard.test
    james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPlus.test
    james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameHierarchy.test
    james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameSelected.test
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
    james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java

Modified: james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/Create.test
URL: http://svn.apache.org/viewvc/james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/Create.test?rev=762791&r1=762790&r2=762791&view=diff
==============================================================================
--- james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/Create.test (original)
+++ james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/Create.test Tue Apr  7 14:31:14 2009
@@ -38,8 +38,8 @@
 C: 15 CREATE another.test.
 S: 15 OK CREATE completed.
 C: 16 LIST "" another*
-S: \* LIST \(\) "." "another"
-S: \* LIST \(\) "." "another.test"
+S: \* LIST \(\\HasChildren\) "." "another"
+S: \* LIST \(\\HasNoChildren\) "." "another.test"
 S: 16 OK LIST completed.
 #
 # RFC3501@6.3.3p2
@@ -47,9 +47,9 @@
 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: \* LIST \(\\HasChildren\) "." "alpha"
+S: \* LIST \(\\HasChildren\) "." "alpha.beta"
+S: \* LIST \(\\HasNoChildren\) "." "alpha.beta.gamma"
 S: 18 OK LIST completed.
 
 #

Modified: james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListMailboxes.test
URL: http://svn.apache.org/viewvc/james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListMailboxes.test?rev=762791&r1=762790&r2=762791&view=diff
==============================================================================
--- james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListMailboxes.test (original)
+++ james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListMailboxes.test Tue Apr  7 14:31:14 2009
@@ -28,27 +28,27 @@
 
 # Empty 1st arg searches default context (#mail)
 C: 10 LIST "" listtest
-S: \* LIST \(\) \"\.\" "listtest"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest"
 S: 10 OK LIST completed.
 
 # % returns all mailboxes matching
 C: a1 LIST "" %
 SUB {
-S: \* LIST \(\) \"\.\" "listtest"
-S: \* LIST \(\) \"\.\" "listtest1"
-S: \* LIST \(\) \"\.\" "INBOX"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest1"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "INBOX"
 }
 S: a1 OK LIST completed.
 C: a2 LIST "" INBOX%
-S: \* LIST \(\) \"\.\" "INBOX"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "INBOX"
 S: a2 OK LIST completed.
 C: a3 LIST "" I%
-S: \* LIST \(\) \"\.\" "INBOX"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "INBOX"
 S: a3 OK LIST completed.
 C: a4 LIST "" l%
 SUB {
-S: \* LIST \(\) \"\.\" "listtest"
-S: \* LIST \(\) \"\.\" "listtest1"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest1"
 }
 S: a4 OK LIST completed.
 
@@ -56,25 +56,25 @@
 # * returns all folders and subfolders
 C: b1 LIST "" *
 SUB {
-S: \* LIST \(\) \"\.\" "listtest"
-S: \* LIST \(\) \"\.\" "listtest1"
-S: \* LIST \(\) \"\.\" "listtest.subfolder"
-S: \* LIST \(\) \"\.\" "listtest1.subfolder1"
-S: \* LIST \(\) \"\.\" "INBOX"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest1"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "listtest.subfolder"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "listtest1.subfolder1"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "INBOX"
 }
 S: b1 OK LIST completed.
 C: b2 LIST "" INBOX*
-S: \* LIST \(\) \"\.\" "INBOX"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "INBOX"
 S: b2 OK LIST completed.
 C: b3 LIST "" I*
-S: \* LIST \(\) \"\.\" "INBOX"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "INBOX"
 S: b3 OK LIST completed.
 C: b4 LIST "" l*
 SUB {
-S: \* LIST \(\) \"\.\" "listtest"
-S: \* LIST \(\) \"\.\" "listtest1"
-S: \* LIST \(\) \"\.\" "listtest.subfolder"
-S: \* LIST \(\) \"\.\" "listtest1.subfolder1"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest1"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "listtest.subfolder"
+S: \* LIST \(\\HasNoChildren\) \"\.\" "listtest1.subfolder1"
 }
 S: b4 OK LIST completed.
 

Modified: james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPercentWildcard.test
URL: http://svn.apache.org/viewvc/james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPercentWildcard.test?rev=762791&r1=762790&r2=762791&view=diff
==============================================================================
--- james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPercentWildcard.test (original)
+++ james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPercentWildcard.test Tue Apr  7 14:31:14 2009
@@ -29,30 +29,30 @@
 
 C: A06 LIST "" %
 SUB {
-S: \* LIST \(\) \"\.\" \"one\"
-S: \* LIST \(\) \"\.\" \"two\"
-S: \* LIST \(\) \"\.\" \"three\"
-S: \* LIST \(\) \"\.\" \"four\"
-S: \* LIST \(\) \"\.\" \"five\"
-S: \* LIST \(\) \"\.\" \"INBOX\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"one\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"two\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"three\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"four\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"five\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"INBOX\"
 }
 S: A06 OK LIST completed.
 
 C: A07 LIST "" "%"
 SUB {
-S: \* LIST \(\) \"\.\" \"one\"
-S: \* LIST \(\) \"\.\" \"two\"
-S: \* LIST \(\) \"\.\" \"three\"
-S: \* LIST \(\) \"\.\" \"four\"
-S: \* LIST \(\) \"\.\" \"five\"
-S: \* LIST \(\) \"\.\" \"INBOX\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"one\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"two\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"three\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"four\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"five\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"INBOX\"
 }
 S: A07 OK LIST completed.
 
 C: A08 LIST "" "%.%"
 SUB {
-S: \* LIST \(\) \"\.\" \"three.sub\"
-S: \* LIST \(\) \"\.\" \"four.sub\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"three.sub\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"four.sub\"
 }
 S: A08 OK LIST completed.
 

Modified: james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPlus.test
URL: http://svn.apache.org/viewvc/james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPlus.test?rev=762791&r1=762790&r2=762791&view=diff
==============================================================================
--- james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPlus.test (original)
+++ james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/ListPlus.test Tue Apr  7 14:31:14 2009
@@ -36,45 +36,45 @@
 
 # Empty 1st arg searches default context (#mail)
 C: 10 LIST "" listtest
-S: \* LIST \(\) \"\.\" "listtest"
+S: \* LIST \(\\HasChildren\) \"\.\" "listtest"
 S: 10 OK LIST completed.
 
 # % returns all mailboxes matching
 C: a1 LIST "" %
 SUB {
-S: \* LIST \(\) \"\.\" \"listtest\"
-S: \* LIST \(\) \"\.\" \"listtest1\"
-S: \* LIST \(\) \"\.\" \"INBOX\"
-S: \* LIST \(\) \"\.\" \"funny\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"listtest\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"listtest1\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"INBOX\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"funny\"
 }
 S: a1 OK LIST completed.
 
 C: a2 list "" funny.%
 SUB {
-S: \* LIST \(\) \"\.\" \"funny.name with gaps\"
-S: \* LIST \(\) \"\.\" \"funny.name\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"funny.name with gaps\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"funny.name\"
 }
 S: a2 OK LIST completed.
 
 C: a3 LIST "" *
 SUB {
-S: \* LIST \(\) \"\.\" \"listtest\"
-S: \* LIST \(\) \"\.\" \"listtest.subfolder\"
-S: \* LIST \(\) \"\.\" \"listtest1\"
-S: \* LIST \(\) \"\.\" \"listtest1.subfolder1\"
-S: \* LIST \(\) \"\.\" \"INBOX\"
-S: \* LIST \(\) \"\.\" \"funny\"
-S: \* LIST \(\) \"\.\" \"funny.name with gaps\"
-S: \* LIST \(\) \"\.\" \"funny.name with gaps\.more\"
-S: \* LIST \(\) \"\.\" \"funny.name\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"listtest\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"listtest.subfolder\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"listtest1\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"listtest1.subfolder1\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"INBOX\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"funny\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"funny.name with gaps\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"funny.name with gaps\.more\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"funny.name\"
 }
 S: a3 OK LIST completed.
 
 C: a4 LIST "" funny.*
 SUB {
-S: \* LIST \(\) \"\.\" \"funny.name with gaps\"
-S: \* LIST \(\) \"\.\" \"funny.name with gaps\.more\"
-S: \* LIST \(\) \"\.\" \"funny.name\"
+S: \* LIST \(\\HasChildren\) \"\.\" \"funny.name with gaps\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"funny.name with gaps\.more\"
+S: \* LIST \(\\HasNoChildren\) \"\.\" \"funny.name\"
 }
 S: a4 OK LIST completed.
 

Modified: james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameHierarchy.test
URL: http://svn.apache.org/viewvc/james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameHierarchy.test?rev=762791&r1=762790&r2=762791&view=diff
==============================================================================
--- james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameHierarchy.test (original)
+++ james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameHierarchy.test Tue Apr  7 14:31:14 2009
@@ -25,73 +25,73 @@
 C: A5 CREATE one.two.three.four
 S: A5 OK CREATE completed\.
 C: A6 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "one"
-S: \* LIST \(\) "\." "one\.two"
-S: \* LIST \(\) "\." "one\.two\.three"
-S: \* LIST \(\) "\." "one\.two\.three\.four"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasChildren\) "\." "one"
+S: \* LIST \(\\HasChildren\) "\." "one\.two"
+S: \* LIST \(\\HasChildren\) "\." "one\.two\.three"
+S: \* LIST \(\\HasNoChildren\) "\." "one\.two\.three\.four"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A6 OK LIST completed\.
 C: A7 RENAME one.two alpha.beta
 S: A7 OK RENAME completed\.
 C: A8 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "alpha\.beta"
-S: \* LIST \(\) "\." "alpha\.beta\.three"
-S: \* LIST \(\) "\." "alpha\.beta\.three\.four"
-S: \* LIST \(\) "\." "one"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta\.three"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.three\.four"
+S: \* LIST \(\\HasNoChildren\) "\." "one"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A8 OK LIST completed\.
 C: A9 RENAME alpha.beta.three.four alpha.beta.gamma.delta
 S: A9 OK RENAME completed\.
 C: A10 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "alpha\.beta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta"
-S: \* LIST \(\) "\." "alpha\.beta\.three"
-S: \* LIST \(\) "\." "one"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.gamma\.delta"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.three"
+S: \* LIST \(\\HasNoChildren\) "\." "one"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A10 OK LIST completed\.
 C: A11 RENAME alpha.beta.three aleph
 S: A11 OK RENAME completed\.
 C: A12 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "aleph"
-S: \* LIST \(\) "\." "alpha\.beta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta"
-S: \* LIST \(\) "\." "one"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasNoChildren\) "\." "aleph"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.gamma\.delta"
+S: \* LIST \(\\HasNoChildren\) "\." "one"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A12 OK LIST completed\.
 C: A13 RENAME aleph alpha.beta.gamma.delta.epsilon
 S: A13 OK RENAME completed\.
 C: A14 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "alpha\.beta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta\.epsilon"
-S: \* LIST \(\) "\." "one"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta\.gamma\.delta"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.gamma\.delta\.epsilon"
+S: \* LIST \(\\HasNoChildren\) "\." "one"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A14 OK LIST completed\.
 C: A15 RENAME alpha.beta.gamma one
 S: A15 NO RENAME failed. Mailbox already exists\.
 C: A16 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "alpha\.beta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta\.epsilon"
-S: \* LIST \(\) "\." "one"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta\.gamma\.delta"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.gamma\.delta\.epsilon"
+S: \* LIST \(\\HasNoChildren\) "\." "one"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A16 OK LIST completed\.
 C: A17 DELETE one
 S: A17 OK DELETE completed\.
 C: A18 DELETE alpha
 S: A18 NO DELETE failed. No such mailbox\.
 C: A19 LIST "" "*"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "alpha\.beta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta"
-S: \* LIST \(\) "\." "alpha\.beta\.gamma\.delta\.epsilon"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta"
+S: \* LIST \(\\HasChildren\) "\." "alpha\.beta\.gamma\.delta"
+S: \* LIST \(\\HasNoChildren\) "\." "alpha\.beta\.gamma\.delta\.epsilon"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 S: A19 OK LIST completed\.
 C: A20 DELETE aleph
 S: A20 NO DELETE failed. No such mailbox\.

Modified: james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameSelected.test
URL: http://svn.apache.org/viewvc/james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameSelected.test?rev=762791&r1=762790&r2=762791&view=diff
==============================================================================
--- james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameSelected.test (original)
+++ james/imap/trunk/seda/src/test/resources/org/apache/james/imap/scripts/RenameSelected.test Tue Apr  7 14:31:14 2009
@@ -124,18 +124,18 @@
 S: A10 OK FETCH completed\.
 C: A11 LIST "" "*"
 SUB {
-S: \* LIST \(\) "\." "testmailbox"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "testmailbox"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 }
 S: A11 OK LIST completed\.
 C: A12 RENAME testmailbox anothermailbox
 S: A12 OK RENAME completed.
 C: A13 LIST "" "*"
 SUB {
-S: \* LIST \(\) "\." "anothermailbox"
-S: \* LIST \(\) "\." "INBOX"
-S: \* LIST \(\) "\." "selected"
+S: \* LIST \(\\HasNoChildren\) "\." "anothermailbox"
+S: \* LIST \(\\HasNoChildren\) "\." "INBOX"
+S: \* LIST \(\\HasNoChildren\) "\." "selected"
 }
 S: A13 OK LIST completed\.
 C: A14 FETCH 1:* (FLAGS UID BODY.PEEK[HEADER.FIELDS (DATE FROM TO ORIGINATOR X-LIST)])

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=762791&r1=762790&r2=762791&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 Tue Apr  7 14:31:14 2009
@@ -39,7 +39,9 @@
 import org.apache.james.imap.mailbox.MailboxSession;
 import org.apache.james.imap.mailbox.MessageRange;
 import org.apache.james.imap.mailbox.StandardMailboxMetaDataComparator;
+import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.mailbox.SubscriptionException;
+import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
 import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
 import org.apache.james.imap.store.mail.MailboxMapper;
 import org.apache.james.imap.store.mail.model.Mailbox;
@@ -234,9 +236,14 @@
             final String name = mailbox.getName();
             if (name.startsWith(base)) {
                 final String match = name.substring(baseLength);
-                if (mailboxExpression.isExpressionMatch(match,
-                        HIERARCHY_DELIMITER)) {
-                    results.add(new SimpleMailboxMetaData(name, "."));
+                if (mailboxExpression.isExpressionMatch(match, HIERARCHY_DELIMITER)) {
+                    final MailboxMetaData.Children inferiors; 
+                    if (hasChildren(name, mapper)) {
+                        inferiors = MailboxMetaData.Children.HAS_CHILDREN;
+                    } else {
+                        inferiors = MailboxMetaData.Children.HAS_NO_CHILDREN;
+                    }
+                    results.add(new SimpleMailboxMetaData(name, ".", inferiors, Selectability.NONE));
                 }
             }
         }
@@ -245,6 +252,18 @@
 
     }
 
+    /**
+     * Does the mailbox with the given name have inferior child mailboxes?
+     * @param name not null
+     * @return true when the mailbox has children, false otherwise
+     * @throws StorageException 
+     * @throws TorqueException
+     */
+    private boolean hasChildren(String name, final MailboxMapper mapper) throws StorageException {
+        final String search = name + HIERARCHY_DELIMITER + SQL_WILDCARD_CHAR;
+        return !mapper.findMailboxWithNameLike(search).isEmpty();
+    }
+
     public boolean mailboxExists(String mailboxName) throws MailboxException {
         synchronized (mailboxes) {
             final MailboxMapper mapper = createMailboxMapper();

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=762791&r1=762790&r2=762791&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 Tue Apr  7 14:31:14 2009
@@ -43,6 +43,7 @@
 import org.apache.james.imap.mailbox.MessageRange;
 import org.apache.james.imap.mailbox.StandardMailboxMetaDataComparator;
 import org.apache.james.imap.mailbox.SubscriptionException;
+import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
 import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
 import org.apache.james.mailboxmanager.torque.om.MailboxRow;
 import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
@@ -263,9 +264,14 @@
                 final String name = mailboxRow.getName();
                 if (name.startsWith(base)) {
                     final String match = name.substring(baseLength);
-                    if (mailboxExpression.isExpressionMatch(match,
-                            HIERARCHY_DELIMITER)) {
-                        results.add(new SimpleMailboxMetaData(name, "."));
+                    if (mailboxExpression.isExpressionMatch(match, HIERARCHY_DELIMITER)) {
+                        final MailboxMetaData.Children inferiors; 
+                        if (hasChildren(name)) {
+                            inferiors = MailboxMetaData.Children.HAS_CHILDREN;
+                        } else {
+                            inferiors = MailboxMetaData.Children.HAS_NO_CHILDREN;
+                        }
+                        results.add(new SimpleMailboxMetaData(name, ".", inferiors, Selectability.NONE));
                     }
                 }
             }
@@ -277,6 +283,19 @@
 
     }
 
+    /**
+     * Does the mailbox with the given name have inferior child mailboxes?
+     * @param name not null
+     * @return true when the mailbox has children, false otherwise
+     * @throws TorqueException
+     */
+    private boolean hasChildren(String name) throws TorqueException {
+        final Criteria criteria = new Criteria();
+        criteria.add(MailboxRowPeer.NAME, (Object)(name + HIERARCHY_DELIMITER + SQL_WILDCARD_CHAR), Criteria.LIKE);
+        final List mailboxes = MailboxRowPeer.doSelect(criteria);
+        return !mailboxes.isEmpty();
+    }
+
     public void setSubscription(String mailboxName, boolean value) {
         // TODO implement subscriptions
     }



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