Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/JavaGeneratorGoal.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/JavaGeneratorGoal.java:1.9 maven-commandline-plugin/src/java/org/codelutin/option/generate/JavaGeneratorGoal.java:1.10 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/JavaGeneratorGoal.java:1.9 Fri Feb 22 13:47:45 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/JavaGeneratorGoal.java Sat Mar 15 01:22:22 2008 @@ -25,16 +25,12 @@ import org.codelutin.option.Option; import org.codelutin.option.OptionAction; import org.codelutin.option.OptionParser; +import org.codelutin.option.SimpleConfigImpl; import org.codelutin.option.def.DefinitionParser; import org.codelutin.option.def.DefinitionParserContexts.ConfigContext; import org.codelutin.option.def.DefinitionParserContexts.OptionContext; import org.codelutin.option.def.DefinitionParserUtil.TypeSource; -import org.codelutin.option.generate.java.AbstractActionJavaGenerator; -import org.codelutin.option.generate.java.ActionJavaGenerator; -import org.codelutin.option.generate.java.ConfigJavaGenerator; -import org.codelutin.option.generate.java.OptionJavaGenerator; -import org.codelutin.option.generate.java.OptionKeyJavaGenerator; -import org.codelutin.option.generate.java.OptionParserJavaGenerator; +import org.codelutin.option.generate.java.*; import java.io.File; import java.io.StringWriter; @@ -47,7 +43,7 @@ * pour un fichier de propriété contenant la definition formelle des options. * * @author chemit - * @goal java + * @goal genJava * @phase generate-sources */ public class JavaGeneratorGoal extends AbstractGeneratorGoal { @@ -60,7 +56,7 @@ protected File source; /** - * @description Répertoire de sortie des classes. + * @description Répertoire de sortie des sources java générés. * @parameter expression="${commandline.out}" default-value="${basedir}/target/gen/java" */ protected File out; @@ -103,6 +99,12 @@ protected String actionPackageName; /** + * @description nom du paquetage utilisé pour la génération des actions + * @parameter expression="${commandline.contextPackageName}" + */ + protected String contextPackageName; + + /** * @description nom du parseur a generer * @parameter expression="${commandline.parserSimpleName}" */ @@ -127,20 +129,26 @@ protected String actionSimpleName; /** - * @description la super classe du parseur a generer + * @description prefix du nom du context a generer + * @parameter expression="${commandline.contextSimpleName}" + */ + protected String contextSimpleName; + + /** + * @description fqn de la super classe du parseur a generer * @parameter expression="${commandline.parserSuperClass}" default-value="org.codelutin.option.OptionParser" */ protected String parserSuperClass; /** - * @description la super classe des options a generer + * @description fqn de la super classe des options a generer * @parameter expression="${commandline.optionSuperClass}" default-value="org.codelutin.option.Option" */ protected String optionSuperClass; /** - * @description la super classe des configs a generer - * @parameter expression="${commandline.configSuperClass}" default-value="org.codelutin.option.Config" + * @description fqn de la super classe des configs a generer + * @parameter expression="${commandline.configSuperClass}" default-value="org.codelutin.option.SimpleConfigImpl" */ protected String configSuperClass; @@ -151,17 +159,62 @@ protected String actionSuperClass; /** + * @description fqn de la super classe des actions a generer + * @parameter expression="${commandline.contextSuperClass}" default-value="org.codelutin.option.AbstractContext" + */ + protected String contextSuperClass; + + /** * @description prefix du nom des config a generer * @parameter expression="${commandline.concreteConfig}" default-value="false" */ protected boolean concreteConfig; + /** + * @description TODO + * @parameter expression="${commandline.abstractConfigOptionKey}" + * @required + */ + protected String abstractConfigOptionKey; + + /** + * @description TODO + * @parameter expression="${commandline.abstractConfigFileOptionKey}" + * @required + */ + protected String abstractConfigFileOptionKey; + + /** + * @description TODO + * @parameter expression="${commandline.abstractConfigFilenameConfigKey}" + * @required + */ + protected String abstractConfigFilenameConfigKey; + + /** + * @description fqn des classes contenant en inner-classes les implantations concretes des actions d'option + * @parameter expression="${commandline.actionImplementations} + */ + protected String[] actionImplementations; + + /** + * @description fqn des implantations concretes des configs à enregister + * @parameter expression="${commandline.configImplementations} + */ + protected String[] configImplementations; + protected DefinitionParser parser; - protected boolean needActionConstructor; + + //protected boolean needActionConstructor; public JavaGeneratorGoal() { } + + public JavaGeneratorGoal(String prefix, boolean verbose) { + super(prefix, verbose); + } + protected void initAction() throws Exception { // init i18n @@ -174,8 +227,6 @@ //checkInstanceOf(configSuperClass, Config.class); //initClassLoader(); - needActionConstructor = needSpecializedAction(); - if (optionPackageName == null) { optionPackageName = parserPackageName + ".options"; } @@ -185,6 +236,9 @@ if (configPackageName == null) { configPackageName = parserPackageName + ".configs"; } + if (contextPackageName == null) { + contextPackageName = parserPackageName; + } if (parserSimpleName == null) { parserSimpleName = prefix + "OptionParser"; } @@ -195,7 +249,10 @@ actionSimpleName = prefix + "AbstractOptionAction"; } if (configSimpleName == null) { - configSimpleName = prefix + "AbstractConfig"; + configSimpleName = prefix + "Config"; + } + if (contextSimpleName == null) { + contextSimpleName = prefix + "AbstractContext"; } // make sure out exists @@ -242,10 +299,6 @@ } } - public JavaGeneratorGoal(String prefix, boolean verbose) { - super(prefix, verbose); - } - public void doAction() throws Exception { String optionKeySimpleName = parserSimpleName; @@ -258,28 +311,54 @@ } optionKeySimpleName += "OptionKey"; - Map map = new TreeMap(); + Map map = new TreeMap(); // build a dictonary of options implementations name for (OptionContext context : optionContexts) { String suffix = StringUtils.capitalize(context.getKey()); String optionClassName = optionSimpleName + suffix; - map.put(context.getKey(),optionClassName); + map.put(context.getKey(), optionClassName); } // generate specialized abstract OptionAction for this parser if (needSpecializedAction()) { AbstractActionJavaGenerator.doGenerate(out, t0, i18nPrefix, parserPackageName, + contextPackageName, parserSimpleName, + contextSimpleName, actionSimpleName, actionSuperClass ); + actionSuperClass = actionSimpleName; + } + + // generate specialized abstract SimpleConfigImpl for this parser + if (needSpecializedAbstractConfig()) { + AbstractConfigJavaGenerator.doGenerate(out, t0, i18nPrefix, + configContexts, + parserPackageName, + contextPackageName, + optionPackageName, + parserSimpleName, + contextSimpleName, + optionKeySimpleName + "", + prefix + "AbstractConfig", + configSuperClass, + abstractConfigOptionKey, + abstractConfigFileOptionKey, + abstractConfigFilenameConfigKey + ); + // the super classes of generatred configs is the one generated here + configSuperClass = prefix + "AbstractConfig"; } // generate specialized OptionKey for this parser OptionKeyJavaGenerator.doGenerate(out, t0, i18nPrefix, parserPackageName, + contextPackageName, + optionPackageName, parserSimpleName, + contextSimpleName, optionKeySimpleName, actionSuperClass ); @@ -297,21 +376,36 @@ configSimpleName, actionPackageName, actionSimpleName, - parserSuperClass + parserSuperClass, + actionImplementations, + configImplementations + ); + + + AbstractContextJavaGenerator.doGenerate(out, t0, i18nPrefix, + configContexts, + parserPackageName, + configPackageName, + parserSimpleName, + configSimpleName, + contextSimpleName, + contextSuperClass ); // generate Config implementations for (ConfigContext context : configContexts) { String suffix = StringUtils.capitalize(context.getCategory()); - ConfigJavaGenerator.doGenerate(out, t0, i18nPrefix, context, + ConfigJavaGenerator.doGenerate(out, t0, i18nPrefix, + context, + parserPackageName, configPackageName, configSimpleName + suffix, + parserSimpleName, configSuperClass, concreteConfig ); } - // generate Option implementations for (OptionContext context : optionContexts) { OptionJavaGenerator.doGenerate(out, t0, i18nPrefix, context, @@ -328,12 +422,11 @@ ActionJavaGenerator.doGenerate(out, t0, i18nPrefix, context, actionPackageName, actionSimpleName + suffix, - actionSuperClass+ "<" + optionClassName + ">", + actionSuperClass + "<" + optionClassName + ">", optionPackageName, optionClassName, parserPackageName, - parserSimpleName, - needActionConstructor + parserSimpleName ); } map.clear(); @@ -342,4 +435,8 @@ private boolean needSpecializedAction() { return actionSuperClass.equals(OptionAction.class.getName()); } + + private boolean needSpecializedAbstractConfig() { + return configSuperClass.equals(SimpleConfigImpl.class.getName()); + } } \ No newline at end of file