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 ie...@apache.org on 2013/01/05 08:49:38 UTC
svn commit: r1429226 - in
/james/server/trunk/cli/src/main/java/org/apache/james/cli: ServerCmd.java
probe/impl/JmxServerProbe.java type/CmdType.java
Author: ieugen
Date: Sat Jan 5 07:49:38 2013
New Revision: 1429226
URL: http://svn.apache.org/viewvc?rev=1429226&view=rev
Log:
JAMES-1460 Small fixes to cli
Modified:
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/impl/JmxServerProbe.java
james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java
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=1429226&r1=1429225&r2=1429226&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 Sat Jan 5 07:49:38 2013
@@ -18,14 +18,6 @@
****************************************************************/
package org.apache.james.cli;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
@@ -37,272 +29,273 @@ import org.apache.james.cli.probe.Server
import org.apache.james.cli.probe.impl.JmxServerProbe;
import org.apache.james.cli.type.CmdType;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+
/**
* 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 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());
- }
+ 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)) {
+ Collection<String> userDomainMappings = probe.listUserDomainMappings(arguments[1], arguments[2]);
+ sCmd.print(userDomainMappings.toArray(new String[userDomainMappings.size()]), 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 (String u : data) {
+ out.println(u);
+ }
+
+ out.println();
+ }
+
+ public void print(Map<String, Collection<String>> map, PrintStream out) {
+ if (map == null)
+ return;
+
+ for (Entry<String, Collection<String>> entry : map.entrySet()) {
+ 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/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=1429226&r1=1429225&r2=1429226&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 Sat Jan 5 07:49:38 2013
@@ -56,8 +56,8 @@ public class JmxServerProbe implements S
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;
+ private final String host;
+ private final int port;
/**
* Creates a ServerProbe using the specified JMX host and port.
@@ -102,16 +102,16 @@ public class JmxServerProbe implements S
try {
ObjectName name = new ObjectName(DOMAINLIST_OBJECT_NAME);
- domainListProcxy = (DomainListManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+ domainListProcxy = MBeanServerInvocationHandler.newProxyInstance(
mbeanServerConn, name, DomainListManagementMBean.class, true);
name = new ObjectName(VIRTUALUSERTABLE_OBJECT_NAME);
- virtualUserTableProxy = (RecipientRewriteTableManagementMBean) MBeanServerInvocationHandler
- .newProxyInstance(mbeanServerConn, name, RecipientRewriteTableManagementMBean.class, true);
+ virtualUserTableProxy = MBeanServerInvocationHandler
+ .newProxyInstance(mbeanServerConn, name, RecipientRewriteTableManagementMBean.class, true);
name = new ObjectName(USERSREPOSITORY_OBJECT_NAME);
- usersRepositoryProxy = (UsersRepositoryManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+ usersRepositoryProxy = MBeanServerInvocationHandler.newProxyInstance(
mbeanServerConn, name, UsersRepositoryManagementMBean.class, true);
name = new ObjectName(MAILBOXCOPIER_OBJECT_NAME);
- mailboxCopierManagement = (MailboxCopierManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+ mailboxCopierManagement = MBeanServerInvocationHandler.newProxyInstance(
mbeanServerConn, name, MailboxCopierManagementMBean.class, true);
} catch (MalformedObjectNameException e) {
throw new RuntimeException("Invalid ObjectName? Please report this as a bug.", e);
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=1429226&r1=1429225&r2=1429226&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 Sat Jan 5 07:49:38 2013
@@ -38,8 +38,8 @@ public enum CmdType {
SETPASSWORD("setpassword", 3), //
COPYMAILBOX("copymailbox", 3) //
;
- private String command;
- private int arguments;
+ private final String command;
+ private final int arguments;
private CmdType(String command, int arguments) {
this.command = command;
@@ -54,11 +54,9 @@ public enum CmdType {
* @return true if values match, false otherwise.
*/
public boolean hasCorrectArguments(int arguments) {
- if (this.arguments == arguments)
- return true;
+ return this.arguments == arguments;
- return false;
- }
+ }
/**
* Return a CmdType enumeration that matches the passed command.
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org