Author: btellier
Date: Thu Jul  9 07:43:20 2015
New Revision: 1690003

URL: http://svn.apache.org/r1690003
Log:
JAMES-1584 Command to delete a specific mailbox

Modified:
    james/server/trunk/container/cli/pom.xml
    
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/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java
    
james/server/trunk/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
    james/server/trunk/pom.xml

Modified: james/server/trunk/container/cli/pom.xml
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/cli/pom.xml?rev=1690003&r1=1690002&r2=1690003&view=diff
==============================================================================
--- james/server/trunk/container/cli/pom.xml (original)
+++ james/server/trunk/container/cli/pom.xml Thu Jul  9 07:43:20 2015
@@ -41,11 +41,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
-            <artifactId>james-server-spring</artifactId>
+            <artifactId>james-server-mailbox-adapter</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
-            <artifactId>james-server-mailbox-adapter</artifactId>
+            <artifactId>james-server-spring</artifactId>
         </dependency>
         <dependency>
             <groupId>commons-cli</groupId>

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=1690003&r1=1690002&r2=1690003&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:43:20 2015
@@ -243,6 +243,13 @@ public class ServerCmd {
                     printUsage();
                     System.exit(1);
                 }
+            } else if (CmdType.DELETEMAILBOX.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.deleteMailbox(arguments[1], arguments[2], 
arguments[3]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
             } else {
                 System.err.println("Unrecognized command: " + cmdName + ".");
                 printUsage();
@@ -309,7 +316,8 @@ public class ServerCmd {
                 "copymailbox <srcbean> <dstbean>%n" + //
                 "deleteusermailboxes <user>%n" + //
                 "createmailbox <namespace> <user> <name>%n" + //
-                "listusermailboxes <user>%n"
+                "listusermailboxes <user>%n" + //
+                "deletemailbox <namespace> <user> <name>%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=1690003&r1=1690002&r2=1690003&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:43:20 2015
@@ -184,7 +184,7 @@ public interface ServerProbe extends Clo
     void copyMailbox(String srcBean, String dstBean) throws Exception;
 
     /**
-     * Return the name of all mailboxes belonging to #private:${user}
+     * Delete mailboxes Belonging to #private:${user}
      *
      * @param user Username of the user we want to list mailboxes on
      * @return Collection of the mailboxes names
@@ -208,4 +208,13 @@ public interface ServerProbe extends Clo
      * @return List of mailboxes belonging to the private namespace of a user
      */
     Collection<String> listUserMailboxes(String user);
+
+    /**
+     * Delete the given mailbox
+     *
+     * @param namespace Namespace of the mailbox to delete
+     * @param user User the mailbox to delete belongs to
+     * @param name Name of the mailbox to delete
+     */
+    void deleteMailbox(String namespace, String user, String name);
 }

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=1690003&r1=1690002&r2=1690003&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:43:20 2015
@@ -208,4 +208,9 @@ public class JmxServerProbe implements S
     public Collection<String> listUserMailboxes(String user) {
         return mailboxManagerManagement.listMailboxes(user);
     }
+
+    @Override
+    public void deleteMailbox(String namespace, String user, String name) {
+        mailboxManagerManagement.deleteMailbox(namespace, user, name);
+    }
 }

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=1690003&r1=1690002&r2=1690003&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:43:20 2015
@@ -39,7 +39,8 @@ public enum CmdType {
        COPYMAILBOX("copymailbox", 3), //
        DELETEUSERMAILBOXES("deleteusermailboxes", 2), //
        CREATEMAILBOX("createmailbox", 4), //
-       LISTUSERMAILBOXES("listusermailboxes",2) //
+       LISTUSERMAILBOXES("listusermailboxes",2), //
+       DELETEMAILBOX("deletemailbox", 4) //
        ;
        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=1690003&r1=1690002&r2=1690003&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:43:20 2015
@@ -29,6 +29,7 @@ import javax.management.NotCompliantMBea
 import javax.management.StandardMBean;
 
 import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
 import org.apache.james.lifecycle.api.LogEnabled;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -62,7 +63,7 @@ public class MailboxManagerManagement ex
      */
     @Override
     public boolean deleteMailboxes(String username) {
-        Preconditions.checkArgument(username != null, "Username should not be 
null");
+        Preconditions.checkArgument(Strings.isNullOrEmpty(username), "Username 
should not be null");
         MailboxSession session = null;
         try {
             session = mailboxManager.createSystemSession(username, log);
@@ -95,7 +96,7 @@ public class MailboxManagerManagement ex
      */
     @Override
     public List<String> listMailboxes(String username) {
-        Preconditions.checkArgument(username != null, "Username should not be 
null");
+        Preconditions.checkArgument(Strings.isNullOrEmpty(username), "Username 
should not be null");
         List<String> boxes = new ArrayList<String>();
         MailboxSession session = null;
         try {
@@ -116,7 +117,7 @@ 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");
+        checkMailboxArguments(namespace, user, name);
         MailboxSession session = null;
         try {
             session = mailboxManager.createSystemSession(user, log);
@@ -129,6 +130,27 @@ public class MailboxManagerManagement ex
         }
     }
 
+    @Override
+    public void deleteMailbox(String namespace, String user, String name) {
+        checkMailboxArguments(namespace, user, name);
+        MailboxSession session = null;
+        try {
+            session = mailboxManager.createSystemSession(user, log);
+            mailboxManager.startProcessingRequest(session);
+            mailboxManager.deleteMailbox(new MailboxPath(namespace, user, 
name), session);
+        } catch (Exception e) {
+            log.error("Unable to create mailbox", e);
+        } finally {
+            closeSession(session);
+        }
+    }
+
+    private void checkMailboxArguments(String namespace, String user, String 
name) {
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(namespace), 
"Provided mailbox path components should not be null or empty");
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(user), "Provided 
mailbox path components should not be null or empty");
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "Provided 
mailbox name components should not be null or empty");
+    }
+
     private void closeSession(MailboxSession session) {
         if (session != null) {
             mailboxManager.endProcessingRequest(session);

Modified: 
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java?rev=1690003&r1=1690002&r2=1690003&view=diff
==============================================================================
--- 
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java
 (original)
+++ 
james/server/trunk/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java
 Thu Jul  9 07:43:20 2015
@@ -49,4 +49,13 @@ public interface MailboxManagerManagemen
      * @param name Name of the created mailbox
      */
     void createMailbox(String namespace,String user, String name);
+
+    /**
+     * Delete the given mailbox
+     *
+     * @param namespace Namespace of the mailbox to delete
+     * @param user User the mailbox to delete belongs to
+     * @param name Name of the mailbox to delete
+     */
+    void deleteMailbox(String namespace, String user, String name);
 }
\ No newline at end of file

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=1690003&r1=1690002&r2=1690003&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:43:20 2015
@@ -113,6 +113,11 @@ public class MailboxManagementTest {
         mailboxManagerManagement.deleteMailboxes(null);
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxesShouldThrowOnEmptyUserName() throws Exception {
+        mailboxManagerManagement.deleteMailboxes("");
+    }
+
     @Test
     public void deleteMailboxesShouldDeleteMultipleMailboxes() throws 
Exception {
         inMemoryMapperFactory.createMailboxMapper(session).save(new 
SimpleMailbox<InMemoryId>(new MailboxPath(MailboxConstants.USER_NAMESPACE, 
USER, "name"), UID_VALIDITY));
@@ -140,17 +145,32 @@ public class MailboxManagementTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void createMailboxShouldThrowOnNullNamespace() {
-        mailboxManagerManagement.createMailbox(null, "", "");
+        mailboxManagerManagement.createMailbox(null, "a", "a");
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void createMailboxShouldThrowOnNullUser() {
-        mailboxManagerManagement.createMailbox("", null, "");
+        mailboxManagerManagement.createMailbox("a", null, "a");
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void createMailboxShouldThrowOnNullName() {
-        mailboxManagerManagement.createMailbox("", "", null);
+        mailboxManagerManagement.createMailbox("a", "a", null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void createMailboxShouldThrowOnEmptyNamespace() {
+        mailboxManagerManagement.createMailbox("", "a", "a");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void createMailboxShouldThrowOnEmptyUser() {
+        mailboxManagerManagement.createMailbox("a", "", "a");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void createMailboxShouldThrowOnEmptyName() {
+        mailboxManagerManagement.createMailbox("a", "a", "");
     }
 
     @Test
@@ -175,4 +195,70 @@ public class MailboxManagementTest {
         mailboxManagerManagement.listMailboxes(null);
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void listMailboxesShouldThrowOnEmptyUserName() {
+        mailboxManagerManagement.listMailboxes("");
+    }
+
+    @Test
+    public void deleteMailboxShouldDeleteGivenMailbox() throws Exception {
+        inMemoryMapperFactory.createMailboxMapper(session).save(new 
SimpleMailbox<InMemoryId>(new MailboxPath(MailboxConstants.USER_NAMESPACE, 
USER, "name"), UID_VALIDITY));
+        
mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, 
"name");
+        
assertThat(inMemoryMapperFactory.createMailboxMapper(session).list()).isEmpty();
+    }
+
+    @Test
+    public void deleteMailboxShouldNotDeleteGivenMailboxIfWrongNamespace() 
throws Exception {
+        Mailbox<InMemoryId> mailbox = new SimpleMailbox<InMemoryId>(new 
MailboxPath("#top", USER, "name"), UID_VALIDITY);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox);
+        
mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, 
"name");
+        
assertThat(inMemoryMapperFactory.createMailboxMapper(session).list()).containsOnly(mailbox);
+    }
+
+    @Test
+    public void deleteMailboxShouldNotDeleteGivenMailboxIfWrongUser() throws 
Exception {
+        Mailbox<InMemoryId> mailbox = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, "userbis", "name"), UID_VALIDITY);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox);
+        
mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, 
"name");
+        
assertThat(inMemoryMapperFactory.createMailboxMapper(session).list()).containsOnly(mailbox);
+    }
+
+    @Test
+    public void deleteMailboxShouldNotDeleteGivenMailboxIfWrongName() throws 
Exception {
+        Mailbox<InMemoryId> mailbox = new SimpleMailbox<InMemoryId>(new 
MailboxPath(MailboxConstants.USER_NAMESPACE, USER, "wrong_name"), UID_VALIDITY);
+        inMemoryMapperFactory.createMailboxMapper(session).save(mailbox);
+        
mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, 
"name");
+        
assertThat(inMemoryMapperFactory.createMailboxMapper(session).list()).containsOnly(mailbox);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxShouldThrowOnNullNamespace() {
+        mailboxManagerManagement.deleteMailbox(null, "a", "a");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxShouldThrowOnNullUser() {
+        mailboxManagerManagement.deleteMailbox("a", null, "a");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxShouldThrowOnNullName() {
+        mailboxManagerManagement.deleteMailbox("a", "a", null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxShouldThrowOnEmptyNamespace() {
+        mailboxManagerManagement.deleteMailbox("", "a", "a");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxShouldThrowOnEmptyUser() {
+        mailboxManagerManagement.deleteMailbox("a", "", "a");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void deleteMailboxShouldThrowOnEmptyName() {
+        mailboxManagerManagement.deleteMailbox("a", "a", "");
+    }
+
 }

Modified: james/server/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/james/server/trunk/pom.xml?rev=1690003&r1=1690002&r2=1690003&view=diff
==============================================================================
--- james/server/trunk/pom.xml (original)
+++ james/server/trunk/pom.xml Thu Jul  9 07:43:20 2015
@@ -844,6 +844,7 @@
                 <groupId>org.assertj</groupId>
                 <artifactId>assertj-core</artifactId>
                 <version>3.0.0</version>
+                <scope>test</scope>
             </dependency>
 
             <dependency>



---------------------------------------------------------------------
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