* In most cases, this will terminate communication on every client. On some
@@ -375,7 +394,7 @@ public class SocketConsoleApplicationShell implements Runnable, AutoCloseable {
running = false;
try {
serverSocket.close();
- } catch (IOException e) {
+ } catch (final IOException e) {
LOGGER.log(Level.SEVERE, "Exception in closing socket server", e); //$NON-NLS-1$
}
app.exit();
@@ -387,17 +406,10 @@ public class SocketConsoleApplicationShell implements Runnable, AutoCloseable {
synchronized (this) {
wait(ONE_TENTH_OF_SECOND);
}
- } catch (InterruptedException e) {
+ } catch (final InterruptedException e) {
LOGGER.log(Level.SEVERE, "Interrupted wait", //$NON-NLS-1$
e);
return;
}
}
-
- /* (non-Javadoc)
- * @see java.lang.AutoCloseable#close() */
- @Override
- public void close() throws IOException {
- consoleManager.close();
- }
}
diff --git a/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleRunnableTest.java b/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleRunnableTest.java
index a32f9a4..323f9d0 100644
--- a/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleRunnableTest.java
+++ b/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleRunnableTest.java
@@ -42,7 +42,7 @@ import java.io.IOException;
import org.junit.Test;
-import fr.bigeon.gclc.manager.ConsoleManager;
+import fr.bigeon.gclc.manager.ConsoleInput;
/** Test class for {@link ConsoleRunnable}
*
@@ -55,71 +55,25 @@ public class ConsoleRunnableTest {
*
* @author Emmanuel Bigeon */
private static final class ConsoleManagerTestImplementation
- implements ConsoleManager {
+ implements ConsoleInput {
int i = 0;
String[] cmds;
/** @param cmds the commands to run */
- public ConsoleManagerTestImplementation(String[] cmds) {
+ public ConsoleManagerTestImplementation(final String[] cmds) {
super();
this.cmds = cmds;
}
- @Override
- public void setPrompt(String prompt) {
- // do nothing
- }
-
- @Override
- public String getPrompt() {
- // Not used in test
- return ""; //$NON-NLS-1$
- }
-
- @Override
- public String prompt() {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) { // NOSONAR
- // do nothing
- }
- i++;
- if (i == cmds.length) {
- i = 0;
- }
- return cmds[i];
- }
-
- @Override
- public String prompt(String message) {
- return prompt();
- }
-
- @Override
- public void println(String message) {
- // do nothing
- }
-
- @Override
- public void println() {
- // do nothing
- }
-
- @Override
- public void print(String text) {
- // do nothing
- }
-
@Override
public void close() throws IOException {
// do nothing
}
- /* (non-Javadoc)
- * @see fr.bigeon.gclc.manager.ConsoleManager#isClosed() */
@Override
- public boolean isClosed() {
- return i == cmds.length;
+ public String getPrompt() {
+ // Not used in test
+ return ""; //$NON-NLS-1$
}
/* (non-Javadoc)
@@ -129,10 +83,36 @@ public class ConsoleRunnableTest {
//
}
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.manager.ConsoleManager#isClosed() */
+ @Override
+ public boolean isClosed() {
+ return i == cmds.length;
+ }
+
+ @Override
+ public String prompt() {
+ try {
+ Thread.sleep(1000);
+ } catch (final InterruptedException e) { // NOSONAR
+ // do nothing
+ }
+ i++;
+ if (i == cmds.length) {
+ i = 0;
+ }
+ return cmds[i];
+ }
+
/* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleManager#prompt(long) */
@Override
- public String prompt(long timeout) throws IOException {
+ public String prompt(final long timeout) throws IOException {
+ return prompt();
+ }
+
+ @Override
+ public String prompt(final String message) {
return prompt();
}
@@ -140,9 +120,14 @@ public class ConsoleRunnableTest {
* @see fr.bigeon.gclc.manager.ConsoleManager#prompt(java.lang.String,
* long) */
@Override
- public String prompt(String message, long timeout) throws IOException {
+ public String prompt(final String message, final long timeout) throws IOException {
return prompt(message);
}
+
+ @Override
+ public void setPrompt(final String prompt) {
+ // do nothing
+ }
}
/** Test method for
@@ -156,6 +141,16 @@ public class ConsoleRunnableTest {
}
+ /** Test method for {@link fr.bigeon.gclc.socket.ConsoleRunnable#stop()}. */
+ @Test
+ public void testRun() {
+// ConsoleApplication app = new ConsoleTestApplication(
+// new ConsoleManagerTestImplementation(
+// new String[] {"test", ConsoleTestApplication.EXIT})); //$NON-NLS-1$
+// ConsoleRunnable runnable = new ConsoleRunnable(app);
+// runnable.run();
+ }
+
/** Test method for {@link fr.bigeon.gclc.socket.ConsoleRunnable#run()}. */
@Test
public void testRunFlow() {
@@ -184,14 +179,4 @@ public class ConsoleRunnableTest {
// runnable.stop();
}
- /** Test method for {@link fr.bigeon.gclc.socket.ConsoleRunnable#stop()}. */
- @Test
- public void testRun() {
-// ConsoleApplication app = new ConsoleTestApplication(
-// new ConsoleManagerTestImplementation(
-// new String[] {"test", ConsoleTestApplication.EXIT})); //$NON-NLS-1$
-// ConsoleRunnable runnable = new ConsoleRunnable(app);
-// runnable.run();
- }
-
}
diff --git a/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleTestApplication.java b/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleTestApplication.java
index 5078bf8..1276208 100644
--- a/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleTestApplication.java
+++ b/gclc-socket/src/test/java/fr/bigeon/gclc/socket/ConsoleTestApplication.java
@@ -42,10 +42,11 @@ import fr.bigeon.gclc.command.ExitCommand;
import fr.bigeon.gclc.command.HelpExecutor;
import fr.bigeon.gclc.exception.CommandRunException;
import fr.bigeon.gclc.exception.InvalidCommandName;
-import fr.bigeon.gclc.manager.ConsoleManager;
+import fr.bigeon.gclc.manager.ConsoleInput;
+import fr.bigeon.gclc.manager.ConsoleOutput;
/** A test-purpose application
- *
+ *
* @author Emmanuel Bigeon */
public class ConsoleTestApplication {
@@ -55,40 +56,59 @@ public class ConsoleTestApplication {
/** @param manager the manager
* @return create the application */
@SuppressWarnings("nls")
- public static ConsoleApplication create(final ConsoleManager manager) {
+ public static ConsoleApplication create(final ConsoleOutput manager,
+ final ConsoleInput input) {
try {
- ConsoleApplication application = new ConsoleApplication(manager,
+ final ConsoleApplication application = new ConsoleApplication(
+ manager, input,
"Welcome to the test application. Type help or test.",
"See you");
application.add(new ExitCommand(EXIT, application));
- application.add(
- new HelpExecutor("help", manager, application.root));
+ application
+ .add(new HelpExecutor("help", application.root));
application.add(new Command("test") {
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.
+ * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput,
+ * java.lang.String[]) */
+ @Override
+ public void execute(final ConsoleOutput out,
+ final ConsoleInput in,
+ final String... args) throws CommandRunException {
+ try {
+ manager.println("Test command ran fine");
+ } catch (final IOException e) {
+ throw new CommandRunException("manager closed", e,
+ this);
+ }
+ }
+
@Override
public String tip() {
return "A test command";
}
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.command.Command#usageDetail()
+ */
@Override
- public void execute(String... args) throws CommandRunException {
- try {
- manager.println("Test command ran fine");
- } catch (IOException e) {
- throw new CommandRunException("manager closed", e,
- this);
- }
+ protected String usageDetail() {
+ // TODO Auto-generated method stub
+ // return null;
+ throw new RuntimeException("Not implemented yet");
}
});
application.add(new Command("long") {
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.
+ * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput,
+ * java.lang.String[]) */
@Override
- public String tip() {
- return "A long run test command";
- }
-
- @Override
- public void execute(String... args) throws CommandRunException {
+ public void execute(final ConsoleOutput out,
+ final ConsoleInput in,
+ final String... args) throws CommandRunException {
try {
Thread.sleep(2000);
manager.println("Test command ran fine");
@@ -97,6 +117,21 @@ public class ConsoleTestApplication {
this);
}
}
+
+ @Override
+ public String tip() {
+ return "A long run test command";
+ }
+
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.command.Command#usageDetail()
+ */
+ @Override
+ protected String usageDetail() {
+ // TODO Auto-generated method stub
+ // return null;
+ throw new RuntimeException("Not implemented yet");
+ }
});
return application;
} catch (final InvalidCommandName e) {
diff --git a/gclc-socket/src/test/java/fr/bigeon/gclc/socket/TestServer.java b/gclc-socket/src/test/java/fr/bigeon/gclc/socket/TestServer.java
index 7cd253c..782bb2e 100644
--- a/gclc-socket/src/test/java/fr/bigeon/gclc/socket/TestServer.java
+++ b/gclc-socket/src/test/java/fr/bigeon/gclc/socket/TestServer.java
@@ -40,7 +40,7 @@ import java.nio.charset.Charset;
import fr.bigeon.gclc.ConsoleApplication;
/** A test server
- *
+ *
* @author Emmanuel Bigeon */
@SuppressWarnings({"javadoc", "nls"})
public class TestServer {
@@ -48,14 +48,9 @@ public class TestServer {
private static SocketConsoleApplicationShell SHELL;
private static Thread server;
- /** @param args no argument
- * @throws IOException if the server starting failed */
- public static void main(String... args) throws IOException {
- try {
- startServer(false).join();
- } catch (final InterruptedException e) {
- e.printStackTrace();
- }
+ public static void closeServer() {
+ SHELL.stop();
+ SHELL = null;
}
public static Thread getServer() throws IOException {
@@ -71,38 +66,43 @@ public class TestServer {
SHELL = new SocketConsoleApplicationShell(3300, "close",
ConsoleTestApplication.EXIT, Charset.forName("UTF-8"));
final ConsoleApplication app = ConsoleTestApplication
- .create(SHELL.getConsoleManager());
+ .create(SHELL.getOutput(), SHELL.getInput());
SHELL.setApplication(app);
}
return SHELL;
}
- public static Thread startServer(boolean autoClose) throws IOException {
+ /** @param args no argument
+ * @throws IOException if the server starting failed */
+ public static void main(final String... args) throws IOException {
+ try {
+ startServer(false).join();
+ } catch (final InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static Thread startServer(final boolean autoClose) throws IOException {
if (SHELL == null) {
SHELL = new SocketConsoleApplicationShell(3300, autoClose,
ConsoleTestApplication.EXIT, Charset.forName("UTF-8"));
final ConsoleApplication app = ConsoleTestApplication
- .create(SHELL.getConsoleManager());
+ .create(SHELL.getOutput(), SHELL.getInput());
SHELL.setApplication(app);
server = null;
}
return getServer();
}
- public static Thread startServer(String closeConnection) throws IOException {
+ public static Thread startServer(final String closeConnection) throws IOException {
if (SHELL == null) {
SHELL = new SocketConsoleApplicationShell(3300, closeConnection,
ConsoleTestApplication.EXIT, Charset.forName("UTF-8"));
final ConsoleApplication app = ConsoleTestApplication
- .create(SHELL.getConsoleManager());
+ .create(SHELL.getOutput(), SHELL.getInput());
SHELL.setApplication(app);
server = null;
}
return getServer();
}
-
- public static void closeServer() {
- SHELL.stop();
- SHELL = null;
- }
}
diff --git a/gclc-swt/pom.xml b/gclc-swt/pom.xml
index a84896a..7af6d6f 100644
--- a/gclc-swt/pom.xml
+++ b/gclc-swt/pom.xml
@@ -51,12 +51,12 @@
* * @author Emmanuel Bigeon */ public class SWTConsole extends Composite - implements ConsoleDelayIO, ConsoleManager { + implements ConsoleDelayIO, ConsoleInput, ConsoleOutput { /** * */ @@ -89,7 +90,7 @@ public class SWTConsole extends Composite * * @param parent the prent composite * @param style the composite style */ - public SWTConsole(Composite parent, int style) { + public SWTConsole(final Composite parent, final int style) { super(parent, style); setLayout(new GridLayout(LAYOUT_NB_COLUMNS, false)); @@ -110,47 +111,32 @@ public class SWTConsole extends Composite } - /** - * - */ - @Override - public void validateInput() { - Display.getDefault().syncExec(new Runnable() { - @SuppressWarnings("synthetic-access") - @Override - public void run() { - consoleInput.setEnabled(false); - } - }); - synchronized (promptLock) { - while (!prompting) { - try { - promptLock.wait(); - } catch (InterruptedException e) { - LOGGER.log(Level.SEVERE, - "Interruption while waiting prompt", e); //$NON-NLS-1$ - } - } - Display.getDefault().syncExec(new Runnable() { - @SuppressWarnings("synthetic-access") - @Override - public void run() { - command = consoleInput.getText(); - prompting = false; - consoleInput.setText(EMPTY); - consoleOutput.append( - CMD_PREFIX + command + System.lineSeparator()); - } - }); - promptLock.notifyAll(); - } - } - @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleManager#close() */ + @Override + public void close() { + synchronized (promptLock) { + promptLock.notify(); + } + if (consoleInput.isDisposed()) { + return; + } + consoleInput.setEnabled(false); + consoleOutput.setEnabled(false); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.swt.ConsoleDelayIO#getInput() */ + @Override + public String getInput() { + return consoleInput.getText(); + } + /* (non-Javadoc) * @see fr.bigeon.gclc.ConsoleManager#getPrompt() */ @Override @@ -158,6 +144,22 @@ public class SWTConsole extends Composite return prompt; } + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleManager#interruptPrompt() */ + @Override + public void interruptPrompt() { + synchronized (promptLock) { + promptLock.notify(); + } + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleManager#isClosed() */ + @Override + public boolean isClosed() { + return isDisposed(); + } + /* (non-Javadoc) * @see fr.bigeon.gclc.ConsoleManager#print(java.lang.String) */ @Override @@ -238,6 +240,16 @@ public class SWTConsole extends Composite return command; } + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(long) + */ + @Override + public String prompt(final long timeout) throws IOException { + // TODO Auto-generated method stub + // return null; + throw new RuntimeException("Not implemented yet"); + } + /* (non-Javadoc) * @see fr.bigeon.gclc.ConsoleManager#prompt(java.lang.String) */ @Override @@ -286,6 +298,16 @@ public class SWTConsole extends Composite return command; } + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(java.lang.String, long) + */ + @Override + public String prompt(final String message, final long timeout) throws IOException { + // TODO Auto-generated method stub + // return null; + throw new RuntimeException("Not implemented yet"); + } + /* (non-Javadoc) * @see org.eclipse.swt.widgets.Composite#setFocus() */ @Override @@ -293,6 +315,14 @@ public class SWTConsole extends Composite return consoleInput.setFocus(); } + /* (non-Javadoc) + * @see fr.bigeon.gclc.swt.ConsoleDelayIO#setInput(java.lang.String) */ + @Override + public void setInput(final String input) { + consoleInput.setText(input); + consoleInput.setSelection(input.length()); + } + /* (non-Javadoc) * @see fr.bigeon.gclc.ConsoleManager#setPrompt(java.lang.String) */ @Override @@ -311,60 +341,51 @@ public class SWTConsole extends Composite }); } - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleManager#close() */ - @Override - public void close() { - synchronized (promptLock) { - promptLock.notify(); - } - if (consoleInput.isDisposed()) { - return; - } - consoleInput.setEnabled(false); - consoleOutput.setEnabled(false); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleManager#isClosed() */ - @Override - public boolean isClosed() { - return isDisposed(); - } - /** @param string the text */ - public void setText(String string) { + public void setText(final String string) { consoleInput.setText(string); } /** - * + * */ public void validateCommand() { validateInput(); } - /* (non-Javadoc) - * @see fr.bigeon.gclc.swt.ConsoleDelayIO#setInput(java.lang.String) */ + /** + * + */ @Override - public void setInput(String input) { - consoleInput.setText(input); - consoleInput.setSelection(input.length()); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.swt.ConsoleDelayIO#getInput() */ - @Override - public String getInput() { - return consoleInput.getText(); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleManager#interruptPrompt() */ - @Override - public void interruptPrompt() { + public void validateInput() { + Display.getDefault().syncExec(new Runnable() { + @SuppressWarnings("synthetic-access") + @Override + public void run() { + consoleInput.setEnabled(false); + } + }); synchronized (promptLock) { - promptLock.notify(); + while (!prompting) { + try { + promptLock.wait(); + } catch (final InterruptedException e) { + LOGGER.log(Level.SEVERE, + "Interruption while waiting prompt", e); //$NON-NLS-1$ + } + } + Display.getDefault().syncExec(new Runnable() { + @SuppressWarnings("synthetic-access") + @Override + public void run() { + command = consoleInput.getText(); + prompting = false; + consoleInput.setText(EMPTY); + consoleOutput.append( + CMD_PREFIX + command + System.lineSeparator()); + } + }); + promptLock.notifyAll(); } } diff --git a/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleShell.java b/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleShell.java index e4f0d6f..a31e659 100644 --- a/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleShell.java +++ b/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleShell.java @@ -43,8 +43,6 @@ import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; -import fr.bigeon.gclc.manager.ConsoleManager; - /** A shell containing a {@link SWTConsole} *
* @@ -57,7 +55,7 @@ public class SWTConsoleShell extends Shell { /** Create the shell. * * @param display the display */ - public SWTConsoleShell(Display display) { + public SWTConsoleShell(final Display display) { super(display, SWT.SHELL_TRIM); setLayout(new FillLayout(SWT.HORIZONTAL)); @@ -75,11 +73,6 @@ public class SWTConsoleShell extends Shell { setText("Console Application"); //$NON-NLS-1$ } - /** @return the console manager */ - public ConsoleManager getManager() { - return console; - } - /* (non-Javadoc) * @see org.eclipse.swt.widgets.Shell#dispose() */ @Override @@ -87,4 +80,9 @@ public class SWTConsoleShell extends Shell { super.dispose(); console.close(); } + + /** @return the input and output. */ + public SWTConsole getManager() { + return console; + } } diff --git a/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleView.java b/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleView.java index 38b6965..396c099 100644 --- a/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleView.java +++ b/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsoleView.java @@ -50,7 +50,8 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text; import fr.bigeon.gclc.ConsoleApplication; -import fr.bigeon.gclc.manager.PipedConsoleManager; +import fr.bigeon.gclc.manager.PipedConsoleInput; +import fr.bigeon.gclc.manager.PipedConsoleOutput; import fr.bigeon.gclc.tools.AOutputForwardRunnable; /** A SWT component to connect to gclc {@link ConsoleApplication} @@ -59,7 +60,7 @@ import fr.bigeon.gclc.tools.AOutputForwardRunnable; * @author Emmanuel Bigeon */ public class SWTConsoleView extends Composite implements ConsoleDelayIO { /** The local implementation of the forwarding runnable - * + * * @author Emmanuel Bigeon */ private final class ToSWTConsoleForwardRunnable extends AOutputForwardRunnable { @@ -67,12 +68,12 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { private boolean running = true; /** @param manager the manager */ - public ToSWTConsoleForwardRunnable(PipedConsoleManager manager) { + public ToSWTConsoleForwardRunnable(final PipedConsoleOutput manager) { super(manager); } @Override - protected void forwardLine(String m) { + protected void forwardLine(final String m) { appendConsoleOutput(m); } @@ -82,7 +83,7 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { } /** @param running the running to set */ - public void setRunning(boolean running) { + public void setRunning(final boolean running) { this.running = running; } } @@ -95,7 +96,8 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { /** The console input text field */ private final Text consoleInput; /** The actual manager */ - private PipedConsoleManager manager; + private PipedConsoleOutput manager; + private PipedConsoleInput input; /** The forwarding runnable */ private ToSWTConsoleForwardRunnable forward; @@ -103,7 +105,7 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { * * @param parent the prent composite * @param style the composite style */ - public SWTConsoleView(Composite parent, int style) { + public SWTConsoleView(final Composite parent, final int style) { super(parent, style); setLayout(new GridLayout(1, false)); @@ -120,17 +122,6 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { consoleInput.addKeyListener(new HistoryTextKeyListener(this)); } - /** @param manager the manager to set */ - public void setManager(PipedConsoleManager manager) { - this.manager = manager; - if (forward != null) { - forward.setRunning(false); - } - forward = new ToSWTConsoleForwardRunnable(manager); - Thread th = new Thread(forward, "gclcToSWT"); //$NON-NLS-1$ - th.start(); - } - /** @param next the next message */ protected void appendConsoleOutput(final String next) { Display.getDefault().syncExec(new Runnable() { @@ -142,23 +133,18 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { }); } - /** - * - */ - @Override - public void validateInput() { - try { - manager.type(getInput()); - } catch (IOException e) { - LOGGER.log(Level.SEVERE, "Unable to input value to console", e); //$NON-NLS-1$ - } - } - @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } + /* (non-Javadoc) + * @see fr.bigeon.gclc.swt.ConsoleDelayIO#getInput() */ + @Override + public String getInput() { + return consoleInput.getText(); + } + /* (non-Javadoc) * @see org.eclipse.swt.widgets.Composite#setFocus() */ @Override @@ -166,23 +152,41 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO { return consoleInput.setFocus(); } - /** @param string the text */ - public void setText(String string) { - consoleInput.setText(string); - } - /* (non-Javadoc) * @see fr.bigeon.gclc.swt.ConsoleDelayIO#setInput(java.lang.String) */ @Override - public void setInput(String input) { + public void setInput(final String input) { consoleInput.setText(input); consoleInput.setSelection(input.length()); } - /* (non-Javadoc) - * @see fr.bigeon.gclc.swt.ConsoleDelayIO#getInput() */ + /** @param manager the manager to set */ + public void setManager(final PipedConsoleOutput manager, + final PipedConsoleInput input) { + this.manager = manager; + this.input = input; + if (forward != null) { + forward.setRunning(false); + } + forward = new ToSWTConsoleForwardRunnable(manager); + final Thread th = new Thread(forward, "gclcToSWT"); //$NON-NLS-1$ + th.start(); + } + + /** @param string the text */ + public void setText(final String string) { + consoleInput.setText(string); + } + + /** + * + */ @Override - public String getInput() { - return consoleInput.getText(); + public void validateInput() { + try { + input.type(getInput()); + } catch (final IOException e) { + LOGGER.log(Level.SEVERE, "Unable to input value to console", e); //$NON-NLS-1$ + } } } diff --git a/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleShellTest.java b/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleShellTest.java index d690510..1a3d80c 100644 --- a/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleShellTest.java +++ b/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleShellTest.java @@ -53,8 +53,11 @@ import fr.bigeon.gclc.command.Command; import fr.bigeon.gclc.command.ExitCommand; import fr.bigeon.gclc.exception.CommandRunException; import fr.bigeon.gclc.exception.InvalidCommandName; +import fr.bigeon.gclc.manager.ConsoleInput; +import fr.bigeon.gclc.manager.ConsoleOutput; -/**
+/** + *
* TODO * * @author Emmanuel Bigeon */ @@ -65,64 +68,192 @@ public class SWTConsoleShellTest { private static final Display DISPLAY = Display.getDefault(); @Test - public void testConsoleClose() { + public void test() { final SWTConsoleShell shell = new SWTConsoleShell(DISPLAY); - final SWTConsole swtConsole = (SWTConsole) shell.getManager(); - swtConsole.close(); - swtConsole.setPrompt(":"); + final SWTConsole swtConsole = shell.getManager(); try { final ConsoleApplication appl = new ConsoleApplication(swtConsole, - "Hello", "See you"); + swtConsole, "Hello", "See you"); appl.add(new ExitCommand("exit", appl)); appl.add(new Command("long") { + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc. + * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public void execute(final ConsoleOutput out, + final ConsoleInput in, + final String... args) throws CommandRunException { + try { + Thread.sleep(TWO_SECONDS); + } catch (final InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + @Override public String tip() { return "a long running command"; } + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ @Override - public void execute(String... args) { - try { - Thread.sleep(TWO_SECONDS); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - }); - appl.add(new Command("test") { - - @Override - public String tip() { - return "a prompting running command"; - } - - @Override - public void execute(String... args) throws CommandRunException { - try { - appl.getManager().prompt("Test"); - } catch (IOException e) { - throw new CommandRunException("No input", e, this); - } + protected String usageDetail() { + // TODO Auto-generated method stub + // return null; + throw new RuntimeException("Not implemented yet"); } }); // shell.pack(); shell.open(); - Thread applThread = new Thread(new Runnable() { + final Thread applThread = new Thread(new Runnable() { @Override public void run() { appl.start(); } }); - Thread testThread = new Thread(new Runnable() { + final Thread testThread = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(TWO_SECONDS); - } catch (InterruptedException e) { + } catch (final InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + swtConsole.setText("test"); //$NON-NLS-1$ + swtConsole.validateCommand(); + } + }); + try { + Thread.sleep(TWO_SECONDS); + } catch (final InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + shell.dispose(); + } + }); + } + }); + applThread.start(); + testThread.start(); + while (!shell.isDisposed()) { + if (!DISPLAY.readAndDispatch()) { + DISPLAY.sleep(); + } + } +// DISPLAY.dispose(); + assertTrue(swtConsole.isClosed()); + Thread.sleep(TWO_SECONDS); + assertFalse(appl.isRunning()); + } catch (final InvalidCommandName e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (final InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Test + public void testConsoleClose() { + final SWTConsoleShell shell = new SWTConsoleShell(DISPLAY); + final SWTConsole swtConsole = shell.getManager(); + swtConsole.close(); + swtConsole.setPrompt(":"); + try { + final ConsoleApplication appl = new ConsoleApplication(swtConsole, + swtConsole, "Hello", "See you"); + appl.add(new ExitCommand("exit", appl)); + appl.add(new Command("long") { + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc. + * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public void execute(final ConsoleOutput out, + final ConsoleInput in, + final String... args) throws CommandRunException { + try { + Thread.sleep(TWO_SECONDS); + } catch (final InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public String tip() { + return "a long running command"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + // TODO Auto-generated method stub + // return null; + throw new RuntimeException("Not implemented yet"); + } + }); + appl.add(new Command("test") { + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc. + * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public void execute(final ConsoleOutput out, + final ConsoleInput in, + final String... args) throws CommandRunException { + try { + swtConsole.prompt("Test"); + } catch (final IOException e) { + throw new CommandRunException("No input", e, this); + } + } + + @Override + public String tip() { + return "a prompting running command"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + // TODO Auto-generated method stub + // return null; + throw new RuntimeException("Not implemented yet"); + } + }); +// shell.pack(); + shell.open(); + final Thread applThread = new Thread(new Runnable() { + + @Override + public void run() { + appl.start(); + } + }); + final Thread testThread = new Thread(new Runnable() { + + @Override + public void run() { + try { + Thread.sleep(TWO_SECONDS); + } catch (final InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -163,7 +294,7 @@ public class SWTConsoleShellTest { swtConsole.validateCommand(); try { Thread.sleep(TWO_SECONDS); - } catch (InterruptedException e) { + } catch (final InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -187,102 +318,17 @@ public class SWTConsoleShellTest { try { swtConsole.prompt(); fail("Prompting when closed should fail!"); - } catch (IOException e) { + } catch (final IOException e) { assertNotNull(e); } // DISPLAY.dispose(); - assertTrue(appl.getManager().isClosed()); + assertTrue(swtConsole.isClosed()); Thread.sleep(TWO_SECONDS); assertFalse(appl.isRunning()); - } catch (InvalidCommandName e) { + } catch (final InvalidCommandName e) { // TODO Auto-generated catch block e.printStackTrace(); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Test - public void test() { - final SWTConsoleShell shell = new SWTConsoleShell(DISPLAY); - final SWTConsole swtConsole = (SWTConsole) shell.getManager(); - try { - final ConsoleApplication appl = new ConsoleApplication(swtConsole, - "Hello", "See you"); - appl.add(new ExitCommand("exit", appl)); - appl.add(new Command("long") { - - @Override - public String tip() { - return "a long running command"; - } - - @Override - public void execute(String... args) { - try { - Thread.sleep(TWO_SECONDS); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - }); -// shell.pack(); - shell.open(); - Thread applThread = new Thread(new Runnable() { - - @Override - public void run() { - appl.start(); - } - }); - Thread testThread = new Thread(new Runnable() { - - @Override - public void run() { - try { - Thread.sleep(TWO_SECONDS); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - swtConsole.setText("test"); //$NON-NLS-1$ - swtConsole.validateCommand(); - } - }); - try { - Thread.sleep(TWO_SECONDS); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - shell.dispose(); - } - }); - } - }); - applThread.start(); - testThread.start(); - while (!shell.isDisposed()) { - if (!DISPLAY.readAndDispatch()) { - DISPLAY.sleep(); - } - } -// DISPLAY.dispose(); - assertTrue(appl.getManager().isClosed()); - Thread.sleep(TWO_SECONDS); - assertFalse(appl.isRunning()); - } catch (InvalidCommandName e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InterruptedException e) { + } catch (final InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } diff --git a/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleViewTest.java b/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleViewTest.java index 9a2b50b..b12cd0c 100644 --- a/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleViewTest.java +++ b/gclc-swt/src/test/java/fr/bigeon/gclc/swt/SWTConsoleViewTest.java @@ -50,8 +50,12 @@ import org.junit.Test; import fr.bigeon.gclc.ConsoleApplication; import fr.bigeon.gclc.command.Command; import fr.bigeon.gclc.command.ExitCommand; +import fr.bigeon.gclc.exception.CommandRunException; import fr.bigeon.gclc.exception.InvalidCommandName; -import fr.bigeon.gclc.manager.PipedConsoleManager; +import fr.bigeon.gclc.manager.ConsoleInput; +import fr.bigeon.gclc.manager.ConsoleOutput; +import fr.bigeon.gclc.manager.PipedConsoleInput; +import fr.bigeon.gclc.manager.PipedConsoleOutput; /**
* TODO
@@ -67,49 +71,65 @@ public class SWTConsoleViewTest {
public void test() {
final Shell shell = new Shell(DISPLAY);
final SWTConsoleView swtConsole = new SWTConsoleView(shell, SWT.NONE);
- try (PipedConsoleManager manager = new PipedConsoleManager()) {
- swtConsole.setManager(manager);
- } catch (IOException e2) {
+ try (PipedConsoleOutput manager = new PipedConsoleOutput();
+ PipedConsoleInput input = new PipedConsoleInput()) {
+ swtConsole.setManager(manager, input);
+ } catch (final IOException e2) {
assertNull(e2);
}
- try (PipedConsoleManager manager = new PipedConsoleManager()) {
- swtConsole.setManager(manager);
+ try (PipedConsoleOutput manager = new PipedConsoleOutput();
+ PipedConsoleInput input = new PipedConsoleInput()) {
+ swtConsole.setManager(manager, input);
final ConsoleApplication appl = new ConsoleApplication(manager,
+ input,
"Hello", "See you");
appl.add(new ExitCommand("exit", appl));
appl.add(new Command("long") {
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, java.lang.String[])
+ */
+ @Override
+ public void execute(final ConsoleOutput out, final ConsoleInput in,
+ final String... args) throws CommandRunException {
+ try {
+ Thread.sleep(TWO_SECONDS);
+ } catch (final InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
@Override
public String tip() {
return "a long running command";
}
+ /* (non-Javadoc)
+ * @see fr.bigeon.gclc.command.Command#usageDetail() */
@Override
- public void execute(String... args) {
- try {
- Thread.sleep(TWO_SECONDS);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ protected String usageDetail() {
+ // TODO Auto-generated method stub
+ // return null;
+ throw new RuntimeException("Not implemented yet");
}
});
// shell.pack();
shell.open();
- Thread applThread = new Thread(new Runnable() {
+ final Thread applThread = new Thread(new Runnable() {
@Override
public void run() {
appl.start();
}
});
- Thread testThread = new Thread(new Runnable() {
+ final Thread testThread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(TWO_SECONDS);
- } catch (InterruptedException e) {
+ } catch (final InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
@@ -122,7 +142,7 @@ public class SWTConsoleViewTest {
});
try {
Thread.sleep(TWO_SECONDS);
- } catch (InterruptedException e) {
+ } catch (final InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
@@ -141,10 +161,10 @@ public class SWTConsoleViewTest {
DISPLAY.sleep();
}
}
- } catch (InvalidCommandName e) {
+ } catch (final InvalidCommandName e) {
// TODO Auto-generated catch block
e.printStackTrace();
- } catch (IOException e1) {
+ } catch (final IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
diff --git a/gclc.system/pom.xml b/gclc.system/pom.xml
index f8656c8..84eb566 100644
--- a/gclc.system/pom.xml
+++ b/gclc.system/pom.xml
@@ -23,7 +23,7 @@