You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/18 20:03:26 UTC
svn commit: r1233000 - in
/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli:
./ command/
Author: rmannibucau
Date: Wed Jan 18 19:03:26 2012
New Revision: 1233000
URL: http://svn.apache.org/viewvc?rev=1233000&view=rev
Log:
some few refactoring to get a command pattern in openejb-common-cli
Added:
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/StreamManager.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/AbstractCommand.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyCommand.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyFileCommand.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/ListCommand.java
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/PropertiesCommand.java
Modified:
openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
Modified: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java?rev=1233000&r1=1232999&r2=1233000&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java Wed Jan 18 19:03:26 2012
@@ -1,32 +1,38 @@
package org.apache.openejb.server.cli;
import jline.ConsoleReader;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
+import jline.FileNameCompletor;
import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
import org.apache.openejb.assembler.classic.cmd.Info2Properties;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.cli.command.AbstractCommand;
+import org.apache.openejb.server.cli.command.GroovyCommand;
+import org.apache.openejb.server.cli.command.GroovyFileCommand;
+import org.apache.openejb.server.cli.command.ListCommand;
+import org.apache.openejb.server.cli.command.PropertiesCommand;
import org.apache.openejb.server.groovy.OpenEJBGroovyShell;
import org.apache.openejb.util.helper.CommandHelper;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.apache.xbean.recipe.Option;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
import java.io.PrintStream;
-import java.util.Collection;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class CliRunnable implements Runnable {
- public static final String EXIT_COMMAND = "exit";
- private static final String GROOVY_PREFIX = "groovy ";
- private static final String GROOVY_FILE_PREFIX = "groovy_file ";
- private static final String LIST_CMD = "list";
- private static final String PROPERTIES_CMD = "properties";
+ private static final String EXIT_COMMAND = "exit";
private static final String WELCOME = "Welcome on your $bind:$port $name server";
- public static final String OS_LINE_SEP = System.getProperty("line.separator");
+ private static final String OS_LINE_SEP = System.getProperty("line.separator");
private static final String NAME;
- public static final String PROMPT = "openejb> ";
+ private static final String PROMPT = "openejb> ";
+ private static final List<Class<? extends AbstractCommand>> COMMAND_CLASSES
+ = Arrays.asList(GroovyCommand.class, GroovyFileCommand.class,
+ ListCommand.class, PropertiesCommand.class);
static {
String name = "OpenEJB";
@@ -42,12 +48,12 @@ public class CliRunnable implements Runn
public String lineSep;
private OpenEJBGroovyShell shell;
- private OutputStreamWriter serr;
- private OutputStreamWriter sout;
+ private OutputStream err;
private OutputStream out;
private InputStream sin;
private String bind;
private int port;
+ private Map<String, Class<?>> commands;
public CliRunnable(String bind, int port) {
@@ -82,29 +88,45 @@ public class CliRunnable implements Runn
public void setOutputStream(OutputStream out) {
this.out = out;
- sout = new OutputStreamWriter(out);
}
public void setErrorStream(OutputStream err) {
- serr = new OutputStreamWriter(err);
+ this.err = err;
}
public void start() throws IOException {
shell = new OpenEJBGroovyShell();
+ initializeCommands();
new Thread(this, "OpenEJB Cli").start();
}
+ private void initializeCommands() {
+ commands = new HashMap<String, Class<?>>();
+
+ for (Class<? extends AbstractCommand> cmd : COMMAND_CLASSES) {
+ try {
+ commands.put(cmd.newInstance().name(), cmd);
+ } catch (Exception e) {
+ // command ignored
+ }
+ }
+ }
+
public void destroy() {
shell.resetLoadedClasses();
+ commands.clear();
}
public void run() {
try {
- final ConsoleReader reader = new ConsoleReader(sin, sout);
+ final StreamManager streamManager = new StreamManager(out, err, lineSep);
+
+ final ConsoleReader reader = new ConsoleReader(sin, streamManager.getSout());
+ reader.addCompletor(new FileNameCompletor());
// TODO : add completers with method names...?
String line;
- write(sout, WELCOME // simple replace for now, if it is mandatory we could bring velocity to do it
+ streamManager.writeOut(WELCOME // simple replace for now, if it is mandatory we could bring velocity to do it
.replace("$bind", bind)
.replace("$port", Integer.toString(port))
.replace("$name", NAME));
@@ -113,24 +135,32 @@ public class CliRunnable implements Runn
break;
}
- if (line.startsWith(GROOVY_PREFIX)) {
- try {
- write(sout, asString(shell.evaluate(line.substring(GROOVY_PREFIX.length()))));
- } catch (Exception e) {
- write(e);
+ Class<?> cmdClass = null;
+ for (Map.Entry<String, Class<?>> cmd : commands.entrySet()) {
+ if (line.startsWith(cmd.getKey())) {
+ cmdClass = cmd.getValue();
+ break;
}
- } else if (GROOVY_FILE_PREFIX.equals(line)) {
+ }
+
+ if (cmdClass != null) {
+ ObjectRecipe recipe = new ObjectRecipe(cmdClass);
+ recipe.setProperty("streamManager", streamManager);
+ recipe.setProperty("command", line);
+ recipe.setProperty("shell", shell);
+
+ recipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
+ recipe.allow(Option.IGNORE_MISSING_PROPERTIES);
+ recipe.allow(Option.NAMED_PARAMETERS);
+
try {
- write(sout, asString(shell.evaluate(new File(line.substring(GROOVY_PREFIX.length())))));
+ final AbstractCommand cmdInstance = (AbstractCommand) recipe.create();
+ cmdInstance.execute(line);
} catch (Exception e) {
- write(e);
+ streamManager.writeErr(e);
}
- } else if (LIST_CMD.equals(line)) {
- list();
- } else if (PROPERTIES_CMD.equals(line)) {
- properties();
} else {
- write(sout, "sorry i don't understand '" + line + "'");
+ streamManager.writeOut("sorry i don't understand '" + line + "'");
}
}
} catch (IOException e) {
@@ -143,73 +173,12 @@ public class CliRunnable implements Runn
Info2Properties.printConfig(config, new PrintStream(out), lineSep);
}
- private void list() {
+ private void list(final StreamManager streamManager) {
try {
CommandHelper.listEJBs(lineSep).print(new PrintStream(out));
} catch (Exception e) {
- write(e);
- }
- }
-
- private void write(final OutputStreamWriter writer, final String s) {
- for (String l : s.split(lineSep)) {
- try {
- writer.write(l);
- writer.write(lineSep);
- writer.flush();
- } catch (IOException e) {
- // ignored
- }
- }
- }
-
- private void write(Exception e) {
- if (e.getStackTrace() == null) {
- write(serr, e.getMessage());
- } else {
- final StringBuilder error = new StringBuilder();
- for (StackTraceElement elt : e.getStackTrace()) {
- error.append(elt.toString()).append(lineSep);
- }
- write(serr, error.toString());
- }
- }
-
- private String asString(Object out) {
- if (out == null) {
- return "null";
- }
- if (out instanceof Collection) {
- final StringBuilder builder = new StringBuilder();
- for (Object o : (Collection) out) {
- builder.append(string(o)).append(lineSep);
- }
- return builder.toString();
+ streamManager.writeErr(e);
}
- return string(out);
- }
-
- private static String string(Object out) {
- if (!out.getClass().getName().startsWith("java")) {
- return ToStringBuilder.reflectionToString(out, ToStringStyle.SHORT_PREFIX_STYLE);
- }
- return out.toString();
- }
-
- public OutputStream getOut() {
- return out;
- }
-
- public OutputStreamWriter getSerr() {
- return serr;
- }
-
- public OutputStreamWriter getSout() {
- return sout;
- }
-
- public InputStream getSin() {
- return sin;
}
public String getBind() {
Added: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/StreamManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/StreamManager.java?rev=1233000&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/StreamManager.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/StreamManager.java Wed Jan 18 19:03:26 2012
@@ -0,0 +1,94 @@
+package org.apache.openejb.server.cli;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.Collection;
+
+public class StreamManager {
+ private String lineSep;
+ private OutputStreamWriter serr;
+ private OutputStreamWriter sout;
+ private OutputStream out;
+ private OutputStream err;
+
+ public StreamManager(OutputStream out, OutputStream err, String lineSep) {
+ this.lineSep = lineSep;
+ this.out = out;
+ this.err = err;
+ this.sout = new OutputStreamWriter(out);
+ this.serr= new OutputStreamWriter(err);
+ }
+
+ private void write(final OutputStreamWriter writer, final String s) {
+ for (String l : s.split(lineSep)) {
+ try {
+ writer.write(l);
+ writer.write(lineSep);
+ writer.flush();
+ } catch (IOException e) {
+ // ignored
+ }
+ }
+ }
+
+ public void writeOut(final String s) {
+ write(sout, s);
+ }
+
+ public void writeErr(Exception e) {
+ if (e.getStackTrace() == null) {
+ write(serr, e.getMessage());
+ } else {
+ final StringBuilder error = new StringBuilder();
+ for (StackTraceElement elt : e.getStackTrace()) {
+ error.append(elt.toString()).append(lineSep);
+ }
+ write(serr, error.toString());
+ }
+ }
+
+ public String asString(Object out) {
+ if (out == null) {
+ return "null";
+ }
+ if (out instanceof Collection) {
+ final StringBuilder builder = new StringBuilder();
+ for (Object o : (Collection) out) {
+ builder.append(string(o)).append(lineSep);
+ }
+ return builder.toString();
+ }
+ return string(out);
+ }
+
+ private static String string(Object out) {
+ if (!out.getClass().getName().startsWith("java")) {
+ return ToStringBuilder.reflectionToString(out, ToStringStyle.SHORT_PREFIX_STYLE);
+ }
+ return out.toString();
+ }
+
+ public OutputStream getOut() {
+ return out;
+ }
+
+ public OutputStream getErr() {
+ return err;
+ }
+
+ public OutputStreamWriter getSerr() {
+ return serr;
+ }
+
+ public OutputStreamWriter getSout() {
+ return sout;
+ }
+
+ public String getLineSep() {
+ return lineSep;
+ }
+}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/AbstractCommand.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/AbstractCommand.java?rev=1233000&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/AbstractCommand.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/AbstractCommand.java Wed Jan 18 19:03:26 2012
@@ -0,0 +1,23 @@
+package org.apache.openejb.server.cli.command;
+
+import org.apache.openejb.server.cli.StreamManager;
+
+public abstract class AbstractCommand {
+ protected StreamManager streamManager;
+ protected String command;
+
+ public abstract String name();
+ public abstract Runnable executable(final String cmd);
+
+ public void setStreamManager(StreamManager streamManager) {
+ this.streamManager = streamManager;
+ }
+
+ public void setCommand(String command) {
+ this.command = command;
+ }
+
+ public void execute(String line) {
+ executable(line).run();
+ }
+}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyCommand.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyCommand.java?rev=1233000&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyCommand.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyCommand.java Wed Jan 18 19:03:26 2012
@@ -0,0 +1,30 @@
+package org.apache.openejb.server.cli.command;
+
+import org.apache.openejb.server.groovy.OpenEJBGroovyShell;
+
+public class GroovyCommand extends AbstractCommand {
+ private OpenEJBGroovyShell shell;
+
+ @Override
+ public String name() {
+ return "groovy";
+ }
+
+ @Override
+ public Runnable executable(final String cmd) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ try {
+ streamManager.writeOut(streamManager.asString(shell.evaluate(cmd.substring(name().length() + 1))));
+ } catch (Exception e) {
+ streamManager.writeErr(e);
+ }
+ }
+ };
+ }
+
+ public void setShell(OpenEJBGroovyShell shell) {
+ this.shell = shell;
+ }
+}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyFileCommand.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyFileCommand.java?rev=1233000&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyFileCommand.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/GroovyFileCommand.java Wed Jan 18 19:03:26 2012
@@ -0,0 +1,33 @@
+package org.apache.openejb.server.cli.command;
+
+import org.apache.openejb.server.cli.StreamManager;
+import org.apache.openejb.server.groovy.OpenEJBGroovyShell;
+
+import java.io.File;
+
+public class GroovyFileCommand extends AbstractCommand {
+ private OpenEJBGroovyShell shell;
+
+ @Override
+ public String name() {
+ return "groovy file";
+ }
+
+ @Override
+ public Runnable executable(final String cmd) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ try {
+ streamManager.writeOut(streamManager.asString(shell.evaluate(new File(cmd.substring(name().length() + 1)))));
+ } catch (Exception e) {
+ streamManager.writeErr(e);
+ }
+ }
+ };
+ }
+
+ public void setShell(OpenEJBGroovyShell shell) {
+ this.shell = shell;
+ }
+}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/ListCommand.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/ListCommand.java?rev=1233000&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/ListCommand.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/ListCommand.java Wed Jan 18 19:03:26 2012
@@ -0,0 +1,26 @@
+package org.apache.openejb.server.cli.command;
+
+import org.apache.openejb.util.helper.CommandHelper;
+
+import java.io.PrintStream;
+
+public class ListCommand extends AbstractCommand {
+ @Override
+ public String name() {
+ return "list";
+ }
+
+ @Override
+ public Runnable executable(String cmd) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ try {
+ CommandHelper.listEJBs(streamManager.getLineSep()).print(new PrintStream(streamManager.getOut()));
+ } catch (Exception e) {
+ streamManager.writeErr(e);
+ }
+ }
+ };
+ }
+}
Added: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/PropertiesCommand.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/PropertiesCommand.java?rev=1233000&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/PropertiesCommand.java (added)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/command/PropertiesCommand.java Wed Jan 18 19:03:26 2012
@@ -0,0 +1,25 @@
+package org.apache.openejb.server.cli.command;
+
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.cmd.Info2Properties;
+import org.apache.openejb.loader.SystemInstance;
+
+import java.io.PrintStream;
+
+public class PropertiesCommand extends AbstractCommand {
+ @Override
+ public String name() {
+ return "properties";
+ }
+
+ @Override
+ public Runnable executable(String cmd) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ final OpenEjbConfiguration config = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
+ Info2Properties.printConfig(config, new PrintStream(streamManager.getOut()), streamManager.getLineSep());
+ }
+ };
+ }
+}