Author: eric
Date: Fri Dec 24 10:58:27 2010
New Revision: 1052482

URL: http://svn.apache.org/viewvc?rev=1052482&view=rev
Log:
Add implementation for maildir list() method.

Modified:
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java?rev=1052482&r1=1052481&r2=1052482&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
 Fri Dec 24 10:58:27 2010
@@ -41,6 +41,8 @@ public class MaildirStore implements Uid
     
     private String maildirLocation;
     
+    private File maildirRootFile;
+    
     /**
      * Construct a MaildirStore with a location. The location String
      * currently may contain the
@@ -148,6 +150,22 @@ public class MaildirStore implements Uid
     }
     
     /**
+     * Return a File which is the root of all Maidirs.
+     * The returned maidirRootFile is lazilly constructured.
+     * 
+     * @return maidirRootFile
+     */
+    public File getMaildirRoot() {
+        if (maildirRootFile == null) {
+            String maildirRootLocation = 
maildirLocation.replaceAll(PATH_FULLUSER, "");
+            maildirRootLocation = maildirRootLocation.replaceAll(PATH_DOMAIN, 
"");
+            maildirRootLocation = maildirRootLocation.replaceAll(PATH_USER, 
"");
+            maildirRootFile = new File(maildirRootLocation);
+        }        
+        return maildirRootFile;
+    }
+
+    /**
      * Transforms a folder name into a mailbox name
      * @param folderName The name of the mailbox folder
      * @return The complete (namespace) name of a mailbox

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=1052482&r1=1052481&r2=1052482&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
 Fri Dec 24 10:58:27 2010
@@ -19,6 +19,7 @@
 package org.apache.james.mailbox.maildir.mail;
 
 import java.io.File;
+import java.io.FileFilter;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -185,6 +186,59 @@ public class MaildirMailboxMapper extend
         
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.james.mailbox.store.mail.MailboxMapper#list()
+     */
+    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 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));
+
+               }
+
+           }
+           
+       }
+           
+       return mailboxList;
+
+    }
+
     /*
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.transaction.TransactionalMapper#endRequest()
@@ -222,9 +276,4 @@ public class MaildirMailboxMapper extend
         }
     }
 
-    public List<Mailbox<Integer>> list() throws MailboxException {
-        // TODO FIX ME!!!
-        throw new UnsupportedOperationException("Implement me!");
-    }
-
 }



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

Reply via email to