You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2006/05/30 09:26:36 UTC
svn commit: r410204 - in /geronimo/sandbox/gshell/trunk:
gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/
gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/
gshell-core/src/main/java/org/apache/geron...
Author: jdillon
Date: Tue May 30 00:26:34 2006
New Revision: 410204
URL: http://svn.apache.org/viewvc?rev=410204&view=rev
Log:
Refactored InteractiveConsole for all your interactive input needs, its generic and not specific to GShell anymore
Script command's interpreter can now be exited with a CTRL-D, which brings you back to gshell
Removed:
geronimo/sandbox/gshell/trunk/gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/InteractiveInterpreter.java
Modified:
geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
geronimo/sandbox/gshell/trunk/gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/ScriptCommand.java
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/InteractiveConsole.java
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/JLineConsole.java
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/SimpleConsole.java
geronimo/sandbox/gshell/trunk/gshell-core/src/test/java/org/apache/geronimo/gshell/console/InteractiveConsoleTest.java
Modified: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java?rev=410204&r1=410203&r2=410204&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java Tue May 30 00:26:34 2006
@@ -26,10 +26,8 @@
import org.apache.commons.cli.HelpFormatter;
import org.apache.geronimo.gshell.GShell;
-import org.apache.geronimo.gshell.command.CommandManager;
import org.apache.geronimo.gshell.console.IO;
import org.apache.geronimo.gshell.console.InteractiveConsole;
-import org.apache.geronimo.gshell.console.SimpleConsole;
import org.apache.geronimo.gshell.console.JLineConsole;
import org.apache.geronimo.gshell.util.Version;
@@ -180,7 +178,7 @@
//
// Startup the shell
- GShell gshell = new GShell(io);
+ final GShell gshell = new GShell(io);
String[] _args = line.getArgs();
// Force interactive if there are no args
@@ -189,7 +187,33 @@
}
if (interactive) {
- InteractiveConsole console = new InteractiveConsole(new JLineConsole(io), gshell);
+ //
+ // TODO: May want to create a simple class in core to hide these details
+ //
+
+ InteractiveConsole console = new InteractiveConsole(
+ new JLineConsole(io),
+ new InteractiveConsole.Executor() {
+ public Result execute(final String line) throws Exception {
+ assert line != null;
+
+ // Execute unless the line is just blank
+ if (!line.trim().equals("")) {
+ gshell.execute(line);
+ }
+
+ return Result.CONTINUE;
+ }
+ },
+ new InteractiveConsole.Prompter() {
+ public String getPrompt() {
+ //
+ // TODO: Need to hook this up to allow it to change
+ //
+
+ return "> ";
+ }
+ });
// Check if there are args, and run them and then enter interactive
if (_args.length != 0) {
Modified: geronimo/sandbox/gshell/trunk/gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/ScriptCommand.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/ScriptCommand.java?rev=410204&r1=410203&r2=410204&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/ScriptCommand.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-commands/scripting-commands/src/main/java/org/apache/geronimo/gshell/commands/scripting/ScriptCommand.java Tue May 30 00:26:34 2006
@@ -27,6 +27,8 @@
import org.apache.geronimo.gshell.command.CommandSupport;
import org.apache.geronimo.gshell.console.IO;
import org.apache.geronimo.gshell.console.JLineConsole;
+import org.apache.geronimo.gshell.console.InteractiveConsole;
+
import org.apache.bsf.BSFManager;
import org.apache.bsf.BSFEngine;
@@ -126,7 +128,7 @@
}
BSFManager manager = new BSFManager();
- BSFEngine engine = manager.loadScriptingEngine(language);
+ final BSFEngine engine = manager.loadScriptingEngine(language);
if (this.expression != null) {
log.info("Evaluating expression: " + expression);
@@ -135,11 +137,37 @@
log.info("Expression result: " + obj);
}
+ else {
+ // No expression, assume interactive (else we don't do anything)
+ interactive = true;
+
+ //
+ // TODO: This will change when file/URL processing is added
+ //
+ }
if (this.interactive) {
- String prompt = "script:" + language + ">";
- InteractiveInterpreter interp = new InteractiveInterpreter(new JLineConsole(getIO()), engine, prompt);
- interp.run();
+ InteractiveConsole console = new InteractiveConsole(
+ new JLineConsole(getIO()),
+ new InteractiveConsole.Executor() {
+ public Result execute(final String line) throws Exception {
+ // Execute unless the line is just blank
+ if (!line.trim().equals("")) {
+ engine.exec("<unknown>", 1, 1, line);
+ }
+
+ return Result.CONTINUE;
+ }
+ },
+ new InteractiveConsole.Prompter() {
+ public String getPrompt() {
+ return "script:" + language + "> ";
+ }
+ });
+
+ // Allow CTRL-D to exit :-)
+ console.setShutdownOnNull(true);
+ console.run();
}
return Command.SUCCESS;
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/InteractiveConsole.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/InteractiveConsole.java?rev=410204&r1=410203&r2=410204&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/InteractiveConsole.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/InteractiveConsole.java Tue May 30 00:26:34 2006
@@ -18,10 +18,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.geronimo.gshell.GShell;
/**
- * ???
+ * Provides the framework to interactivly get input from a console
+ * and "do something" with the line that was read.
*
* @version $Id$
*/
@@ -34,60 +34,113 @@
private static final Log log = LogFactory.getLog(InteractiveConsole.class);
- private final GShell gshell;
-
private final Console console;
- public InteractiveConsole(final Console console, final GShell gshell) {
+ private Executor executor;
+
+ private Prompter prompter;
+
+ private boolean shutdownOnNull = false;
+
+ public InteractiveConsole(final Console console, final Executor executor, final Prompter prompter) {
if (console == null) {
throw new IllegalArgumentException("Console is null");
}
- if (gshell == null) {
- throw new IllegalArgumentException("GShell is null");
+ if (executor == null) {
+ throw new IllegalArgumentException("Executor is null");
+ }
+ if (prompter == null) {
+ throw new IllegalArgumentException("Prompter is null");
}
-
- //
- // TODO: Can probaby abstract the GShell bits to just some kind of String executor
- //
this.console = console;
- this.gshell = gshell;
+ this.executor = executor;
+ this.prompter = prompter;
+ }
+
+ /**
+ * Enable or disable shutting down the interactive loop when
+ * a null value is read from the given console.
+ *
+ * @param flag True to shutdown when a null is received; else false
+ */
+ public void setShutdownOnNull(final boolean flag) {
+ this.shutdownOnNull = flag;
+ }
+
+ /**
+ * @see #setShutdownOnNull
+ */
+ public boolean isShutdownOnNull() {
+ return shutdownOnNull;
}
public void run() {
log.info("Running...");
boolean debug = log.isDebugEnabled();
+ boolean running = true;
- while (true) {
+ while (running) {
try {
- //
- // TODO: Need to resolve how to allow the prompt to be changed
- //
-
- String prompt = "> ";
String line;
- while ((line = console.readLine(prompt)) != null) {
+ while ((line = console.readLine(prompter.getPrompt())) != null) {
if (debug) {
log.debug("Read line: " + line);
}
- // Just ignore blank lines
- if (line.trim().equals("")) {
- continue;
+ Executor.Result result = executor.execute(line);
+
+ // Allow executor to request that the loop stop
+ if (result == Executor.Result.STOP) {
+ log.debug("Executor requested STOP");
+ running = false;
+ break;
}
+ }
- int result = gshell.execute(line);
+ //
+ // TODO: Probably need to expose more configurability for handing/rejecting shutdown
+ //
- if (debug) {
- log.debug("Command result: " + result);
- }
+ // Line was null, maybe shutdown
+ if (shutdownOnNull) {
+ log.debug("Input was null; which will cause shutdown");
+ running = false;
}
}
catch (Exception e) {
- log.error("Unhandled failure", e);
+ log.error("Exception", e);
}
+ catch (Error e) {
+ log.error("Error", e);
+ }
+ }
+
+ log.info("Stopped");
+ }
+
+ //
+ // Executor
+ //
+
+ public static interface Executor
+ {
+ enum Result {
+ CONTINUE,
+ STOP
}
+
+ Result execute(String line) throws Exception;
+ }
+
+ //
+ // Prompter
+ //
+
+ public static interface Prompter
+ {
+ String getPrompt();
}
}
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/JLineConsole.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/JLineConsole.java?rev=410204&r1=410203&r2=410204&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/JLineConsole.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/JLineConsole.java Tue May 30 00:26:34 2006
@@ -33,6 +33,7 @@
private static final Log log = LogFactory.getLog(SimpleConsole.class);
private final IO io;
+
private final ConsoleReader reader;
public JLineConsole(final IO io) throws IOException {
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/SimpleConsole.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/SimpleConsole.java?rev=410204&r1=410203&r2=410204&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/SimpleConsole.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/console/SimpleConsole.java Tue May 30 00:26:34 2006
@@ -33,6 +33,7 @@
private static final Log log = LogFactory.getLog(SimpleConsole.class);
private final IO io;
+
private final BufferedReader reader;
public SimpleConsole(final IO io) {
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/test/java/org/apache/geronimo/gshell/console/InteractiveConsoleTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/test/java/org/apache/geronimo/gshell/console/InteractiveConsoleTest.java?rev=410204&r1=410203&r2=410204&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/test/java/org/apache/geronimo/gshell/console/InteractiveConsoleTest.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/test/java/org/apache/geronimo/gshell/console/InteractiveConsoleTest.java Tue May 30 00:26:34 2006
@@ -28,7 +28,7 @@
{
public void testConstructorArgs() throws Exception {
try {
- new InteractiveConsole(null, null);
+ new InteractiveConsole(null, null, null);
fail("Accepted null value");
}
catch (IllegalArgumentException expected) {
@@ -36,15 +36,25 @@
}
try {
- new InteractiveConsole(new SimpleConsole(new IO()), null);
+ new InteractiveConsole(new SimpleConsole(new IO()), null, null);
fail("Accepted null value");
}
catch (IllegalArgumentException expected) {
// ignore
}
- //
- // TODO: Check happy day
- //
+ // Happy day
+ new InteractiveConsole(
+ new SimpleConsole(new IO()),
+ new InteractiveConsole.Executor() {
+ public Result execute(String line) throws Exception {
+ return null;
+ }
+ },
+ new InteractiveConsole.Prompter() {
+ public String getPrompt() {
+ return null;
+ }
+ });
}
}