diff --git a/gclc/src/main/java/fr/bigeon/gclc/ApplicationAttachement.java b/gclc/src/main/java/fr/bigeon/gclc/ApplicationAttachement.java
new file mode 100644
index 0000000..89b3810
--- /dev/null
+++ b/gclc/src/main/java/fr/bigeon/gclc/ApplicationAttachement.java
@@ -0,0 +1,28 @@
+/**
+ * gclc:fr.bigeon.gclc.ApplicationAttachement.java
+ * Created on: Apr 19, 2017
+ */
+package fr.bigeon.gclc;
+
+import fr.bigeon.gclc.exception.InvalidCommandName;
+
+/**
+ *
+ * TODO
+ *
+ * @author Emmanuel Bigeon
+ *
+ */
+public interface ApplicationAttachement {
+ /** Attach this object to a console application.
+ *
+ * The attaching usually consist in the addition of commands in the console
+ * application. The attached command should be specific to the attachement
+ * (typically, the generic help command or the script command should not be
+ * added through this mechanism).
+ *
+ * @param application the application
+ * @throws InvalidCommandName if a command name is invalid for the
+ * application. */
+ void attach(ConsoleApplication application) throws InvalidCommandName;
+}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java b/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java
index 06348fb..dc17157 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java
@@ -73,19 +73,19 @@ import fr.bigeon.gclc.manager.ConsoleManager;
* start method.
*
* @author Emmanuel BIGEON */
-public class ConsoleApplication implements ICommandProvider {
+public final class ConsoleApplication implements ICommandProvider {
/** The class logger */
private static final Logger LOGGER = Logger
.getLogger(ConsoleApplication.class.getName());
/** The welcome message */
- private final String header;
+ public final String header;
/** The good bye message */
- private final String footer;
+ public final String footer;
/** The console manager */
- protected final ConsoleManager manager;
+ public final ConsoleManager manager;
/** The container of commands */
- private final SubedCommand root;
+ public final SubedCommand root;
/** The state of this application */
private boolean running;
/** The listeners */
@@ -135,11 +135,6 @@ public class ConsoleApplication implements ICommandProvider {
return root.get(command);
}
- /** @return the manager */
- public final ConsoleManager getManager() {
- return manager;
- }
-
/** @param cmd the command
* @throws IOException if the command could not be parsed */
public final void interpretCommand(String cmd) throws IOException {
@@ -161,7 +156,7 @@ public class ConsoleApplication implements ICommandProvider {
.getString("ConsoleApplication.cmd.failed", cmd)); //$NON-NLS-1$
manager.println(e.getLocalizedMessage());
if (e.getType() == CommandRunExceptionType.USAGE) {
- e.getSource().help(getManager());
+ e.getSource().help(manager);
}
}
}
@@ -247,19 +242,4 @@ public class ConsoleApplication implements ICommandProvider {
public boolean isRunning() {
return running;
}
-
- /** @return the root */
- public SubedCommand getRoot() {
- return root;
- }
-
- /** @return the header */
- public String getHeader() {
- return header;
- }
-
- /** @return the footer */
- public String getFooter() {
- return footer;
- }
}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/command/CommandParameters.java b/gclc/src/main/java/fr/bigeon/gclc/command/CommandParameters.java
index 66764d7..bad2c57 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/command/CommandParameters.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/command/CommandParameters.java
@@ -184,4 +184,11 @@ public class CommandParameters {
public Set getStringArgumentKeys() {
return stringArguments.keySet();
}
+
+ /** @param key the key
+ * @return if the key is present in string arguments or boolean ones. */
+ public boolean hasArgument(String key) {
+ return stringArguments.containsKey(key) ||
+ booleanArguments.containsKey(key);
+ }
}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/command/ParametrizedCommand.java b/gclc/src/main/java/fr/bigeon/gclc/command/ParametrizedCommand.java
index 787c507..c50b3d5 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/command/ParametrizedCommand.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/command/ParametrizedCommand.java
@@ -247,9 +247,10 @@ public abstract class ParametrizedCommand extends Command {
for (final String string : toProvide) {
String value;
try {
- value = manager.prompt(string);
+ value = manager.prompt("value of " + string + "? ");
while (value.isEmpty()) {
- value = manager.prompt(string);
+ value = manager.prompt(
+ "value of " + string + "? (cannot be empty) ");
}
} catch (IOException e) {
throw new CommandRunException(
diff --git a/gclc/src/test/java/fr/bigeon/gclc/CommandTestingApplication.java b/gclc/src/test/java/fr/bigeon/gclc/CommandTestingApplication.java
index d832bd3..3364594 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/CommandTestingApplication.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/CommandTestingApplication.java
@@ -54,14 +54,15 @@ import fr.bigeon.gclc.manager.PipedConsoleManager;
@SuppressWarnings("javadoc")
public class CommandTestingApplication implements AutoCloseable {
- private final ConsoleTestApplication application;
+ private final ConsoleApplication application;
private final Thread th;
private final PipedConsoleManager manager;
/** @throws IOException if the streams cannot be build */
public CommandTestingApplication() throws IOException {
manager = new PipedConsoleManager();
- application = new ConsoleTestApplication(manager);
+ application = new ConsoleApplication(manager, "", "");
+ new ConsoleTestApplication().attach(application);
th = new Thread(new Runnable() {
@SuppressWarnings("synthetic-access")
@@ -93,7 +94,7 @@ public class CommandTestingApplication implements AutoCloseable {
}
/** @return the application */
- public ConsoleTestApplication getApplication() {
+ public ConsoleApplication getApplication() {
return application;
}
diff --git a/gclc/src/test/java/fr/bigeon/gclc/ConsoleApplicationTest.java b/gclc/src/test/java/fr/bigeon/gclc/ConsoleApplicationTest.java
index 5c8c03c..e9b59b9 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/ConsoleApplicationTest.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/ConsoleApplicationTest.java
@@ -72,7 +72,7 @@ public class ConsoleApplicationTest {
public void test() {
try (PipedConsoleManager manager = new PipedConsoleManager()) {
- ConsoleTestApplication app = new ConsoleTestApplication(manager);
+ ConsoleApplication app = new ConsoleApplication(manager, "", "");
app.exit();
} catch (IOException e) {
fail("System Console Manager failed");
@@ -85,7 +85,7 @@ public class ConsoleApplicationTest {
try (CommandTestingApplication application = new CommandTestingApplication()) {
// remove welcome
- assertEquals(application.getApplication().getHeader(),
+ assertEquals(application.getApplication().header,
application.readNextLine());
// Remove first prompt
assertNull(application.readNextLine());
@@ -133,7 +133,7 @@ public class ConsoleApplicationTest {
assertNull(application.readNextLine());
application.sendCommand("exit");
- assertEquals(application.getApplication().getFooter(),
+ assertEquals(application.getApplication().footer,
application.readNextLine());
assertFalse(application.getApplication().isRunning());
} catch (IOException e1) {
diff --git a/gclc/src/test/java/fr/bigeon/gclc/ConsoleTestApplication.java b/gclc/src/test/java/fr/bigeon/gclc/ConsoleTestApplication.java
index e157960..689611b 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/ConsoleTestApplication.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/ConsoleTestApplication.java
@@ -41,12 +41,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;
/** A test-purpose application
*
* @author Emmanuel Bigeon */
-public class ConsoleTestApplication extends ConsoleApplication {
+public class ConsoleTestApplication implements ApplicationAttachement {
/** Exit command */
public static final String EXIT = "exit"; //$NON-NLS-1$
@@ -54,14 +53,14 @@ public class ConsoleTestApplication extends ConsoleApplication {
protected static final long TWO_SECONDS = 2000;
/** @param manager the manager */
+ @Override
@SuppressWarnings("nls")
- public ConsoleTestApplication(final ConsoleManager manager) {
- super(manager, "Welcome to the test application. Type help or test.",
- "See you");
+ public void attach(final ConsoleApplication application) {
try {
- add(new ExitCommand(EXIT, this));
- add(new HelpExecutor("help", manager, this.getRoot()));
- add(new Command("test") {
+ application.add(new ExitCommand(EXIT, application));
+ application.add(new HelpExecutor("help", application.manager,
+ application.root));
+ application.add(new Command("test") {
@Override
public String tip() {
@@ -71,14 +70,14 @@ public class ConsoleTestApplication extends ConsoleApplication {
@Override
public void execute(String... args) throws CommandRunException {
try {
- manager.println("Test command ran fine");
+ application.manager.println("Test command ran fine");
} catch (IOException e) {
throw new CommandRunException("manager closed", e,
this);
}
}
});
- add(new Command("long") {
+ application.add(new Command("long") {
@Override
public String tip() {
@@ -88,9 +87,9 @@ public class ConsoleTestApplication extends ConsoleApplication {
@Override
public void execute(String... args) throws CommandRunException {
try {
- manager.println("Waita minute");
+ application.manager.println("Waita minute");
Thread.sleep(TWO_SECONDS);
- manager.println("done!");
+ application.manager.println("done!");
} catch (IOException e) {
throw new CommandRunException("manager closed", e,
this);
@@ -100,7 +99,7 @@ public class ConsoleTestApplication extends ConsoleApplication {
}
}
});
- add(new Command("failingCmd") {
+ application.add(new Command("failingCmd") {
@Override
public String tip() {
diff --git a/gclc/src/test/java/fr/bigeon/gclc/command/ParametrizedCommandTest.java b/gclc/src/test/java/fr/bigeon/gclc/command/ParametrizedCommandTest.java
index d7847e1..e949147 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/command/ParametrizedCommandTest.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/command/ParametrizedCommandTest.java
@@ -578,9 +578,16 @@ public class ParametrizedCommandTest {
@Override
public void run() {
try {
- assertEquals(str1, test.readNextLine());
+ assertEquals("value of " + str1 + "? ",
+ test.readNextLine());
test.type("");
- assertEquals(str1, test.readNextLine());
+ assertEquals(
+ "value of " + str1 + "? (cannot be empty) ",
+ test.readNextLine());
+ test.type("");
+ assertEquals(
+ "value of " + str1 + "? (cannot be empty) ",
+ test.readNextLine());
test.type(str2);
} catch (IOException e) {
assertNull(e);
@@ -598,7 +605,8 @@ public class ParametrizedCommandTest {
@Override
public void run() {
try {
- assertEquals(str1, test.readNextLine());
+ assertEquals("value of " + str1 + "? ",
+ test.readNextLine());
test.type(str2);
} catch (IOException e) {
assertNull(e);
diff --git a/gclc/src/test/java/fr/bigeon/gclc/command/ScriptExecutionTest.java b/gclc/src/test/java/fr/bigeon/gclc/command/ScriptExecutionTest.java
index 5074197..19c7216 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/command/ScriptExecutionTest.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/command/ScriptExecutionTest.java
@@ -47,6 +47,7 @@ import java.nio.charset.Charset;
import org.junit.Test;
+import fr.bigeon.gclc.ConsoleApplication;
import fr.bigeon.gclc.ConsoleTestApplication;
import fr.bigeon.gclc.exception.CommandRunException;
import fr.bigeon.gclc.exception.CommandRunExceptionType;
@@ -75,8 +76,9 @@ public class ScriptExecutionTest {
assertNotNull(e2);
return;
}
- ConsoleTestApplication app = new ConsoleTestApplication(
- test);
+ ConsoleApplication app = new ConsoleApplication(
+ test, "", "");
+ new ConsoleTestApplication().attach(app);
ScriptExecution exec = new ScriptExecution("script", app, "#", //$NON-NLS-1$ //$NON-NLS-2$
Charset.forName("UTF-8"));
try {