Author: eric
Date: Sun Dec 26 11:06:13 2010
New Revision: 1052867

URL: http://svn.apache.org/viewvc?rev=1052867&view=rev
Log:
Maildir list() Implementatoin and tests for /%domain/%user, %user and %fulluser 
configuration.

Modified:
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
    
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java?rev=1052867&r1=1052866&r2=1052867&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
 Sun Dec 26 11:06:13 2010
@@ -191,52 +191,25 @@ public class MaildirMailboxMapper extend
      */
     public List<Mailbox<Integer>> list() throws MailboxException {
         
-       // TODO The current implementation only support Maildir Location ending 
with /%domain/%user
-       if (! maildirStore.getMaildirLocation().endsWith("/" + 
MaildirStore.PATH_DOMAIN + "/" + MaildirStore.PATH_USER)) {
-           throw new UnsupportedOperationException("The MaildirLocation must 
end with /%domain/%user pattern.");
-       }
+        File maildirRoot = maildirStore.getMaildirRoot();
+        List<Mailbox<Integer>> mailboxList = new ArrayList<Mailbox<Integer>>();
         
-       File dir = maildirStore.getMaildirRoot();
-       List<Mailbox<Integer>> mailboxList = new ArrayList<Mailbox<Integer>>();
-       
-       File[] domains = dir.listFiles();
-       
-       for (File domain: domains) {
-           
-           File[] users = domain.listFiles();
-           
-           for (File user: users) {
-               
-               // Special case for INBOX: Let's use the user's folder.
-
-               MailboxPath inboxMailboxPath = new MailboxPath("#private", 
-                       user.getName() + "@" + domain.getName(), 
-                       "INBOX");
-               mailboxList.add(maildirStore.loadMailbox(user, 
inboxMailboxPath));
-               
-               // List all INBOX sub folders.
-               
-               File[] mailboxes = user.listFiles(new FileFilter() {
-                   public boolean accept(File pathname) {
-                       return pathname.getName().startsWith(".");
-                   }
-               });
-               
-               for (File mailbox: mailboxes) {
-                   
-                   MailboxPath mailboxPath = new MailboxPath("#private", 
-                           user.getName() + "@" + domain.getName(), 
-                           mailbox.getName().substring(1));
-                   mailboxList.add(maildirStore.loadMailbox(mailbox, 
mailboxPath));
-
-               }
-
+       if (maildirStore.getMaildirLocation().endsWith("/" + 
MaildirStore.PATH_DOMAIN + "/" + MaildirStore.PATH_USER)) {
+           File[] domains = maildirRoot.listFiles();
+           for (File domain: domains) {
+               File[] users = domain.listFiles();
+               visitUsersForMailboxList(domain, users, mailboxList);
            }
-           
+           return mailboxList;
        }
-           
-       return mailboxList;
 
+       if ((maildirStore.getMaildirLocation().endsWith("/" + 
MaildirStore.PATH_USER)) && (maildirStore.getMaildirLocation().endsWith("/" + 
MaildirStore.PATH_FULLUSER))) {
+           File[] users = maildirRoot.listFiles();
+           visitUsersForMailboxList(null, users, mailboxList);
+       }
+       
+       throw new UnsupportedOperationException("The MaildirLocation must end 
with /%domain/%user, /%user or /%fulluser.");
+        
     }
 
     /*
@@ -275,5 +248,46 @@ public class MaildirMailboxMapper extend
             throw new MailboxNotFoundException(String.valueOf(mailboxId));
         }
     }
+    
+    private void visitUsersForMailboxList(File domain, File[] users, 
List<Mailbox<Integer>> mailboxList) throws MailboxException {
+        
+        String userName = null;
+        
+        for (File user: users) {
+            
+            // Special case for INBOX: Let's use the user's folder.
+
+            MailboxPath inboxMailboxPath = new MailboxPath("#private", 
+                    user.getName() + "@" + domain.getName(), 
+                    "INBOX");
+            mailboxList.add(maildirStore.loadMailbox(user, inboxMailboxPath));
+            
+            // List all INBOX sub folders.
+            
+            File[] mailboxes = user.listFiles(new FileFilter() {
+                public boolean accept(File pathname) {
+                    return pathname.getName().startsWith(".");
+                }
+            });
+            
+            for (File mailbox: mailboxes) {
+                
+                if (domain == null) {
+                    userName = user.getName();
+                }
+                else {
+                    userName = user.getName() + "@" + domain.getName();
+                }
+                
+                MailboxPath mailboxPath = new MailboxPath("#private", 
+                        userName, 
+                        mailbox.getName().substring(1));
+                mailboxList.add(maildirStore.loadMailbox(mailbox, 
mailboxPath));
+
+            }
+
+        }
+        
+    }
 
 }

Modified: 
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java?rev=1052867&r1=1052866&r2=1052867&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/functional/maildir/MaildirMailboxManagerTest.java
 Sun Dec 26 11:06:13 2010
@@ -22,8 +22,9 @@ import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 
+import junit.framework.Assert;
+
 import org.apache.commons.io.FileUtils;
-import org.apache.james.mailbox.BadCredentialsException;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManagerTest;
@@ -49,9 +50,6 @@ public class MaildirMailboxManagerTest e
     @Before
     public void setup() throws Exception {
         FileUtils.deleteDirectory(new File(MAILDIR_HOME));
-        MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%domain/%user");
-        MaildirMailboxSessionMapperFactory mf = new 
MaildirMailboxSessionMapperFactory(store);
-        setMailboxManager(new MaildirMailboxManager(mf, null, store));
     }
     
     /**
@@ -69,10 +67,31 @@ public class MaildirMailboxManagerTest e
      */
     @Test
     public void testList() throws MailboxException, 
UnsupportedEncodingException {
+        
         if (OsDetector.isWindows()) {
             System.out.println("Maildir tests work only on non-windows 
systems. So skip the test");
         } else {
-            super.testList();
+
+            doTestListWithMaildirStoreConfiguration("/%domain/%user");
+            
+            // TODO Tests fail with /%user and /%fulluser configuration
+//            doTestListWithMaildirStoreConfiguration("/%user");
+//            doTestListWithMaildirStoreConfiguration("/%fulluser");
+
+        }
+            
+    }
+    
+    private void doTestListWithMaildirStoreConfiguration(String 
maildirStoreConfiguration) throws MailboxException, 
UnsupportedEncodingException {
+        MaildirStore store = new MaildirStore(MAILDIR_HOME + 
maildirStoreConfiguration);
+        MaildirMailboxSessionMapperFactory mf = new 
MaildirMailboxSessionMapperFactory(store);
+        setMailboxManager(new MaildirMailboxManager(mf, null, store));
+        super.testList();
+        try {
+            tearDown();
+        } catch (IOException e) {
+            Assert.fail();
+            e.printStackTrace();
         }
     }
     



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

Reply via email to