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.10 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java:1.11 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java:1.10 Sun Mar 16 21:24:10 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java Mon Mar 17 22:43:47 2008 @@ -20,14 +20,12 @@ import org.apache.commons.lang.StringUtils; import org.codelutin.i18n.I18n; -import org.codelutin.option.ConfigKey; import org.codelutin.option.OptionParser; import org.codelutin.option.def.ArgumentType; import org.codelutin.option.def.ArgumentValueType; import org.codelutin.option.def.DefaultOptionAction; 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; @@ -46,7 +44,7 @@ * Permet de générer un {@link OptionParser} à  partir des résultats du parsing * d'un {@link DefinitionParser}. *

- * Utiliser la méthode {@link #doGenerate(java.io.File,long, String,org.codelutin.option.def.DefinitionParserContexts.OptionContext[],org.codelutin.option.def.DefinitionParserContexts.ConfigContext[], String, String, String, String, String, String, String, String, String, String)} + * Utiliser la méthode {@link #doGenerate(java.io.File,long, String,org.codelutin.option.def.DefinitionParserContexts.OptionContext[], String, String, String, String, String, String, String, String)} * pour générer un nouveeau parseur. * * @author chemit @@ -56,19 +54,16 @@ long timestamp, String i18nPrefix, OptionContext[] ocontexts, - ConfigContext[] ccontexts, String pack, String simpleName, String optionKeySimpleName, String optionPack, String optionClassPrefix, - String configPack, - String configClassPrefix, String actionPack, String actionClassPrefix, String superClass) throws IOException { OptionParserJavaGenerator gen; - gen = new OptionParserJavaGenerator(out, timestamp, i18nPrefix, ocontexts, ccontexts, pack, simpleName, optionKeySimpleName, optionPack, optionClassPrefix, configPack, configClassPrefix, actionPack, actionClassPrefix, superClass); + gen = new OptionParserJavaGenerator(out, timestamp, i18nPrefix, ocontexts, pack, simpleName, optionKeySimpleName, optionPack, optionClassPrefix, actionPack, actionClassPrefix, superClass); gen.generate(); } @@ -86,39 +81,29 @@ protected String optionKeySimpleName; protected String optionClassPrefix; - protected String configPack; - protected String configClassPrefix; protected String actionPack; protected String actionClassPrefix; protected OptionContext[] ocontexts; - protected ConfigContext[] ccontexts; - protected OptionParserJavaGenerator(File out, long timestamp, String i18nPrefix, OptionContext[] ocontexts, - ConfigContext[] ccontexts, String pack, String simpleName, String optionKeySimpleName, String optionPack, String optionClassPrefix, - String configPack, - String configClassPrefix, String actionPack, String actionClassPrefix, String superClass) { super(out, timestamp, i18nPrefix, PUBLIC, pack, simpleName, superClass); this.optionKeySimpleName = optionKeySimpleName; this.optionPack = optionPack; - this.configPack = configPack; this.actionPack = actionPack; this.optionClassPrefix = optionClassPrefix; - this.configClassPrefix = configClassPrefix; this.actionClassPrefix = actionClassPrefix; this.ocontexts = ocontexts; - this.ccontexts = ccontexts; } protected void addContent() { @@ -127,16 +112,15 @@ registerImport(normalImports, OptionDefinition.class); StringBuilder staticBloc = new StringBuilder(); - // add ConfigKey constant fields - addConfigKeyFields(staticBloc); + // add OptionKey constant fields - addOptionKeyFields(staticBloc); - // add configs shared instances accessors - for (ConfigContext context : ccontexts) { - generateConfigAccessor(context); + if (ocontexts.length > 0) { + addOptionKeyFields(staticBloc); + + // add static bloc to initiliaze the constants + addStaticBloc(staticBloc.toString().substring(1)); } - // add static bloc to initiliaze the constants - addStaticBloc(staticBloc.toString().substring(1)); + // add static method to build the definition by programmation String body = new ToInitMethodSourceWalker().doWalk(ocontexts); addStaticMethod("void", "buildDefinitions", BUILD_DEFINITIONS_JAVADOC, 0, body, null, OptionDefinitionBuilder.class.getSimpleName() + " builder"); @@ -151,9 +135,6 @@ protected void addOptionKeyFields(StringBuilder sb) { - if (ocontexts.length == 0) { - return; - } String classPrefix; classPrefix = optionKeySimpleName; String factoryMethod = "new" + optionKeySimpleName; @@ -165,13 +146,7 @@ for (int i = 0; i < ocontexts.length; i++) { OptionContext context = ocontexts[i]; String key = context.getKey(); - DefaultOptionAction option; - try { - option = DefaultOptionAction.valueOf(key); - } catch (Exception e) { - // not a - option = null; - } + DefaultOptionAction option = getDefaultOptionAction(key); String suffix = StringUtils.capitalize(key); String optionImpl = optionClassPrefix + suffix; String actionImpl = actionClassPrefix + suffix; @@ -195,53 +170,18 @@ } } - protected void addConfigKeyFields(StringBuilder sb) { - if (ccontexts.length == 0) { - return; - } - registerImport(normalImports, ConfigKey.class); - registerStaticImport(staticImports, ConfigKey.class, "newConfigKey"); - sb.append("\n// configs key init"); - String classPrefix; - classPrefix = ConfigKey.class.getSimpleName(); - for (ConfigContext context : ccontexts) { - String key = context.getCategory(); - String suffix = StringUtils.capitalize(key); - String configImpl = configClassPrefix + suffix; - if (!pack.equals(configPack)) { - registerImport(normalImports, configPack + "." + configImpl); - } - String clazz = classPrefix + "<" + configImpl + ">"; - String fieldName = StringUtil.convertToConstantName(key) + SUFFIX_CONFIG_FIELD; - String javadoc = "La clef pour acc\u00E9der \u00E0 la config de cat\u00E9gorie " + key + ""; - String description = invokeI18N("config." + key + ".description"); - String params = "\"" + key + "\", " + configImpl + ".class, " + description; - sb.append('\n').append(fieldName).append(" = newConfigKey(").append(params).append(");"); - addStaticField(fieldName, clazz, javadoc, PUBLIC | FINAL, null); + private DefaultOptionAction getDefaultOptionAction(String key) { + DefaultOptionAction option; + try { + option = DefaultOptionAction.valueOf(key); + } catch (Exception e) { + // this is not an error ! + option = null; } + return option; } - protected void generateConfigAccessor(ConfigContext context) { - String key = context.getCategory(); - String suffix = StringUtils.capitalize(key); - String methodName = "get" + suffix + "Config"; - String fieldName = getConstantFieldName(key, SUFFIX_CONFIG_FIELD); - String abstractClass = configClassPrefix + suffix; - String javadoc = generateConfigAccessorJavadoc(abstractClass, key, fieldName); - addMethod(abstractClass, methodName, javadoc, PUBLIC, "return getConfig(" + fieldName + ");", null); - } - - protected String generateConfigAccessorJavadoc(String abstractClass, String key, String fieldName) { - StringBuilder sb = new StringBuilder(); - sb.append("Accesseur typ\u00E9 de l'instance partag\u00E9e de la configuration de cat\u00E9gorie ").append(key).append("\n(implantantion abstraite dans la classe "); - sb.append(abstractClass).append(")\n."); - sb.append("\n\n@return l'unique instance parta\u00E9e de la configuration de cat\u00E9gorie ").append(key).append(""); - sb.append("\n@see #").append(fieldName); - sb.append("\n@see ").append(abstractClass).append('\n'); - return sb.toString(); - } - private final static MessageFormat OPTION_BEGIN = new MessageFormat("// option {0}/{1} : {2}\n"); /** Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java:1.3 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java:1.4 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java:1.3 Sun Mar 16 21:24:10 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java Mon Mar 17 22:43:47 2008 @@ -19,13 +19,16 @@ package org.codelutin.option.generate.java; import org.apache.commons.lang.StringUtils; -import org.codelutin.option.ParserFailedException; +import org.codelutin.i18n.I18n; import org.codelutin.option.AbstractContext; +import org.codelutin.option.ConfigKey; import org.codelutin.option.def.DefinitionParserContexts.ConfigContext; +import org.codelutin.util.StringUtil; import java.io.File; import java.io.IOException; import static java.lang.reflect.Modifier.ABSTRACT; +import static java.lang.reflect.Modifier.FINAL; import static java.lang.reflect.Modifier.PROTECTED; import static java.lang.reflect.Modifier.PUBLIC; import java.text.FieldPosition; @@ -83,41 +86,74 @@ } protected void addContent() { - registerImport(normalImports, IOException.class); - registerImport(normalImports, ParserFailedException.class); + registerStaticImport(staticImports, I18n.class, "n_"); + //registerImport(normalImports, IOException.class); + //registerImport(normalImports, ParserFailedException.class); + + StringBuilder staticBloc = new StringBuilder(); + + if (ccontexts.length > 0) { + // add ConfigKey constant fields + addConfigKeyFields(staticBloc); + } builder.append('\n'); - addConstructor(null, PROTECTED, "super("+parserSimpleName +".class);", new String[]{Exception.class.getSimpleName()}); + addConstructor(null, PROTECTED, "super(" + parserSimpleName + ".class);", new String[]{Exception.class.getSimpleName()}); - // add configs shared instances accessors - for (ConfigContext context : ccontexts) { - generateConfigAccessor(context); - String key = context.getCategory(); - if (key.equals("main")) { - // register as main config - String mainConfig = configSimpleName + "Main"; - String javadoc = generateMainConfigAccessorJavadoc(mainConfig); - addMethod(mainConfig, "getConfig", javadoc, PUBLIC, "return getMainConfig();", null); + // add main config accessor + //generateMainConfigAccessor(); + + if (ccontexts.length > 0) { + // add configs shared instances accessors + for (ConfigContext context : ccontexts) { + generateConfigAccessor(context); } + + // add static bloc to initiliaze the config keys + addStaticBloc(staticBloc.toString().substring(1)); } } protected void generateMainConfigAccessor() { - String javadoc = generateMainConfigAccessorJavadoc(parserSimpleName); - String methodName = "getConfig"; - addMethod(parserSimpleName, methodName, javadoc, PUBLIC, "return parser==null?parser=new " + parserSimpleName + "():parser;", null); + String mainConfig = configSimpleName + "Main"; + String javadoc = generateMainConfigAccessorJavadoc(mainConfig); + addMethod(mainConfig, "getConfig", javadoc, PUBLIC, "return getMainConfig();", null); } protected void generateConfigAccessor(ConfigContext context) { String key = context.getCategory(); - String suffix = StringUtils.capitalize(key); String methodName = "get" + suffix + "Config"; + String fieldName = getConstantFieldName(key, OptionParserJavaGenerator.SUFFIX_CONFIG_FIELD); String abstractClass = configSimpleName + suffix; - registerImport(normalImports, configPack, abstractClass); + String javadoc = generateConfigAccessorJavadoc(abstractClass, key, fieldName); + addMethod(abstractClass, methodName, javadoc, PUBLIC, "return getConfig(" + fieldName + ");", null); + } - String javadoc = generateConfigAccessorJavadoc(parserSimpleName + "#" + methodName + "()", key); - addMethod(abstractClass, methodName, javadoc, PUBLIC, "return getParser()." + methodName + "();", null); + protected void addConfigKeyFields(StringBuilder sb) { + if (ccontexts.length == 0) { + return; + } + registerImport(normalImports, ConfigKey.class); + registerStaticImport(staticImports, ConfigKey.class, "newConfigKey"); + sb.append("\n// configs key init"); + String classPrefix; + classPrefix = ConfigKey.class.getSimpleName(); + for (ConfigContext context : ccontexts) { + String key = context.getCategory(); + String suffix = StringUtils.capitalize(key); + String configImpl = configSimpleName + suffix; + if (!pack.equals(configPack)) { + registerImport(normalImports, configPack + "." + configImpl); + } + String clazz = classPrefix + "<" + configImpl + ">"; + String fieldName = StringUtil.convertToConstantName(key) + OptionParserJavaGenerator.SUFFIX_CONFIG_FIELD; + String javadoc = "La clef pour acc\u00E9der \u00E0 la config de cat\u00E9gorie " + key + ""; + String description = invokeI18N("config." + key + ".description"); + String params = "\"" + key + "\", " + configImpl + ".class, " + description; + sb.append('\n').append(fieldName).append(" = newConfigKey(").append(params).append(");"); + addStaticField(fieldName, clazz, javadoc, PUBLIC | FINAL, null); + } } @Override @@ -127,11 +163,12 @@ return sb.toString(); } - protected String generateConfigAccessorJavadoc(String abstractClass, String key) { + protected String generateConfigAccessorJavadoc(String abstractClass, String key, String fieldName) { StringBuilder sb = new StringBuilder(); sb.append("Accesseur typ\u00E9 de l'instance partag\u00E9e de la configuration de cat\u00E9gorie ").append(key).append("\n(implantantion abstraite dans la classe "); sb.append(abstractClass).append(")\n."); sb.append("\n\n@return l'unique instance parta\u00E9e de la configuration de cat\u00E9gorie ").append(key).append(""); + sb.append("\n@see #").append(fieldName); sb.append("\n@see ").append(abstractClass).append('\n'); return sb.toString(); } @@ -143,4 +180,6 @@ sb.append("\n@see ").append(abstractClass).append('\n'); return sb.toString(); } + + } Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/ConfigJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/ConfigJavaGenerator.java:1.11 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/ConfigJavaGenerator.java:1.12 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/ConfigJavaGenerator.java:1.11 Sun Mar 16 21:24:10 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/ConfigJavaGenerator.java Mon Mar 17 22:43:47 2008 @@ -87,7 +87,7 @@ protected void addContent() { registerStaticImport(staticImports, ConfigPropertyKey.class, "newConfigPropertyKey"); registerImport(normalImports, ConfigPropertyKey.class); - registerImport(normalImports,parserPack, parserSimpleName); + //registerImport(normalImports,parserPack, parserSimpleName); registerImport(normalImports,parserPack, superClass); registerStaticImport(staticImports, I18n.class, "n_"); Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java:1.2 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java:1.3 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java:1.2 Sun Mar 16 11:15:48 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/DefaultOptionActionJavaGenerator.java Mon Mar 17 22:43:47 2008 @@ -4,10 +4,7 @@ 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 { @@ -23,12 +20,10 @@ @Override protected void addFields() { - registerImport(normalImports, parserPack, contextClass); + //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); + addField("delegate", type, null, PROTECTED, null); } @@ -38,10 +33,13 @@ String body; String[] exceptions = {"Exception"}; builder.append('\n'); - body = "return runnable == null ? runnable = RUNNABLE_CLASS.newInstance() : runnable;"; - addMethod(type, "getRunnable", null, PROTECTED, body, exceptions); + + body = "getDelegate().run(this);"; + addMethod("void", "run", null, PROTECTED, body, exceptions); + builder.append('\n'); + + body = "return delegate == null ? delegate = " + type + ".class.newInstance() : delegate;"; + addMethod(type, "getDelegate", null, PROTECTED, body, exceptions); builder.append('\n'); - body = "getRunnable().run(this, context);"; - addMethod("void", "run", null, PROTECTED, body, exceptions, contextClass + " context"); } }