You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by er...@apache.org on 2012/10/19 13:35:14 UTC
svn commit: r1400047 - in /james/server/trunk/cli: ./
src/main/java/org/apache/james/cli/ src/main/java/org/apache/james/cli/probe/
src/main/java/org/apache/james/cli/probe/impl/
src/main/java/org/apache/james/cli/type/
Author: eric
Date: Fri Oct 19 11:35:13 2012
New Revision: 1400047
URL: http://svn.apache.org/viewvc?rev=1400047&view=rev
Log:
Copy mailbox from CLI (JAMES-1439)
Modified:
james/server/trunk/cli/pom.xml
james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java
james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java
Modified: james/server/trunk/cli/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/pom.xml?rev=1400047&r1=1400046&r2=1400047&view=diff
==============================================================================
--- james/server/trunk/cli/pom.xml (original)
+++ james/server/trunk/cli/pom.xml Fri Oct 19 11:35:13 2012
@@ -48,6 +48,10 @@
<artifactId>james-server-data-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-container-spring</artifactId>
+ </dependency>
+ <dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
</dependency>
Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java?rev=1400047&r1=1400046&r2=1400047&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java Fri Oct 19 11:35:13 2012
@@ -41,261 +41,268 @@ import org.apache.james.cli.type.CmdType
* Command line utility for managing various aspect of the James server.
*/
public class ServerCmd {
- private static final String HOST_OPT_LONG = "host";
- private static final String HOST_OPT_SHORT = "h";
- private static final String PORT_OPT_LONG = "port";
- private static final String PORT_OPT_SHORT = "p";
- private static final int defaultPort = 9999;
- private static Options options = null;
-
- static {
- options = new Options();
- Option optHost = new Option(HOST_OPT_SHORT, HOST_OPT_LONG, true, "node hostname or ip address");
- optHost.setRequired(true);
- options.addOption(optHost);
- options.addOption(PORT_OPT_SHORT, PORT_OPT_LONG, true, "remote jmx agent port number");
- }
-
- /**
- * Main method to initialize the class.
- *
- * @param args
- * Command-line arguments.
- * @throws IOException
- * @throws InterruptedException
- * @throws ParseException
- */
- public static void main(String[] args) throws IOException, InterruptedException, ParseException {
-
- long start = Calendar.getInstance().getTimeInMillis();
-
- CommandLineParser parser = new PosixParser();
- CommandLine cmd = null;
-
- try {
- cmd = parser.parse(options, args);
- } catch (ParseException parseExcep) {
- System.err.println(parseExcep);
- printUsage();
- System.exit(1);
- }
-
- // Verify arguments
- if (cmd.getArgs().length < 1) {
- System.err.println("Missing argument for command.");
- printUsage();
- System.exit(1);
- }
-
- String host = cmd.getOptionValue(HOST_OPT_LONG);
- int port = defaultPort;
-
- String portNum = cmd.getOptionValue(PORT_OPT_LONG);
- if (portNum != null) {
- try {
- port = Integer.parseInt(portNum);
- } catch (NumberFormatException e) {
- throw new ParseException("Port must be a number");
- }
- }
-
- ServerProbe probe = null;
- try {
- probe = new JmxServerProbe(host, port);
- } catch (IOException ioe) {
- System.err.println("Error connecting to remote JMX agent!");
- ioe.printStackTrace();
- System.exit(3);
- }
-
- ServerCmd sCmd = new ServerCmd();
-
- // Execute the requested command.
- String[] arguments = cmd.getArgs();
- String cmdName = arguments[0];
- CmdType cmdType = null;
- try {
-
- cmdType = CmdType.lookup(cmdName);
-
- if (CmdType.ADDUSER.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.addUser(arguments[1], arguments[2]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.REMOVEUSER.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.removeUser(arguments[1]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.LISTUSERS.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- sCmd.print(probe.listUsers(), System.out);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.ADDDOMAIN.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.addDomain(arguments[1]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.REMOVEDOMAIN.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.removeDomain(arguments[1]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.CONTAINSDOMAIN.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.containsDomain(arguments[1]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.LISTDOMAINS.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- sCmd.print(probe.listDomains(), System.out);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.LISTMAPPINGS.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- sCmd.print(probe.listMappings(), System.out);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.LISTUSERDOMAINMAPPINGS.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- sCmd.print(probe.listUserDomainMappings(arguments[1], arguments[2]).toArray(new String[0]), System.out);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.ADDADDRESSMAPPING.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.addAddressMapping(arguments[1], arguments[2], arguments[3]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.REMOVEADDRESSMAPPING.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.removeAddressMapping(arguments[1], arguments[2], arguments[3]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.ADDREGEXMAPPING.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.addRegexMapping(arguments[1], arguments[2], arguments[3]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.REMOVEREGEXMAPPING.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.removeRegexMapping(arguments[1], arguments[2], arguments[3]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else if (CmdType.SETPASSWORD.equals(cmdType)) {
- if (cmdType.hasCorrectArguments(arguments.length)) {
- probe.setPassword(arguments[1], arguments[2]);
- } else {
- printUsage();
- System.exit(1);
- }
- } else {
- System.err.println("Unrecognized command: " + cmdName + ".");
- printUsage();
- System.exit(1);
- }
- } catch (Exception e) {
- sCmd.onException(e, System.err);
- System.exit(1);
- }
-
- sCmd.print(new String[]{cmdType.getCommand() + " command executed sucessfully in "
- + (Calendar.getInstance().getTimeInMillis() - start) + " ms."}, System.out);
- System.exit(0);
- }
-
- /**
- * Print data to an output stream.
- *
- * @param data
- * The data to print, each element representing a line.
- * @param out
- * The output stream to which printing should occur.
- */
- public void print(String[] data, PrintStream out) {
- if (data == null)
- return;
-
- for (int i = 0; i < data.length; i++) {
- String u = data[i];
- out.println(u);
- }
-
- out.println();
- }
-
- public void print(Map<String,Collection<String>> map, PrintStream out) {
- if (map == null)
- return;
-
- Iterator<Entry<String, Collection<String>>> entries = map.entrySet().iterator();
- while(entries.hasNext()) {
- Entry<String, Collection<String>> entry = entries.next();
- out.print(entry.getKey());
- out.print("=");
- out.println(entry.getValue().toString());
- }
- out.println();
- }
-
-
- /*
- * Prints usage information to stdout.
- */
- private static void printUsage() {
- HelpFormatter hf = new HelpFormatter();
- String header = String.format("%nAvailable commands:%n"
- + "adduser <username> <password>%n"
- + "setpassword <username> <password>%n"
- + "removeuser <username>%n"
- + "listusers%n"
- + "adddomain <domainname>%n"
- + "containsdomain <domainname>%n"
- + "removedomain <domainname>%n"
- + "listdomains%n"
- + "addAddressMapping <user> <domain> <fromaddress>%n"
- + "removeAddressMapping <user> <domain> <fromaddress>%n"
- + "addRegexMapping <user> <domain> <regex>%n"
- + "removeRegexMapping <user> <domain> <regex>%n"
- + "listuserdomainmappings <user> <domain>%n"
- + "listmappings%n"
- );
- String usage = String.format("java %s --host <arg> <command>%n", ServerCmd.class.getName());
- hf.printHelp(usage, "", options, header);
- }
-
- /*
- * Handle an exception.
- */
- private void onException(Exception e, PrintStream out) {
- out.println("Error while execute command:");
- out.println(e.getMessage());
- }
+ private static final String HOST_OPT_LONG = "host";
+ private static final String HOST_OPT_SHORT = "h";
+ private static final String PORT_OPT_LONG = "port";
+ private static final String PORT_OPT_SHORT = "p";
+ private static final int defaultPort = 9999;
+ private static Options options = null;
+
+ static {
+ options = new Options();
+ Option optHost = new Option(HOST_OPT_SHORT, HOST_OPT_LONG, true, "node hostname or ip address");
+ optHost.setRequired(true);
+ options.addOption(optHost);
+ options.addOption(PORT_OPT_SHORT, PORT_OPT_LONG, true, "remote jmx agent port number");
+ }
+
+ /**
+ * Main method to initialize the class.
+ *
+ * @param args
+ * Command-line arguments.
+ * @throws IOException
+ * @throws InterruptedException
+ * @throws ParseException
+ */
+ public static void main(String[] args) throws IOException, InterruptedException, ParseException {
+
+ long start = Calendar.getInstance().getTimeInMillis();
+
+ CommandLineParser parser = new PosixParser();
+ CommandLine cmd = null;
+
+ try {
+ cmd = parser.parse(options, args);
+ } catch (ParseException parseExcep) {
+ System.err.println(parseExcep);
+ printUsage();
+ System.exit(1);
+ }
+
+ // Verify arguments
+ if (cmd.getArgs().length < 1) {
+ System.err.println("Missing argument for command.");
+ printUsage();
+ System.exit(1);
+ }
+
+ String host = cmd.getOptionValue(HOST_OPT_LONG);
+ int port = defaultPort;
+
+ String portNum = cmd.getOptionValue(PORT_OPT_LONG);
+ if (portNum != null) {
+ try {
+ port = Integer.parseInt(portNum);
+ } catch (NumberFormatException e) {
+ throw new ParseException("Port must be a number");
+ }
+ }
+
+ ServerProbe probe = null;
+ try {
+ probe = new JmxServerProbe(host, port);
+ } catch (IOException ioe) {
+ System.err.println("Error connecting to remote JMX agent!");
+ ioe.printStackTrace();
+ System.exit(3);
+ }
+
+ ServerCmd sCmd = new ServerCmd();
+
+ // Execute the requested command.
+ String[] arguments = cmd.getArgs();
+ String cmdName = arguments[0];
+ CmdType cmdType = null;
+ try {
+
+ cmdType = CmdType.lookup(cmdName);
+
+ if (CmdType.ADDUSER.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.addUser(arguments[1], arguments[2]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.REMOVEUSER.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.removeUser(arguments[1]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.LISTUSERS.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ sCmd.print(probe.listUsers(), System.out);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.ADDDOMAIN.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.addDomain(arguments[1]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.REMOVEDOMAIN.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.removeDomain(arguments[1]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.CONTAINSDOMAIN.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.containsDomain(arguments[1]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.LISTDOMAINS.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ sCmd.print(probe.listDomains(), System.out);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.LISTMAPPINGS.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ sCmd.print(probe.listMappings(), System.out);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.LISTUSERDOMAINMAPPINGS.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ sCmd.print(probe.listUserDomainMappings(arguments[1], arguments[2]).toArray(new String[0]),
+ System.out);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.ADDADDRESSMAPPING.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.addAddressMapping(arguments[1], arguments[2], arguments[3]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.REMOVEADDRESSMAPPING.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.removeAddressMapping(arguments[1], arguments[2], arguments[3]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.ADDREGEXMAPPING.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.addRegexMapping(arguments[1], arguments[2], arguments[3]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.REMOVEREGEXMAPPING.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.removeRegexMapping(arguments[1], arguments[2], arguments[3]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.SETPASSWORD.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.setPassword(arguments[1], arguments[2]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else if (CmdType.COPYMAILBOX.equals(cmdType)) {
+ if (cmdType.hasCorrectArguments(arguments.length)) {
+ probe.copyMailbox(arguments[1], arguments[2]);
+ } else {
+ printUsage();
+ System.exit(1);
+ }
+ } else {
+ System.err.println("Unrecognized command: " + cmdName + ".");
+ printUsage();
+ System.exit(1);
+ }
+ } catch (Exception e) {
+ sCmd.onException(e, System.err);
+ System.exit(1);
+ }
+
+ sCmd.print(new String[] { cmdType.getCommand() + " command executed sucessfully in "
+ + (Calendar.getInstance().getTimeInMillis() - start) + " ms." }, System.out);
+ System.exit(0);
+ }
+
+ /**
+ * Print data to an output stream.
+ *
+ * @param data
+ * The data to print, each element representing a line.
+ * @param out
+ * The output stream to which printing should occur.
+ */
+ public void print(String[] data, PrintStream out) {
+ if (data == null)
+ return;
+
+ for (int i = 0; i < data.length; i++) {
+ String u = data[i];
+ out.println(u);
+ }
+
+ out.println();
+ }
+
+ public void print(Map<String, Collection<String>> map, PrintStream out) {
+ if (map == null)
+ return;
+
+ Iterator<Entry<String, Collection<String>>> entries = map.entrySet().iterator();
+ while (entries.hasNext()) {
+ Entry<String, Collection<String>> entry = entries.next();
+ out.print(entry.getKey());
+ out.print("=");
+ out.println(entry.getValue().toString());
+ }
+ out.println();
+ }
+
+ /**
+ * Prints usage information to stdout.
+ */
+ private static void printUsage() {
+ HelpFormatter hf = new HelpFormatter();
+ String header = String.format("%nAvailable commands:%n" + //
+ "adduser <username> <password>%n" + //
+ "setpassword <username> <password>%n" + //
+ "removeuser <username>%n" + "listusers%n" + //
+ "adddomain <domainname>%n" + //
+ "containsdomain <domainname>%n" + //
+ "removedomain <domainname>%n" + //
+ "listdomains%n" + //
+ "addaddressmapping <user> <domain> <fromaddress>%n" + //
+ "removeaddressmapping <user> <domain> <fromaddress>%n" + //
+ "addregexmapping <user> <domain> <regex>%n" + //
+ "removeregexmapping <user> <domain> <regex>%n" + //
+ "listuserdomainmappings <user> <domain>%n" + //
+ "listmappings%n" + //
+ "copymailbox <srcbean> <dstbean>%n" //
+ );
+ String usage = String.format("java %s --host <arg> <command>%n", ServerCmd.class.getName());
+ hf.printHelp(usage, "", options, header);
+ }
+
+ /**
+ * Handle an exception.
+ */
+ private void onException(Exception e, PrintStream out) {
+ out.println("Error while execute command:");
+ out.println(e.getMessage());
+ }
}
Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java?rev=1400047&r1=1400046&r2=1400047&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java Fri Oct 19 11:35:13 2012
@@ -22,152 +22,164 @@ import java.util.Collection;
import java.util.Map;
public interface ServerProbe {
- /**
- * Add a user to this mail server.
- *
- * @param userName
- * The name of the user being added.
- * @param password
- * The password of the user being added.
- * @throws Exception
- */
- public void addUser(String userName, String password) throws Exception;
-
- /**
- * Delete a user from this mail server.
- *
- * @param username
- * The name of the user being deleted.
- * @throws Exception
- */
- public void removeUser(String username) throws Exception;
-
- /**
- * Get a List the names of all users.
- *
- * @return a List of all user names.
- * @throws Exception
- */
- public String[] listUsers() throws Exception;
-
- /**
- * Set a user's password.
- *
- * @param userName
- * The name of the user whose password will be changed.
- * @param password
- * The new password.
- * @throws Exception
- */
- public void setPassword(String userName, String password) throws Exception;
-
- /**
- * Add domain to the service.
- *
- * @param domain
- * The domain to add.
- * @throws Exception
- */
- public void addDomain(String domain) throws Exception;
-
- /**
- * Return true if the domain exists in the service
- *
- * @param domain
- * The domain to remove.
- * @throws Exception
- */
- public boolean containsDomain(String domain) throws Exception;
-
- /**
- * Remove domain from the service
- *
- * @param domain
- * The domain to remove.
- * @throws Exception
- */
- public void removeDomain(String domain) throws Exception;
-
- /**
- * Get a list of domains for the service.
- *
- * @return domains an array of domains, or null if no domains exist.
- * @throws Exception
- */
- public String[] listDomains() throws Exception;
-
- /**
- * Get a Map which holds all mappings. The key is the user@domain and the
- * value is a Collection which holds all mappings.
- *
- * @return a Map which holds all mappings.
- * @throws Exception
- */
- public Map<String, Collection<String>> listMappings() throws Exception;
-
- /**
- * Add address mapping.
- *
- * @param user
- * The username, or null if no username should be used.
- * @param domain
- * The domain, or null if no domain should be used.
- * @param toAddress
- * The address.
- * @throws Exception
- */
- public void addAddressMapping(String user, String domain, String toAddress) throws Exception;
-
- /**
- * Remove address mapping.
- *
- * @param user
- * The username, or null if no username should be used.
- * @param domain
- * The domain, or null if no domain should be used
- * @param fromAddress
- * The address.
- * @throws Exception
- */
- public void removeAddressMapping(String user, String domain, String fromAddress) throws Exception;
-
- /**
- * Return the explicit mapping stored for the given user and domain. Return
- * null if no mapping was found
- *
- * @param user
- * The username.
- * @param domain
- * The domain.
- * @return the collection which holds the mappings, or null if no mapping is
- * found.
- * @throws Exception
- */
- public Collection<String> listUserDomainMappings(String user, String domain) throws Exception;
-
- /**
- * Remove regex mapping.
- *
- * @param user
- * The username, or null if no username should be used.
- * @param domain
- * The domain, or null if no domain should be used.
- * @param regex
- * The regex.
- * @throws Exception
- */
- public void addRegexMapping(String user, String domain, String regex) throws Exception;
-
- /**
- * Remove regex mapping.
- *
- * @param user
- * The username, or null if no username should be used.
- * @param domain
- * The domain, or null if no domain should be used.
- * @param regex
- * The regex.
- * @throws Exception
- */
- public void removeRegexMapping(String user, String domain, String regex) throws Exception;
+ /**
+ * Add a user to this mail server.
+ *
+ * @param userName
+ * The name of the user being added.
+ * @param password
+ * The password of the user being added.
+ * @throws Exception
+ */
+ public void addUser(String userName, String password) throws Exception;
+
+ /**
+ * Delete a user from this mail server.
+ *
+ * @param username
+ * The name of the user being deleted.
+ * @throws Exception
+ */
+ public void removeUser(String username) throws Exception;
+
+ /**
+ * Get a List the names of all users.
+ *
+ * @return a List of all user names.
+ * @throws Exception
+ */
+ public String[] listUsers() throws Exception;
+
+ /**
+ * Set a user's password.
+ *
+ * @param userName
+ * The name of the user whose password will be changed.
+ * @param password
+ * The new password.
+ * @throws Exception
+ */
+ public void setPassword(String userName, String password) throws Exception;
+
+ /**
+ * Add domain to the service.
+ *
+ * @param domain
+ * The domain to add.
+ * @throws Exception
+ */
+ public void addDomain(String domain) throws Exception;
+
+ /**
+ * Return true if the domain exists in the service
+ *
+ * @param domain
+ * The domain to remove.
+ * @throws Exception
+ */
+ public boolean containsDomain(String domain) throws Exception;
+
+ /**
+ * Remove domain from the service
+ *
+ * @param domain
+ * The domain to remove.
+ * @throws Exception
+ */
+ public void removeDomain(String domain) throws Exception;
+
+ /**
+ * Get a list of domains for the service.
+ *
+ * @return domains an array of domains, or null if no domains exist.
+ * @throws Exception
+ */
+ public String[] listDomains() throws Exception;
+
+ /**
+ * Get a Map which holds all mappings. The key is the user@domain and the
+ * value is a Collection which holds all mappings.
+ *
+ * @return a Map which holds all mappings.
+ * @throws Exception
+ */
+ public Map<String, Collection<String>> listMappings() throws Exception;
+
+ /**
+ * Add address mapping.
+ *
+ * @param user
+ * The username, or null if no username should be used.
+ * @param domain
+ * The domain, or null if no domain should be used.
+ * @param toAddress
+ * The address.
+ * @throws Exception
+ */
+ public void addAddressMapping(String user, String domain, String toAddress) throws Exception;
+
+ /**
+ * Remove address mapping.
+ *
+ * @param user
+ * The username, or null if no username should be used.
+ * @param domain
+ * The domain, or null if no domain should be used
+ * @param fromAddress
+ * The address.
+ * @throws Exception
+ */
+ public void removeAddressMapping(String user, String domain, String fromAddress) throws Exception;
+
+ /**
+ * Return the explicit mapping stored for the given user and domain. Return
+ * null if no mapping was found
+ *
+ * @param user
+ * The username.
+ * @param domain
+ * The domain.
+ * @return the collection which holds the mappings, or null if no mapping is
+ * found.
+ * @throws Exception
+ */
+ public Collection<String> listUserDomainMappings(String user, String domain) throws Exception;
+
+ /**
+ * Remove regex mapping.
+ *
+ * @param user
+ * The username, or null if no username should be used.
+ * @param domain
+ * The domain, or null if no domain should be used.
+ * @param regex
+ * The regex.
+ * @throws Exception
+ */
+ public void addRegexMapping(String user, String domain, String regex) throws Exception;
+
+ /**
+ * Remove regex mapping.
+ *
+ * @param user
+ * The username, or null if no username should be used.
+ * @param domain
+ * The domain, or null if no domain should be used.
+ * @param regex
+ * The regex.
+ * @throws Exception
+ */
+ public void removeRegexMapping(String user, String domain, String regex) throws Exception;
+
+ /**
+ * Copy Mailbox.
+ *
+ * @param srcBean
+ * The name of the bean that manages the source mailbox.
+ * @param dstBean
+ * The name of the bean that manages the destination mailbox.
+ * @throws Exception
+ */
+ void copyMailbox(String srcBean, String dstBean) throws Exception;
+
}
Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java?rev=1400047&r1=1400046&r2=1400047&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java Fri Oct 19 11:35:13 2012
@@ -31,175 +31,244 @@ import javax.management.remote.JMXConnec
import javax.management.remote.JMXServiceURL;
import org.apache.james.cli.probe.ServerProbe;
+import org.apache.james.container.spring.mailbox.MailboxCopierManagementMBean;
import org.apache.james.domainlist.api.DomainListManagementMBean;
import org.apache.james.rrt.api.RecipientRewriteTableManagementMBean;
import org.apache.james.user.api.UsersRepositoryManagementMBean;
+/**
+ * @author eric
+ *
+ */
public class JmxServerProbe implements ServerProbe {
- // TODO: Move this to somewhere else
- private final static String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist";
- private final static String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable";
- private final static String USERSREPOSITORY_OBJECT_NAME = "org.apache.james:type=component,name=usersrepository";
-
- private MBeanServerConnection mbeanServerConn;
- private DomainListManagementMBean domainListProcxy;
- private RecipientRewriteTableManagementMBean virtualUserTableProxy;
- private UsersRepositoryManagementMBean usersRepositoryProxy;
-
- private static final String fmtUrl = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi";
- private static final int defaultPort = 9999;
- private String host;
- private int port;
-
- /**
- * Creates a ServerProbe using the specified JMX host and port.
- *
- * @param host
- * hostname or IP address of the JMX agent
- * @param port
- * TCP port of the remote JMX agent
- * @throws IOException
- * on connection failures
- */
- public JmxServerProbe(String host, int port) throws IOException, InterruptedException {
- this.host = host;
- this.port = port;
- connect();
- }
-
- /**
- * Creates a NodeProbe using the specified JMX host and default port.
- *
- * @param host
- * hostname or IP address of the JMX agent
- * @throws IOException
- * on connection failures
- */
- public JmxServerProbe(String host) throws IOException, InterruptedException {
- this.host = host;
- this.port = defaultPort;
- connect();
- }
-
- /*
- * Create a connection to the JMX agent and setup the M[X]Bean proxies.
- *
- * @throws IOException
- * on connection failures
- */
- private void connect() throws IOException {
- JMXServiceURL jmxUrl = new JMXServiceURL(String.format(fmtUrl, host, port));
- JMXConnector jmxc = JMXConnectorFactory.connect(jmxUrl, null);
- mbeanServerConn = jmxc.getMBeanServerConnection();
-
- try {
- ObjectName name = new ObjectName(DOMAINLIST_OBJECT_NAME);
- domainListProcxy = (DomainListManagementMBean) MBeanServerInvocationHandler.newProxyInstance(mbeanServerConn, name, DomainListManagementMBean.class, true);
- name = new ObjectName(VIRTUALUSERTABLE_OBJECT_NAME);
- virtualUserTableProxy = (RecipientRewriteTableManagementMBean) MBeanServerInvocationHandler.newProxyInstance(mbeanServerConn, name, RecipientRewriteTableManagementMBean.class, true);
- name = new ObjectName(USERSREPOSITORY_OBJECT_NAME);
- usersRepositoryProxy = (UsersRepositoryManagementMBean) MBeanServerInvocationHandler.newProxyInstance(mbeanServerConn, name, UsersRepositoryManagementMBean.class, true);
- } catch (MalformedObjectNameException e) {
- throw new RuntimeException("Invalid ObjectName? Please report this as a bug.", e);
- }
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#addUser(java.lang.String, java.lang.String)
- */
- public void addUser(String userName, String password) throws Exception {
- usersRepositoryProxy.addUser(userName, password);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#removeUser(java.lang.String)
- */
- public void removeUser(String username) throws Exception {
- usersRepositoryProxy.deleteUser(username);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#listUsers()
- */
- public String[] listUsers() throws Exception {
- return usersRepositoryProxy.listAllUsers();
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#setPassword(java.lang.String, java.lang.String)
- */
- public void setPassword(String userName, String password) throws Exception {
- usersRepositoryProxy.setPassword(userName, password);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#containsDomain(java.lang.String)
- */
- public boolean containsDomain(String domain) throws Exception {
- return domainListProcxy.containsDomain(domain);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#addDomain(java.lang.String)
- */
- public void addDomain(String domain) throws Exception {
- domainListProcxy.addDomain(domain);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#removeDomain(java.lang.String)
- */
- public void removeDomain(String domain) throws Exception {
- domainListProcxy.removeDomain(domain);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#listDomains()
- */
- public String[] listDomains() throws Exception {
- return domainListProcxy.getDomains();
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#listMappings()
- */
- public Map<String, Collection<String>> listMappings() throws Exception {
- return virtualUserTableProxy.getAllMappings();
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#addAddressMapping(java.lang.String, java.lang.String, java.lang.String)
- */
- public void addAddressMapping(String user, String domain, String toAddress) throws Exception {
- virtualUserTableProxy.addAddressMapping(user, domain, toAddress);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#removeAddressMapping(java.lang.String, java.lang.String, java.lang.String)
- */
- public void removeAddressMapping(String user, String domain, String fromAddress) throws Exception {
- virtualUserTableProxy.removeAddressMapping(user, domain, fromAddress);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#listUserDomainMappings(java.lang.String, java.lang.String)
- */
- public Collection<String> listUserDomainMappings(String user, String domain) throws Exception {
- return virtualUserTableProxy.getUserDomainMappings(user, domain);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#addRegexMapping(java.lang.String, java.lang.String, java.lang.String)
- */
- public void addRegexMapping(String user, String domain, String regex) throws Exception {
- virtualUserTableProxy.addRegexMapping(user, domain, regex);
- }
-
- /**
- * @see org.apache.james.cli.probe.ServerProbe#removeRegexMapping(java.lang.String, java.lang.String, java.lang.String)
- */
- public void removeRegexMapping(String user, String domain, String regex) throws Exception {
- virtualUserTableProxy.removeRegexMapping(user, domain, regex);
- }
+ // TODO: Move this to somewhere else
+ private final static String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist";
+ private final static String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable";
+ private final static String USERSREPOSITORY_OBJECT_NAME = "org.apache.james:type=component,name=usersrepository";
+ private final static String MAILBOXCOPIER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxcopier";
+
+ private MBeanServerConnection mbeanServerConn;
+ private DomainListManagementMBean domainListProcxy;
+ private RecipientRewriteTableManagementMBean virtualUserTableProxy;
+ private UsersRepositoryManagementMBean usersRepositoryProxy;
+ private MailboxCopierManagementMBean mailboxCopierManagement;
+
+ private static final String fmtUrl = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi";
+ private static final int defaultPort = 9999;
+ private String host;
+ private int port;
+
+ /**
+ * Creates a ServerProbe using the specified JMX host and port.
+ *
+ * @param host
+ * hostname or IP address of the JMX agent
+ * @param port
+ * TCP port of the remote JMX agent
+ * @throws IOException
+ * on connection failures
+ */
+ public JmxServerProbe(String host, int port) throws IOException, InterruptedException {
+ this.host = host;
+ this.port = port;
+ connect();
+ }
+
+ /**
+ * Creates a NodeProbe using the specified JMX host and default port.
+ *
+ * @param host
+ * hostname or IP address of the JMX agent
+ * @throws IOException
+ * on connection failures
+ */
+ public JmxServerProbe(String host) throws IOException, InterruptedException {
+ this.host = host;
+ this.port = defaultPort;
+ connect();
+ }
+
+ /**
+ * Create a connection to the JMX agent and setup the M[X]Bean proxies.
+ *
+ * @throws IOException
+ * on connection failures
+ */
+ private void connect() throws IOException {
+ JMXServiceURL jmxUrl = new JMXServiceURL(String.format(fmtUrl, host, port));
+ JMXConnector jmxc = JMXConnectorFactory.connect(jmxUrl, null);
+ mbeanServerConn = jmxc.getMBeanServerConnection();
+
+ try {
+ ObjectName name = new ObjectName(DOMAINLIST_OBJECT_NAME);
+ domainListProcxy = (DomainListManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+ mbeanServerConn, name, DomainListManagementMBean.class, true);
+ name = new ObjectName(VIRTUALUSERTABLE_OBJECT_NAME);
+ virtualUserTableProxy = (RecipientRewriteTableManagementMBean) MBeanServerInvocationHandler
+ .newProxyInstance(mbeanServerConn, name, RecipientRewriteTableManagementMBean.class, true);
+ name = new ObjectName(USERSREPOSITORY_OBJECT_NAME);
+ usersRepositoryProxy = (UsersRepositoryManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+ mbeanServerConn, name, UsersRepositoryManagementMBean.class, true);
+ name = new ObjectName(MAILBOXCOPIER_OBJECT_NAME);
+ mailboxCopierManagement = (MailboxCopierManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+ mbeanServerConn, name, MailboxCopierManagementMBean.class, true);
+ } catch (MalformedObjectNameException e) {
+ throw new RuntimeException("Invalid ObjectName? Please report this as a bug.", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.james.cli.probe.ServerProbe#addUser(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public void addUser(String userName, String password) throws Exception {
+ usersRepositoryProxy.addUser(userName, password);
+ }
+
+ /*
+ * @see org.apache.james.cli.probe.ServerProbe#removeUser(java.lang.String)
+ */
+ @Override
+ public void removeUser(String username) throws Exception {
+ usersRepositoryProxy.deleteUser(username);
+ }
+
+ /*
+ * @see org.apache.james.cli.probe.ServerProbe#listUsers()
+ */
+ @Override
+ public String[] listUsers() throws Exception {
+ return usersRepositoryProxy.listAllUsers();
+ }
+
+ /*
+ * @see org.apache.james.cli.probe.ServerProbe#setPassword(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public void setPassword(String userName, String password) throws Exception {
+ usersRepositoryProxy.setPassword(userName, password);
+ }
+
+ /*
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#containsDomain(java.lang.String)
+ */
+ @Override
+ public boolean containsDomain(String domain) throws Exception {
+ return domainListProcxy.containsDomain(domain);
+ }
+
+ /*
+ * @see org.apache.james.cli.probe.ServerProbe#addDomain(java.lang.String)
+ */
+ @Override
+ public void addDomain(String domain) throws Exception {
+ domainListProcxy.addDomain(domain);
+ }
+
+ /*
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#removeDomain(java.lang.String)
+ */
+ @Override
+ public void removeDomain(String domain) throws Exception {
+ domainListProcxy.removeDomain(domain);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.james.cli.probe.ServerProbe#listDomains()
+ */
+ @Override
+ public String[] listDomains() throws Exception {
+ return domainListProcxy.getDomains();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.james.cli.probe.ServerProbe#listMappings()
+ */
+ @Override
+ public Map<String, Collection<String>> listMappings() throws Exception {
+ return virtualUserTableProxy.getAllMappings();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#addAddressMapping(java.lang.String
+ * , java.lang.String, java.lang.String)
+ */
+ @Override
+ public void addAddressMapping(String user, String domain, String toAddress) throws Exception {
+ virtualUserTableProxy.addAddressMapping(user, domain, toAddress);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#removeAddressMapping(java.lang
+ * .String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public void removeAddressMapping(String user, String domain, String fromAddress) throws Exception {
+ virtualUserTableProxy.removeAddressMapping(user, domain, fromAddress);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#listUserDomainMappings(java.lang
+ * .String, java.lang.String)
+ */
+ @Override
+ public Collection<String> listUserDomainMappings(String user, String domain) throws Exception {
+ return virtualUserTableProxy.getUserDomainMappings(user, domain);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#addRegexMapping(java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+ @Override
+ public void addRegexMapping(String user, String domain, String regex) throws Exception {
+ virtualUserTableProxy.addRegexMapping(user, domain, regex);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.cli.probe.ServerProbe#removeRegexMapping(java.lang.String
+ * , java.lang.String, java.lang.String)
+ */
+ @Override
+ public void removeRegexMapping(String user, String domain, String regex) throws Exception {
+ virtualUserTableProxy.removeRegexMapping(user, domain, regex);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.james.cli.probe.ServerProbe#copyMailbox(java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public void copyMailbox(String srcBean, String dstBean) throws Exception {
+ mailboxCopierManagement.copy(srcBean, dstBean);
+ }
+
}
Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java?rev=1400047&r1=1400046&r2=1400047&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java Fri Oct 19 11:35:13 2012
@@ -22,74 +22,76 @@ package org.apache.james.cli.type;
* Enumeration of valid command types.
*/
public enum CmdType {
- ADDUSER("adduser", 3),
- REMOVEUSER("removeuser", 2),
- LISTUSERS("listusers", 1),
- ADDDOMAIN("adddomain", 2),
- REMOVEDOMAIN("removedomain", 2),
- CONTAINSDOMAIN("containsdomain", 2),
- LISTDOMAINS("listdomains", 1),
- LISTMAPPINGS("listmappings", 1),
- LISTUSERDOMAINMAPPINGS("listuserdomainmappings", 3),
- ADDADDRESSMAPPING("addaddressmapping", 4),
- REMOVEADDRESSMAPPING("removeaddressmapping", 4),
- ADDREGEXMAPPING("addregexmapping", 4),
- REMOVEREGEXMAPPING("removeregexmapping", 4),
- SETPASSWORD("setpassword", 3);
- private String command;
- private int arguments;
-
- private CmdType(String command, int arguments) {
- this.command = command;
- this.arguments = arguments;
- }
-
- /**
- * Validate that the number of arguments match the passed value.
- *
- * @param arguments
- * The number of argument to compare.
- * @return true if values match, false otherwise.
- */
- public boolean hasCorrectArguments(int arguments) {
- if (this.arguments == arguments)
- return true;
-
- return false;
- }
-
- /**
- * Return a CmdType enumeration that matches the passed command.
- *
- * @param command
- * The command to use for lookup.
- * @return the CmdType enumeration that matches the passed command, or null
- * if not found.
- */
- public static CmdType lookup(String command) {
- if (command != null) {
- for (CmdType cmd : values())
- if (cmd.getCommand().equalsIgnoreCase(command))
- return cmd;
- }
- return null;
- }
-
- /**
- * Return the value of command.
- *
- * @return the value of command.
- */
- public String getCommand() {
- return this.command;
- }
-
- /**
- * Return the value of arguments.
- *
- * @return the value of arguments.
- */
- public int getArguments() {
- return this.arguments;
- }
+ ADDUSER("adduser", 3), //
+ REMOVEUSER("removeuser", 2), //
+ LISTUSERS("listusers", 1), //
+ ADDDOMAIN("adddomain", 2), //
+ REMOVEDOMAIN("removedomain", 2), //
+ CONTAINSDOMAIN("containsdomain", 2), //
+ LISTDOMAINS("listdomains", 1), //
+ LISTMAPPINGS("listmappings", 1), //
+ LISTUSERDOMAINMAPPINGS("listuserdomainmappings", 3), //
+ ADDADDRESSMAPPING("addaddressmapping", 4), //
+ REMOVEADDRESSMAPPING("removeaddressmapping", 4), //
+ ADDREGEXMAPPING("addregexmapping", 4), //
+ REMOVEREGEXMAPPING("removeregexmapping", 4), //
+ SETPASSWORD("setpassword", 3), //
+ COPYMAILBOX("copymailbox", 3) //
+ ;
+ private String command;
+ private int arguments;
+
+ private CmdType(String command, int arguments) {
+ this.command = command;
+ this.arguments = arguments;
+ }
+
+ /**
+ * Validate that the number of arguments match the passed value.
+ *
+ * @param arguments
+ * The number of argument to compare.
+ * @return true if values match, false otherwise.
+ */
+ public boolean hasCorrectArguments(int arguments) {
+ if (this.arguments == arguments)
+ return true;
+
+ return false;
+ }
+
+ /**
+ * Return a CmdType enumeration that matches the passed command.
+ *
+ * @param command
+ * The command to use for lookup.
+ * @return the CmdType enumeration that matches the passed command, or null
+ * if not found.
+ */
+ public static CmdType lookup(String command) {
+ if (command != null) {
+ for (CmdType cmd : values())
+ if (cmd.getCommand().equalsIgnoreCase(command))
+ return cmd;
+ }
+ return null;
+ }
+
+ /**
+ * Return the value of command.
+ *
+ * @return the value of command.
+ */
+ public String getCommand() {
+ return this.command;
+ }
+
+ /**
+ * Return the value of arguments.
+ *
+ * @return the value of arguments.
+ */
+ public int getArguments() {
+ return this.arguments;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org