Author: btellier
Date: Thu Jul  9 07:42:48 2015
New Revision: 1690002

URL: http://svn.apache.org/r1690002
Log:
JAMES-1584 Command to list all mailboxes of a user

Modified:
    
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
    
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
    
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
    
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
    
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java
    
james/server/trunk/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java

Modified: 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java?rev=1690002&r1=1690001&r2=1690002&view=diff
==============================================================================
--- 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
 (original)
+++ 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
 Thu Jul  9 07:42:48 2015
@@ -235,6 +235,14 @@ public class ServerCmd {
                     printUsage();
                     System.exit(1);
                 }
+            } else if (CmdType.LISTUSERMAILBOXES.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    Collection<String> mailboxes = 
probe.listUserMailboxes(arguments[1]);
+                    sCmd.print(mailboxes.toArray(new 
String[mailboxes.size()]), System.out);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
             } else {
                 System.err.println("Unrecognized command: " + cmdName + ".");
                 printUsage();
@@ -300,7 +308,8 @@ public class ServerCmd {
                 "listmappings%n" + //
                 "copymailbox <srcbean> <dstbean>%n" + //
                 "deleteusermailboxes <user>%n" + //
-                "createmailbox <namespace> <user> <name>%n"
+                "createmailbox <namespace> <user> <name>%n" + //
+                "listusermailboxes <user>%n"
         );
         String usage = String.format("java %s --host <arg> <command>%n", 
ServerCmd.class.getName());
         hf.printHelp(usage, "", options, header);

Modified: 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java?rev=1690002&r1=1690001&r2=1690002&view=diff
==============================================================================
--- 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
 (original)
+++ 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
 Thu Jul  9 07:42:48 2015
@@ -200,4 +200,12 @@ public interface ServerProbe extends Clo
      * @param name Name of the created mailbox
      */
     void createMailbox(String namespace, String user, String name);
+
+    /**
+     * List mailboxes belonging to the private namespace of a user
+     *
+     * @param user The given user
+     * @return List of mailboxes belonging to the private namespace of a user
+     */
+    Collection<String> listUserMailboxes(String user);
 }

Modified: 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java?rev=1690002&r1=1690001&r2=1690002&view=diff
==============================================================================
--- 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
 (original)
+++ 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
 Thu Jul  9 07:42:48 2015
@@ -203,4 +203,9 @@ public class JmxServerProbe implements S
     public void createMailbox(String namespace, String user, String name) {
         mailboxManagerManagement.createMailbox(namespace, user, name);
     }
+
+    @Override
+    public Collection<String> listUserMailboxes(String user) {
+        return mailboxManagerManagement.listMailboxes(user);
+    }
 }

Modified: 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java?rev=1690002&r1=1690001&r2=1690002&view=diff
==============================================================================
--- 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
 (original)
+++ 
james/server/trunk/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
 Thu Jul  9 07:42:48 2015
@@ -38,7 +38,8 @@ public enum CmdType {
        SETPASSWORD("setpassword", 3), //
        COPYMAILBOX("copymailbox", 3), //
        DELETEUSERMAILBOXES("deleteusermailboxes", 2), //
-       CREATEMAILBOX("createmailbox", 4)
+       CREATEMAILBOX("createmailbox", 4), //
+       LISTUSERMAILBOXES("listusermailboxes",2) //
        ;
        private final String command;
        private final int arguments;

Modified: 
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java?rev=1690002&r1=1690001&r2=1690002&view=diff
==============================================================================
--- 
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java
 (original)
+++ 
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java
 Thu Jul  9 07:42:48 2015
@@ -75,14 +75,7 @@ public class MailboxManagerManagement ex
         } catch (MailboxException e) {
             log.error("Error while remove mailboxes for user " + username, e);
         } finally {
-            if (session != null) {
-                mailboxManager.endProcessingRequest(session);
-                try {
-                    mailboxManager.logout(session, true);
-                } catch (MailboxException e) {
-                    // ignore here
-                }
-            }
+            closeSession(session);
         }
         return false;
     }
