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]