Index: lutinutil/src/java/org/codelutin/option/OptionParser.java
diff -u lutinutil/src/java/org/codelutin/option/OptionParser.java:1.2 lutinutil/src/java/org/codelutin/option/OptionParser.java:1.3
--- lutinutil/src/java/org/codelutin/option/OptionParser.java:1.2 Sun Dec 30 23:42:59 2007
+++ lutinutil/src/java/org/codelutin/option/OptionParser.java Mon Dec 31 05:29:01 2007
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import static org.codelutin.i18n.I18n._;
+import org.codelutin.option.OptionParserContexts.OptionContext;
import org.codelutin.option.OptionParserContexts.ParserContext;
import org.codelutin.option.def.OptionDefinition;
import org.codelutin.option.def.OptionDefinitionBuilder;
@@ -51,9 +52,16 @@
* Si on veut utiliser les actions des options (OptionAction), il faut avant
* tout parsing, enregistrer les classes concretes d'implantation de ces actions.
*
- * Cela se fait en utilisant la méthode {@link #registerActions(Class[])}, les
+ * Cela se fait en utilisant la méthode {@link #registerActions(Class)}, les
* implantations doivent être présentes en tant qu'inner class d'une ou plusieurs
* classes container.
+ *
+ * Le fonctionnement est identique pour les config (celles générées sont abstraites),
+ * on doit enregistre des implantation concretes par l'intermédiaire de la méthode
+ * {@link #registerConfigs(Class[])}.
+ *
+ * Attention, contrairement aux actions, ici les classes de Config ne sont
+ * pas des inner-classes.
*/
public abstract class OptionParser {
@@ -62,7 +70,7 @@
protected final Log log = LogFactory.getLog(getClass());
/**
- * Cette méthode encapsule l'appel à la méthode statique buildDefinition
+ * Cette méthode encapsule l'appel à la méthode statique buildDefinitions
* générée dans le parseur de classe targetClass et retourne
* les définitions d'options obtenues par le builder utilisé.
*
@@ -94,11 +102,6 @@
/** les clefs d'options connues par le parseur */
protected final List configKeys;
- /** les options trouvées et valides, indexées par leur clef typée dans le dernier parsing */
- protected Map> options;
-
- protected Map configs;
-
/** les arguments non utilisés, indexés par leur position dans du dernier parsing */
protected Map unusedArguments;
@@ -114,21 +117,6 @@
}
/**
- * Enregistre les implantations d'action à partir de plusieurs classes
- * contenant des classes imbriquées d'implantation d'OptionAction.
- *
- * Cette méthode doit être invoquée avant toute demande d'OptionAction
- * après parsing.
- *
- * @param clazz la liste des classes contenant des implantations d'OptionAction
- */
- public void registerActions(Class... clazz) {
- for (Class aClass : clazz) {
- registerActions(aClass);
- }
- }
-
- /**
* Enregistre les implantations d'action à partir d'une classe contenant
* des classes imbriquées d'implantation d'OptionAction.
*
@@ -145,35 +133,16 @@
}
/**
- * Enregistre les implantations d'action à partir de plusieurs classes
- * contenant des classes imbriquées d'implantation d'OptionAction.
- *
- * Cette méthode doit être invoquée avant toute demande d'OptionAction
- * après parsing.
+ * Enregistre les implantations concretes des configs.
*
- * @param clazz la liste des classes contenant des implantations d'OptionAction
+ * @param clazz la liste des classes contenant des implantations de Config
*/
- public void registerConfigs(Class... clazz) {
- for (Class aClass : clazz) {
- registerConfigs(aClass);
+ public void registerConfigs(Class extends Config>... clazz) {
+ for (Class extends Config> aClass : clazz) {
+ registerConfig(aClass);
}
}
- /**
- * Enregistre les implantations de config à partir d'une classe contenant
- * des classes imbriquées d'implantation Config.
- *
- * @param clazz la classe contenant des implantations de Config
- */
- public void registerConfigs(Class clazz) {
- // recherche des inner classes
- Class>[] classes = clazz.getClasses();
- for (Class> aClass : classes) {
- if (Config.class.isAssignableFrom(aClass)) {
- registerConfig(aClass);
- }
- }
- }
public List getConfigKeys() {
return configKeys;
@@ -203,10 +172,12 @@
context.detectOptions(args);
// instanciate real options from safe contexts
- options = context.instanciate();
+ for (OptionContext optionContext : context.getContexts()) {
+ optionContext.instanciate();
+ }
// transfert unused arguments
- for (Integer unusedArgument : context.unusedArguments) {
+ for (Integer unusedArgument : context.getUnusedArguments()) {
unusedArguments.put(unusedArgument, args[unusedArgument]);
}
@@ -223,17 +194,15 @@
* parsing correspondant à la clef donnée.
*/
public boolean isOptionEnabled(OptionKey key) {
- List extends Option> list = options.get(key);
- return list != null && !list.isEmpty();
+ List list = key.getOptions();
+ return !list.isEmpty();
}
/** @return le nombre d'options valides trouvées lors du dernier parsing */
public int getNbOptions() {
int result = 0;
- if (options != null) {
- for (List