Index: lutinutil/src/java/org/codelutin/util/OptionParser.java diff -u lutinutil/src/java/org/codelutin/util/OptionParser.java:1.11 lutinutil/src/java/org/codelutin/util/OptionParser.java:1.12 --- lutinutil/src/java/org/codelutin/util/OptionParser.java:1.11 Sun Dec 16 01:01:49 2007 +++ lutinutil/src/java/org/codelutin/util/OptionParser.java Sun Dec 16 22:30:33 2007 @@ -33,9 +33,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeMap; /** @@ -76,7 +78,7 @@ public abstract class OptionParser { - public static final String APPLICATION_ARGUMENTS_FIELD_NAME = "applicationArguments"; + //public static final String APPLICATION_ARGUMENTS_FIELD_NAME = "applicationArguments"; /** logger non statique pour épouser la catégorie de l'implantation */ protected final LutinLog log = LutinLogFactory.getLutinLog(getClass()); @@ -90,11 +92,20 @@ /** le dictionnaire des definitions d'options indexées par leurs alias */ protected final Map indexAlias; + /** order on options by their names */ + protected final List definitionsIndex; + /** la liste des options trouvées et valides, indexées par leur clef unique. */ - protected final Map> acceptedOptions; + protected Map> acceptedOptions; + + /** la liste des arugments non utilisés, indexés par leur position */ + protected Map unusedArguments; /** list of errors found while parsing */ - protected OptionParserException[] _errors; + protected OptionParserException[] errors; + + /** la liste des arguments utilisés dans le dernier parsing */ + protected String[] arguments; public OptionParser() throws IllegalArgumentException { this(null); @@ -103,14 +114,15 @@ protected OptionParser(ApplicationA anno) throws IllegalArgumentException { // find ApplicationA annotation associated with parser if (anno == null) { + // try to find annotation on the implemented class anno = getClass().getAnnotation(ApplicationA.class); if (anno == null) { throw new IllegalArgumentException(_("lutinutil.parser.unfound.annotation", ApplicationA.class, this)); } } this.annotation = anno; - this.acceptedOptions = new HashMap>(); this.definitions = new LinkedHashMap(); + this.definitionsIndex = new ArrayList(); this.indexAlias = new TreeMap(); if (anno.options().length > 0) { @@ -119,7 +131,7 @@ // build each definition from his associated OptionA OptionDefinition definition = new OptionDefinition(optionA); definitions.put(optionA.key(), definition); - acceptedOptions.put(optionA.key(), new ArrayList