diff --git a/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java b/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java
index 638e5cd..0c00335 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/ConsoleApplication.java
@@ -148,7 +148,7 @@ public class ConsoleApplication implements ICommandProvider {
args = GCLCConstants.splitCommand(cmd);
} catch (CommandParsingException e1) {
manager.println("Command line cannot be parsed"); //$NON-NLS-1$
- LOGGER.log(Level.INFO, "Invalid user command " + cmd, e1); //$NON-NLS-1$
+ LOGGER.log(Level.FINE, "Invalid user command " + cmd, e1); //$NON-NLS-1$
return;
}
if (!args.isEmpty()) {
@@ -156,7 +156,7 @@ public class ConsoleApplication implements ICommandProvider {
executeSub(args.get(0), Arrays.copyOfRange(
args.toArray(new String[0]), 1, args.size()));
} catch (final CommandRunException e) {
- LOGGER.log(Level.WARNING, "Command failed: " + cmd, e); //$NON-NLS-1$
+ LOGGER.log(Level.FINE, "Command failed: " + cmd, e); //$NON-NLS-1$
manager.println(Messages
.getString("ConsoleApplication.cmd.failed", cmd)); //$NON-NLS-1$
manager.println(e.getLocalizedMessage());
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 d30f3d2..f2b9cec 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/command/CommandParameters.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/command/CommandParameters.java
@@ -45,6 +45,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import fr.bigeon.gclc.exception.CommandParsingException;
+
/**
* An object representing a collection of parameters. It is used for defaulting
* values.
@@ -98,8 +100,8 @@ public class CommandParameters {
}
/** @param args the arguments to parse
- * @return if the arguments were parsed */
- public boolean parseArgs(String... args) {
+ * @throws CommandParsingException if the arguments parsing failed */
+ public void parseArgs(String... args) throws CommandParsingException {
int i = 0;
while (i < args.length) {
String next = null;
@@ -108,11 +110,11 @@ public class CommandParameters {
}
int p = parseArg(args[i], next);
if (p == 0) {
- return false;
+ throw new CommandParsingException(
+ "Invalid parameter " + args[i]);
}
i += p;
}
- return true;
}
@@ -126,7 +128,7 @@ public class CommandParameters {
* @return the number of element read */
private int parseArg(String arg, String next) {
if (!arg.startsWith("-")) { //$NON-NLS-1$
- return 1;
+ return strict ? 0 : 1;
}
String name = arg.substring(1);
if (booleanArguments.containsKey(name)) {
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 4312dd1..2e96de7 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/command/ParametrizedCommand.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/command/ParametrizedCommand.java
@@ -48,6 +48,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import fr.bigeon.gclc.exception.CommandParsingException;
import fr.bigeon.gclc.exception.CommandRunException;
import fr.bigeon.gclc.exception.CommandRunExceptionType;
import fr.bigeon.gclc.exception.InvalidParameterException;
@@ -165,10 +166,11 @@ public abstract class ParametrizedCommand extends Command {
public final void execute(String... args) throws CommandRunException {
final CommandParameters parameters = new CommandParameters(
boolParams, stringParams.keySet(), strict);
- if (!parameters.parseArgs(args)) {
- // the parameters could not be correctly parsed
+ try {
+ parameters.parseArgs(args);
+ } catch (CommandParsingException e) {
throw new CommandRunException(CommandRunExceptionType.USAGE,
- "Unable to read arguments", this); //$NON-NLS-1$
+ "Unable to read arguments", e, this); //$NON-NLS-1$
}
final List toProvide = new ArrayList<>();
for (final Entry string : params.entrySet()) {
diff --git a/gclc/src/test/java/fr/bigeon/gclc/command/CommandParametersTest.java b/gclc/src/test/java/fr/bigeon/gclc/command/CommandParametersTest.java
index b60602d..4b08f11 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/command/CommandParametersTest.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/command/CommandParametersTest.java
@@ -40,45 +40,54 @@ package fr.bigeon.gclc.command;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
-/**
- *
+import fr.bigeon.gclc.exception.CommandParsingException;
+
+/**
* TODO
*
- * @author Emmanuel Bigeon
- *
- */
+ * @author Emmanuel Bigeon */
@SuppressWarnings({"static-method", "nls"})
public class CommandParametersTest {
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#CommandParameters(java.util.Set, java.util.Set, boolean)}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#CommandParameters(java.util.Set, java.util.Set, boolean)}. */
@Test
- public final void testCommandParameters(){
+ public final void testCommandParameters() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();
CommandParameters parameters = new CommandParameters(bools, strings,
true);
- assertFalse(parameters.parseArgs("-ungivenFlag"));
+ try {
+ parameters.parseArgs("-ungivenFlag");
+ fail("parse of unknown in strict should fail");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
parameters = new CommandParameters(bools, strings, false);
- assertTrue(parameters.parseArgs("-ungivenFlag"));
+ try {
+ parameters.parseArgs("-ungivenFlag");
+ } catch (CommandParsingException e) {
+ fail("parse of unknown in non strict should suceed");
+ assertNull(e);
+ }
}
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#get(java.lang.String)}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#get(java.lang.String)}. */
@Test
- public final void testGet(){
+ public final void testGet() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();
@@ -91,24 +100,35 @@ public class CommandParametersTest {
assertNull(parameters.get("ungiven"));
assertNull(parameters.get("str"));
- parameters.parseArgs("-ungiven", "val");
+ try {
+ parameters.parseArgs("-ungiven", "val");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
assertNull(parameters.get("ungiven"));
assertNull(parameters.get("str"));
- parameters.parseArgs("-str", "val");
+ try {
+ parameters.parseArgs("-str", "val");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
assertNull(parameters.get("ungiven"));
assertEquals("val", parameters.get("str"));
- parameters.parseArgs("-ungiven");
+ try {
+ parameters.parseArgs("-ungiven");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
assertNull(parameters.get("ungiven"));
assertEquals("val", parameters.get("str"));
}
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#getAdditionals()}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#getAdditionals()}. */
@Test
- public final void testGetAdditionals(){
+ public final void testGetAdditionals() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();
@@ -118,27 +138,42 @@ public class CommandParametersTest {
CommandParameters parameters = new CommandParameters(bools, strings,
true);
- parameters.parseArgs("-boolFlag");
+ try {
+ parameters.parseArgs("-boolFlag");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
assertTrue(parameters.getAdditionals().isEmpty());
- parameters.parseArgs("-ungiven");
+ try {
+ parameters.parseArgs("-ungiven");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
assertTrue(parameters.getAdditionals().isEmpty());
parameters = new CommandParameters(bools, strings, false);
- parameters.parseArgs("-boolFlag");
+ try {
+ parameters.parseArgs("-boolFlag");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
assertTrue(parameters.getAdditionals().isEmpty());
- parameters.parseArgs("-ungiven");
+ try {
+ parameters.parseArgs("-ungiven");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
assertTrue(parameters.getAdditionals().contains("ungiven"));
assertEquals(1, parameters.getAdditionals().size());
}
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#getBool(java.lang.String)}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#getBool(java.lang.String)}. */
@Test
- public final void testGetBool(){
+ public final void testGetBool() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();
@@ -151,11 +186,20 @@ public class CommandParametersTest {
assertFalse(parameters.getBool("ungiven"));
assertFalse(parameters.getBool("boolFlag"));
- parameters.parseArgs("-boolFlag");
+ try {
+ parameters.parseArgs("-boolFlag");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
assertTrue(parameters.getBool("boolFlag"));
assertFalse(parameters.getBool("ungiven"));
- parameters.parseArgs("-ungiven");
+ try {
+ parameters.parseArgs("-ungiven");
+ fail("unknown parameter should fail");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
assertFalse(parameters.getBool("ungiven"));
assertTrue(parameters.getBool("boolFlag"));
@@ -164,20 +208,27 @@ public class CommandParametersTest {
assertFalse(parameters.getBool("ungiven"));
assertFalse(parameters.getBool("boolFlag"));
- parameters.parseArgs("-boolFlag");
+ try {
+ parameters.parseArgs("-boolFlag");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
assertTrue(parameters.getBool("boolFlag"));
assertFalse(parameters.getBool("ungiven"));
- parameters.parseArgs("-ungiven");
+ try {
+ parameters.parseArgs("-ungiven");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
assertFalse(parameters.getBool("ungiven"));
assertTrue(parameters.getBool("boolFlag"));
}
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#parseArgs(java.lang.String[])}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#parseArgs(java.lang.String[])}. */
@Test
- public final void testParseArgs(){
+ public final void testParseArgs() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();
@@ -187,19 +238,40 @@ public class CommandParametersTest {
CommandParameters parameters = new CommandParameters(bools, strings,
true);
- assertFalse(parameters.parseArgs("-ungivenFlag"));
- assertFalse(parameters.parseArgs("-str"));
- assertTrue(parameters.parseArgs("-boolFlag"));
- assertTrue(parameters.parseArgs("-str", "-boolFlag"));
- assertTrue(parameters.parseArgs("-boolFlag", "-str", "val"));
+ try {
+ parameters.parseArgs("-ungivenFlag");
+ fail("unknown argument should fail in strict");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
+ try {
+ parameters.parseArgs("-str");
+ fail("missing string argument value should fail");
+ } catch (CommandParsingException e) {
+ assertNotNull(e);
+ }
+ try {
+ parameters.parseArgs("-boolFlag");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
+ try {
+ parameters.parseArgs("-str", "-boolFlag");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
+ try {
+ parameters.parseArgs("-boolFlag", "-str", "val");
+ } catch (CommandParsingException e) {
+ assertNull(e);
+ }
}
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#set(java.lang.String, boolean)}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#set(java.lang.String, boolean)}. */
@Test
- public final void testSetStringBoolean(){
+ public final void testSetStringBoolean() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();
@@ -234,11 +306,10 @@ public class CommandParametersTest {
assertTrue(parameters.getBool("boolFlag"));
}
- /**
- * Test method for {@link fr.bigeon.gclc.command.CommandParameters#set(java.lang.String, java.lang.String)}.
- */
+ /** Test method for
+ * {@link fr.bigeon.gclc.command.CommandParameters#set(java.lang.String, java.lang.String)}. */
@Test
- public final void testSetStringString(){
+ public final void testSetStringString() {
Set strings = new HashSet<>();
Set bools = new HashSet<>();