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]