Adapted applications to make only attachement to the framework

Signed-off-by: Emmanuel Bigeon <emmanuel@bigeon.fr>
This commit is contained in:
Emmanuel Bigeon 2017-04-19 13:14:04 -04:00
parent ab47d6573b
commit 8322454f72
9 changed files with 78 additions and 52 deletions

View File

@ -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;
/**
* <p>
* TODO
*
* @author Emmanuel Bigeon
*
*/
public interface ApplicationAttachement {
/** Attach this object to a console application.
* <p>
* 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;
}

View File

@ -73,19 +73,19 @@ import fr.bigeon.gclc.manager.ConsoleManager;
* start method. * start method.
* *
* @author Emmanuel BIGEON */ * @author Emmanuel BIGEON */
public class ConsoleApplication implements ICommandProvider { public final class ConsoleApplication implements ICommandProvider {
/** The class logger */ /** The class logger */
private static final Logger LOGGER = Logger private static final Logger LOGGER = Logger
.getLogger(ConsoleApplication.class.getName()); .getLogger(ConsoleApplication.class.getName());
/** The welcome message */ /** The welcome message */
private final String header; public final String header;
/** The good bye message */ /** The good bye message */
private final String footer; public final String footer;
/** The console manager */ /** The console manager */
protected final ConsoleManager manager; public final ConsoleManager manager;
/** The container of commands */ /** The container of commands */
private final SubedCommand root; public final SubedCommand root;
/** The state of this application */ /** The state of this application */
private boolean running; private boolean running;
/** The listeners */ /** The listeners */
@ -135,11 +135,6 @@ public class ConsoleApplication implements ICommandProvider {
return root.get(command); return root.get(command);
} }
/** @return the manager */
public final ConsoleManager getManager() {
return manager;
}
/** @param cmd the command /** @param cmd the command
* @throws IOException if the command could not be parsed */ * @throws IOException if the command could not be parsed */
public final void interpretCommand(String cmd) throws IOException { 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$ .getString("ConsoleApplication.cmd.failed", cmd)); //$NON-NLS-1$
manager.println(e.getLocalizedMessage()); manager.println(e.getLocalizedMessage());
if (e.getType() == CommandRunExceptionType.USAGE) { 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() { public boolean isRunning() {
return running; 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;
}
} }

View File

@ -184,4 +184,11 @@ public class CommandParameters {
public Set<String> getStringArgumentKeys() { public Set<String> getStringArgumentKeys() {
return stringArguments.keySet(); 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);
}
} }

View File

@ -247,9 +247,10 @@ public abstract class ParametrizedCommand extends Command {
for (final String string : toProvide) { for (final String string : toProvide) {
String value; String value;
try { try {
value = manager.prompt(string); value = manager.prompt("value of " + string + "? ");
while (value.isEmpty()) { while (value.isEmpty()) {
value = manager.prompt(string); value = manager.prompt(
"value of " + string + "? (cannot be empty) ");
} }
} catch (IOException e) { } catch (IOException e) {
throw new CommandRunException( throw new CommandRunException(

View File

@ -54,14 +54,15 @@ import fr.bigeon.gclc.manager.PipedConsoleManager;
@SuppressWarnings("javadoc") @SuppressWarnings("javadoc")
public class CommandTestingApplication implements AutoCloseable { public class CommandTestingApplication implements AutoCloseable {
private final ConsoleTestApplication application; private final ConsoleApplication application;
private final Thread th; private final Thread th;
private final PipedConsoleManager manager; private final PipedConsoleManager manager;
/** @throws IOException if the streams cannot be build */ /** @throws IOException if the streams cannot be build */
public CommandTestingApplication() throws IOException { public CommandTestingApplication() throws IOException {
manager = new PipedConsoleManager(); manager = new PipedConsoleManager();
application = new ConsoleTestApplication(manager); application = new ConsoleApplication(manager, "", "");
new ConsoleTestApplication().attach(application);
th = new Thread(new Runnable() { th = new Thread(new Runnable() {
@SuppressWarnings("synthetic-access") @SuppressWarnings("synthetic-access")
@ -93,7 +94,7 @@ public class CommandTestingApplication implements AutoCloseable {
} }
/** @return the application */ /** @return the application */
public ConsoleTestApplication getApplication() { public ConsoleApplication getApplication() {
return application; return application;
} }

View File

@ -72,7 +72,7 @@ public class ConsoleApplicationTest {
public void test() { public void test() {
try (PipedConsoleManager manager = new PipedConsoleManager()) { try (PipedConsoleManager manager = new PipedConsoleManager()) {
ConsoleTestApplication app = new ConsoleTestApplication(manager); ConsoleApplication app = new ConsoleApplication(manager, "", "");
app.exit(); app.exit();
} catch (IOException e) { } catch (IOException e) {
fail("System Console Manager failed"); fail("System Console Manager failed");
@ -85,7 +85,7 @@ public class ConsoleApplicationTest {
try (CommandTestingApplication application = new CommandTestingApplication()) { try (CommandTestingApplication application = new CommandTestingApplication()) {
// remove welcome // remove welcome
assertEquals(application.getApplication().getHeader(), assertEquals(application.getApplication().header,
application.readNextLine()); application.readNextLine());
// Remove first prompt // Remove first prompt
assertNull(application.readNextLine()); assertNull(application.readNextLine());
@ -133,7 +133,7 @@ public class ConsoleApplicationTest {
assertNull(application.readNextLine()); assertNull(application.readNextLine());
application.sendCommand("exit"); application.sendCommand("exit");
assertEquals(application.getApplication().getFooter(), assertEquals(application.getApplication().footer,
application.readNextLine()); application.readNextLine());
assertFalse(application.getApplication().isRunning()); assertFalse(application.getApplication().isRunning());
} catch (IOException e1) { } catch (IOException e1) {

View File

@ -41,12 +41,11 @@ import fr.bigeon.gclc.command.ExitCommand;
import fr.bigeon.gclc.command.HelpExecutor; import fr.bigeon.gclc.command.HelpExecutor;
import fr.bigeon.gclc.exception.CommandRunException; import fr.bigeon.gclc.exception.CommandRunException;
import fr.bigeon.gclc.exception.InvalidCommandName; import fr.bigeon.gclc.exception.InvalidCommandName;
import fr.bigeon.gclc.manager.ConsoleManager;
/** A test-purpose application /** A test-purpose application
* *
* @author Emmanuel Bigeon */ * @author Emmanuel Bigeon */
public class ConsoleTestApplication extends ConsoleApplication { public class ConsoleTestApplication implements ApplicationAttachement {
/** Exit command */ /** Exit command */
public static final String EXIT = "exit"; //$NON-NLS-1$ 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; protected static final long TWO_SECONDS = 2000;
/** @param manager the manager */ /** @param manager the manager */
@Override
@SuppressWarnings("nls") @SuppressWarnings("nls")
public ConsoleTestApplication(final ConsoleManager manager) { public void attach(final ConsoleApplication application) {
super(manager, "Welcome to the test application. Type help or test.",
"See you");
try { try {
add(new ExitCommand(EXIT, this)); application.add(new ExitCommand(EXIT, application));
add(new HelpExecutor("help", manager, this.getRoot())); application.add(new HelpExecutor("help", application.manager,
add(new Command("test") { application.root));
application.add(new Command("test") {
@Override @Override
public String tip() { public String tip() {
@ -71,14 +70,14 @@ public class ConsoleTestApplication extends ConsoleApplication {
@Override @Override
public void execute(String... args) throws CommandRunException { public void execute(String... args) throws CommandRunException {
try { try {
manager.println("Test command ran fine"); application.manager.println("Test command ran fine");
} catch (IOException e) { } catch (IOException e) {
throw new CommandRunException("manager closed", e, throw new CommandRunException("manager closed", e,
this); this);
} }
} }
}); });
add(new Command("long") { application.add(new Command("long") {
@Override @Override
public String tip() { public String tip() {
@ -88,9 +87,9 @@ public class ConsoleTestApplication extends ConsoleApplication {
@Override @Override
public void execute(String... args) throws CommandRunException { public void execute(String... args) throws CommandRunException {
try { try {
manager.println("Waita minute"); application.manager.println("Waita minute");
Thread.sleep(TWO_SECONDS); Thread.sleep(TWO_SECONDS);
manager.println("done!"); application.manager.println("done!");
} catch (IOException e) { } catch (IOException e) {
throw new CommandRunException("manager closed", e, throw new CommandRunException("manager closed", e,
this); this);
@ -100,7 +99,7 @@ public class ConsoleTestApplication extends ConsoleApplication {
} }
} }
}); });
add(new Command("failingCmd") { application.add(new Command("failingCmd") {
@Override @Override
public String tip() { public String tip() {

View File

@ -578,9 +578,16 @@ public class ParametrizedCommandTest {
@Override @Override
public void run() { public void run() {
try { try {
assertEquals(str1, test.readNextLine()); assertEquals("value of " + str1 + "? ",
test.readNextLine());
test.type(""); 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); test.type(str2);
} catch (IOException e) { } catch (IOException e) {
assertNull(e); assertNull(e);
@ -598,7 +605,8 @@ public class ParametrizedCommandTest {
@Override @Override
public void run() { public void run() {
try { try {
assertEquals(str1, test.readNextLine()); assertEquals("value of " + str1 + "? ",
test.readNextLine());
test.type(str2); test.type(str2);
} catch (IOException e) { } catch (IOException e) {
assertNull(e); assertNull(e);

View File

@ -47,6 +47,7 @@ import java.nio.charset.Charset;
import org.junit.Test; import org.junit.Test;
import fr.bigeon.gclc.ConsoleApplication;
import fr.bigeon.gclc.ConsoleTestApplication; import fr.bigeon.gclc.ConsoleTestApplication;
import fr.bigeon.gclc.exception.CommandRunException; import fr.bigeon.gclc.exception.CommandRunException;
import fr.bigeon.gclc.exception.CommandRunExceptionType; import fr.bigeon.gclc.exception.CommandRunExceptionType;
@ -75,8 +76,9 @@ public class ScriptExecutionTest {
assertNotNull(e2); assertNotNull(e2);
return; return;
} }
ConsoleTestApplication app = new ConsoleTestApplication( ConsoleApplication app = new ConsoleApplication(
test); test, "", "");
new ConsoleTestApplication().attach(app);
ScriptExecution exec = new ScriptExecution("script", app, "#", //$NON-NLS-1$ //$NON-NLS-2$ ScriptExecution exec = new ScriptExecution("script", app, "#", //$NON-NLS-1$ //$NON-NLS-2$
Charset.forName("UTF-8")); Charset.forName("UTF-8"));
try { try {