Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java:1.7 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java:1.8 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java:1.7 Sat Mar 15 03:26:27 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java Sun Mar 16 07:02:25 2008 @@ -22,11 +22,17 @@ import org.codelutin.i18n.I18n; import org.codelutin.option.ConfigKey; import org.codelutin.option.OptionParser; -import org.codelutin.option.def.*; +import org.codelutin.option.def.ArgumentType; +import org.codelutin.option.def.ArgumentValueType; +import org.codelutin.option.def.DefaultOption; +import org.codelutin.option.def.DefinitionParser; import org.codelutin.option.def.DefinitionParserContexts.ArgumentContext; import org.codelutin.option.def.DefinitionParserContexts.ConfigContext; import org.codelutin.option.def.DefinitionParserContexts.GroupContext; import org.codelutin.option.def.DefinitionParserContexts.OptionContext; +import org.codelutin.option.def.DefinitionParserUtil; +import org.codelutin.option.def.OptionDefinition; +import org.codelutin.option.def.OptionDefinitionBuilder; import org.codelutin.util.StringUtil; import java.io.File; @@ -183,9 +189,20 @@ for (int i = 0; i < ocontexts.length; i++) { OptionContext context = ocontexts[i]; String key = context.getKey(); + DefaultOption option; + try { + option = DefaultOption.valueOf(key); + } catch (Exception e) { + // not a + option = null; + } String suffix = StringUtils.capitalize(key); String optionImpl = optionClassPrefix + suffix; String actionImpl = actionClassPrefix + suffix; + if (option!=null) { + actionImpl = actionImpl.replace("Abstract",""); + } + if (!pack.equals(optionPack)) { registerImport(normalImports, optionPack + "." + optionImpl); } Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionActionJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionActionJavaGenerator.java:1.1 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionActionJavaGenerator.java:1.2 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionActionJavaGenerator.java:1.1 Sun Mar 16 04:02:54 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionActionJavaGenerator.java Sun Mar 16 07:02:25 2008 @@ -21,7 +21,8 @@ import org.apache.commons.lang.StringUtils; import org.codelutin.option.def.ArgumentType; -import static org.codelutin.option.def.ArgumentValueType.BOOLEAN; +import org.codelutin.option.def.ArgumentValueType; +import org.codelutin.option.def.DefaultOption; import org.codelutin.option.def.DefinitionParserContexts.ArgumentContext; import org.codelutin.option.def.DefinitionParserContexts.GroupContext; import org.codelutin.option.def.DefinitionParserContexts.OptionContext; @@ -37,7 +38,7 @@ * Le générateur d'action. *

* Utiliser la méthode - * {@link #doGenerate(File,long,String, OptionContext , String, String, String, String, String, String, String)} + * {@link #doGenerate(File,long,String, OptionContext , String, String,String, String, String, String, String, String)} *

* pour générer une nouvelle action. * @@ -55,39 +56,74 @@ String optionPack, String optionClass, String parserPack, - String parserClass) throws IOException { - OptionActionJavaGenerator gen = new OptionActionJavaGenerator(out, timestamp, i18nPrefix, context, - pack, simpleName, superClass, - optionPack, optionClass, - parserPack, parserClass - ); + String parserClass, + String contextClass) throws IOException { + String key = context.getKey(); + DefaultOption option; + try { + option = DefaultOption.valueOf(key); + } catch (Exception e) { + // not a + option = null; + } + + OptionActionJavaGenerator gen; + if (option == null) { + gen = new OptionActionJavaGenerator(out, timestamp, i18nPrefix, context, + pack, simpleName, superClass, + optionPack, optionClass, + parserPack, parserClass, + contextClass, option + ); + } else { + gen = new DefaultOptionActionJavaGenerator(out, timestamp, i18nPrefix, context, + pack, simpleName, superClass, + optionPack, optionClass, + parserPack, parserClass, + contextClass, option + ); + } gen.generate(); } private static final MessageFormat CLASS_JAVADOC_MESSAGE = new MessageFormat("Implantation de l''action associ\u00E9e à l''option {0}\n" + "qui est implant\u00E9e dans la classe {1}.\n\n@author {2}\n@see {3}\n@see {4}"); + protected DefaultOption option; + protected OptionContext context; protected String optionPack, parserPack; - protected String optionClass, parserClass; + protected String optionClass, parserClass, contextClass; protected OptionActionJavaGenerator(File out, - long timestamp, - String i18nPrefix, - OptionContext context, - String pack, - String simpleName, - String superClass, - String optionPack, - String optionClass, - String parserPack, - String parserClass) { - super(out, timestamp, i18nPrefix, PUBLIC | ABSTRACT, pack, simpleName, superClass); + long timestamp, + String i18nPrefix, + OptionContext context, + String pack, + String simpleName, + String superClass, + String optionPack, + String optionClass, + String parserPack, + String parserClass, + String contextClass, + DefaultOption option) { + super(out, timestamp, i18nPrefix, option == null ? PUBLIC | ABSTRACT : PUBLIC, pack, option == null ? simpleName : simpleName.replace("Abstract", ""), superClass); this.optionClass = optionClass; this.parserClass = parserClass; this.optionPack = optionPack; this.parserPack = parserPack; this.context = context; + this.contextClass = contextClass; + this.option = option; + } + + protected void addFields() { + + } + + protected void addRunMethod() { + } protected void addContent() { @@ -97,6 +133,8 @@ registerImport(normalImports, parserPack, parserClass); registerImport(normalImports, parserPack, superClass); + addFields(); + // add delegated accessor to option argumentents if (context.getGroups() != null) { for (GroupContext groupContext : context.getGroups()) { @@ -105,6 +143,9 @@ } } } + + addRunMethod(); + } @Override @@ -122,7 +163,7 @@ String typeAsStr = type.getSimpleName(); boolean multi = argument.getMax() == -1 || argument.getMax() > 1; - boolean booleanValueType = argument.getValueType() == BOOLEAN || argument.getType() == ArgumentType.constant; + boolean booleanValueType = argument.getValueType() == ArgumentValueType.BOOLEAN || argument.getType() == ArgumentType.constant; if (booleanValueType) { typeAsStr = "boolean"; } Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java diff -u /dev/null maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java:1.1 --- /dev/null Sun Mar 16 07:02:30 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java Sun Mar 16 07:02:25 2008 @@ -0,0 +1,47 @@ +package org.codelutin.option.generate.java; + +import org.codelutin.option.def.DefaultOption; +import org.codelutin.option.def.DefinitionParserContexts.OptionContext; + +import java.io.File; +import static java.lang.reflect.Modifier.FINAL; +import static java.lang.reflect.Modifier.PROTECTED; +import static java.lang.reflect.Modifier.PUBLIC; +import static java.lang.reflect.Modifier.STATIC; + +/** @author chemit */ +public class DefaultOptionActionJavaGenerator extends OptionActionJavaGenerator { + + + protected DefaultOptionActionJavaGenerator(File out, long timestamp, String i18nPrefix, OptionContext context, String pack, String simpleName, String superClass, String optionPack, String optionClass, String parserPack, String parserClass, String contextClass, DefaultOption option) { + super(out, timestamp, i18nPrefix, context, pack, simpleName, superClass, optionPack, optionClass, parserPack, parserClass, contextClass, option); + + } + + String type = option.action().getSimpleName(); + + @Override + protected void addFields() { + + registerImport(normalImports, parserPack, contextClass); + registerImport(normalImports, option.action().getName()); + + addField("RUNNABLE_CLASS", "Class<" + type + '>', null, PUBLIC | STATIC | FINAL, type + ".class"); + builder.append('\n'); + addField("runnable", type, null, PROTECTED, null); + + } + + @Override + public void addRunMethod() { + + String body; + String[] exceptions = {"Exception"}; + builder.append('\n'); + body = "return runnable == null ? runnable = RUNNABLE_CLASS.newInstance() : runnable;"; + addMethod(type, "getRunnable", null, PROTECTED, body, exceptions); + builder.append('\n'); + body = "getRunnable().run(this, context);"; + addMethod("void", "run", null, PROTECTED, body, exceptions, contextClass + " context"); + } +}