@@ -90,6 +83,7 @@ public class MailboxManagerManagement ex
     /**
      * @see org.apache.james.lifecycle.api.LogEnabled#setLog(org.slf4j.Logger)
      */
+    @Override
     public void setLog(Logger log) {
         this.log = log;
     }
@@ -101,6 +95,7 @@ public class MailboxManagerManagement ex
      */
     @Override
     public List<String> listMailboxes(String username) {
+        Preconditions.checkArgument(username != null, "Username should not be 
null");
         List<String> boxes = new ArrayList<String>();
         MailboxSession session = null;
         try {
@@ -114,14 +109,7 @@ public class MailboxManagerManagement ex
         } catch (MailboxException e) {
             log.error("Error list mailboxes for user " + username, e);
         } finally {
-            if (session != null) {
-                mailboxManager.endProcessingRequest(session);
-                try {
-                    mailboxManager.logout(session, true);
-                } catch (MailboxException e) {
-                    // ignore here
-                }
-            }
+            closeSession(session);
         }
         return boxes;
     }
@@ -129,11 +117,26 @@ public class MailboxManagerManagement ex
     @Override
     public void createMailbox(String namespace, String user, String name) {
         Preconditions.checkArgument(namespace != null && user != null && name 
!= null, "Provided mailbox path components should not be null");
+        MailboxSession session = null;
         try {
-            MailboxSession session = mailboxManager.createSystemSession(user, 
log);
+            session = mailboxManager.createSystemSession(user, log);
+            mailboxManager.startProcessingRequest(session);
             mailboxManager.createMailbox(new MailboxPath(namespace, user, 
name), session);
         } catch (Exception e) {
-            throw new RuntimeException("Unable to create mailbox", e);
+            log.error("Unable to create mailbox", e);
+        } finally {
+            closeSession(session);
+        }
+    }
+
+    private void closeSession(MailboxSession session) {
+        if (session != null) {
+            mailboxManager.endProcessingRequest(session);
+            try {
+                mailboxManager.logout(session, true);
+            } catch (MailboxException e) {
+                log.error("Can not log session out", e);
+            }
         }
     }
 

Modified: 
james/server/trunk/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java?rev=1690002&r1=1690001&r2=1690002&view=diff
==============================================================================
--- 
james/server/trunk/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
 (original)
+++ 
james/server/trunk/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
 Thu Jul  9 07:42:48 2015
@@ -153,4 +153,26 @@ public class MailboxManagementTest {
         mailboxManagerManagement.createMailbox("", "", null);
     }
 
+    @Test
+    public void listMailboxesShouldReturnUserMailboxes() throws Exception {
+        Mailbox<InMemoryId> mailbox1 = new SimpleMailbox<InMemoryId>(new 
MailboxPath("#top", USER, "name1"), UID_VALIDITY);
+        Mailbox<InMemoryId> mailbox2 = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, USER, "name2"), UID_VALIDITY);
+        Mailbox<InMemoryId> mailbox3 = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, "other_user", "name3"), 
UID_VALIDITY);
+        Mailbox<InMemoryId> mailbox4 = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, USER, "name4"), UID_VALIDITY);
+        Mailbox<InMemoryId> mailbox5 = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, USER, "INBOX"), UID_VALIDITY);
+        Mailbox<InMemoryId> mailbox6 = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, USER, "INBOX.toto"), UID_VALIDITY);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox1);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox2);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox3);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox4);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox5);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox6);
+        
assertThat(mailboxManagerManagement.listMailboxes(USER)).containsOnly("name2", 
"name4", "INBOX", "INBOX.toto");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void listMailboxesShouldThrowOnNullUserName() {
+        mailboxManagerManagement.listMailboxes(null);
+    }
+
 }



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

Reply via email to