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.9 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.9 Sun Mar 16 11:15:48 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/OptionParserJavaGenerator.java Sun Mar 16 21:24:10 2008 @@ -24,6 +24,7 @@ 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; @@ -32,7 +33,6 @@ import org.codelutin.option.def.DefinitionParserUtil; import org.codelutin.option.def.OptionDefinition; import org.codelutin.option.def.OptionDefinitionBuilder; -import org.codelutin.option.def.DefaultOptionAction; import org.codelutin.util.StringUtil; import java.io.File; @@ -46,7 +46,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, String[], String[])} + * 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)} * pour générer un nouveeau parseur. * * @author chemit @@ -66,15 +66,18 @@ String configClassPrefix, String actionPack, String actionClassPrefix, - String superClass, String[] actionImplementations, String[] configImplementations) throws IOException { + String superClass) throws IOException { OptionParserJavaGenerator gen; - gen = new OptionParserJavaGenerator(out, timestamp, i18nPrefix, ocontexts, ccontexts, pack, simpleName, optionKeySimpleName, optionPack, optionClassPrefix, configPack, configClassPrefix, actionPack, actionClassPrefix, superClass, actionImplementations, configImplementations); + gen = new OptionParserJavaGenerator(out, timestamp, i18nPrefix, ocontexts, ccontexts, pack, simpleName, optionKeySimpleName, optionPack, optionClassPrefix, configPack, configClassPrefix, actionPack, actionClassPrefix, superClass); gen.generate(); } - private static final String SUFFIX_OPTION_FIELD = "_OPTION_KEY"; + static final String SUFFIX_OPTION_FIELD = "_OPTION_KEY"; + + static final String SUFFIX_PROPERTY_FIELD = "_PROPERTY_KEY"; + + static final String SUFFIX_CONFIG_FIELD = "_CONFIG_KEY"; - private static final String SUFFIX_CONFIG_FIELD = "_CONFIG_KEY"; private static final String BUILD_DEFINITIONS_JAVADOC = "Initialise le parser avec les d\u00E9finitions d'options\n\n@param builder le builder utilisé pour construire les définitions"; private static final MessageFormat CLASS_JAVADOC_MESSAGE = new MessageFormat("Implantation du parseur d''options.\n\n@author {0}\n@see {1}"); @@ -89,9 +92,6 @@ protected String actionClassPrefix; protected OptionContext[] ocontexts; - protected String[] actionImplementations; - protected String[] configImplementations; - protected ConfigContext[] ccontexts; protected OptionParserJavaGenerator(File out, @@ -108,9 +108,7 @@ String configClassPrefix, String actionPack, String actionClassPrefix, - String superClass, - String[] actionImplementations, - String[] configImplementations) { + String superClass) { super(out, timestamp, i18nPrefix, PUBLIC, pack, simpleName, superClass); this.optionKeySimpleName = optionKeySimpleName; this.optionPack = optionPack; @@ -121,9 +119,6 @@ this.actionClassPrefix = actionClassPrefix; this.ocontexts = ocontexts; this.ccontexts = ccontexts; - this.actionImplementations = actionImplementations; - this.configImplementations = configImplementations; - } protected void addContent() { @@ -131,11 +126,6 @@ registerImport(normalImports, OptionDefinitionBuilder.class); registerImport(normalImports, OptionDefinition.class); - // add actionImplementations constant field - addStaticClassArray(OptionParser.ACTION_IMPLEMENTATIONS_PROPERTY, actionImplementations, "Les actions concretes implant\u00E9es dans le parseur."); - // add configImplementations constant field - addStaticClassArray(OptionParser.CONFIG_IMPLEMENTATIONS_PROPERTY, configImplementations, "Les configs concretes implant\u00E9es dans le parseur."); - StringBuilder staticBloc = new StringBuilder(); // add ConfigKey constant fields addConfigKeyFields(staticBloc); @@ -152,20 +142,6 @@ addStaticMethod("void", "buildDefinitions", BUILD_DEFINITIONS_JAVADOC, 0, body, null, OptionDefinitionBuilder.class.getSimpleName() + " builder"); } - private void addStaticClassArray(String fieldName, String[] configImplementations, String javadoc) { - String clazz = "Class[]"; - StringBuffer sb = new StringBuffer(); - sb.append(" new ").append(clazz).append(" {"); - if (configImplementations.length == 0) { - sb.append(','); - } - for (String implementation : configImplementations) { - sb.append("\n\t\t").append(implementation).append(".class,"); - } - String r = sb.toString(); - addStaticField(fieldName, clazz, javadoc, PUBLIC | FINAL, r.substring(0, r.length() - 1) + "\n\t}"); - } - @Override protected String generateClassJavadoc() { StringBuffer sb = new StringBuffer(); @@ -199,10 +175,9 @@ String suffix = StringUtils.capitalize(key); String optionImpl = optionClassPrefix + suffix; String actionImpl = actionClassPrefix + suffix; - if (option!=null) { - actionImpl = actionImpl.replace("Abstract",""); + 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/AbstractContextJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java:1.2 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.2 Sun Mar 16 11:15:48 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractContextJavaGenerator.java Sun Mar 16 21:24:10 2008 @@ -20,6 +20,7 @@ import org.apache.commons.lang.StringUtils; import org.codelutin.option.ParserFailedException; +import org.codelutin.option.AbstractContext; import org.codelutin.option.def.DefinitionParserContexts.ConfigContext; import java.io.File; @@ -31,7 +32,7 @@ import java.text.MessageFormat; /** - * Permet de générer un {@link org.codelutin.option.AbstractContext} encapsulant le parser et les configurations + * Permet de générer un {@link AbstractContext} encapsulant le parser et les configurations *

* Utiliser la méthode {@link #doGenerate(java.io.File,long, String,ConfigContext[], String, String, String, String,String, String)} * pour générer un nouveeau parseur. @@ -86,10 +87,7 @@ registerImport(normalImports, ParserFailedException.class); builder.append('\n'); - addConstructor(null, PROTECTED, "super(args);", new String[]{IOException.class.getSimpleName(), ParserFailedException.class.getSimpleName()}, "String[] args"); - - // add parser accessor - generateParserAccessor(); + addConstructor(null, PROTECTED, "super("+parserSimpleName +".class);", new String[]{Exception.class.getSimpleName()}); // add configs shared instances accessors for (ConfigContext context : ccontexts) { @@ -104,18 +102,9 @@ } } - protected void generateParserAccessor() { - - String javadoc = generateParserAccessorJavadoc(parserSimpleName); - - addMethod(parserSimpleName, "getParser", javadoc, PUBLIC, "return parser==null?parser=new " + parserSimpleName + "():parser;", null); - } - protected void generateMainConfigAccessor() { - - String javadoc = generateParserAccessorJavadoc(parserSimpleName); + String javadoc = generateMainConfigAccessorJavadoc(parserSimpleName); String methodName = "getConfig"; - addMethod(parserSimpleName, methodName, javadoc, PUBLIC, "return parser==null?parser=new " + parserSimpleName + "():parser;", null); } @@ -128,9 +117,7 @@ registerImport(normalImports, configPack, abstractClass); String javadoc = generateConfigAccessorJavadoc(parserSimpleName + "#" + methodName + "()", key); - addMethod(abstractClass, methodName, javadoc, PUBLIC, "return getParser()." + methodName + "();", null); - } @Override @@ -156,13 +143,4 @@ sb.append("\n@see ").append(abstractClass).append('\n'); return sb.toString(); } - - protected String generateParserAccessorJavadoc(String abstractClass) { - StringBuilder sb = new StringBuilder(); - sb.append("Accesseur typ\u00E9 de l'instance partag\u00E9e du parseur ").append(abstractClass).append("."); - sb.append("\n\n@return l'unique instance parta\u00E9e du parseur."); - sb.append("\n@see ").append(abstractClass).append('\n'); - return sb.toString(); - } - -} \ No newline at end of file +} 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.10 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.10 Sat Mar 15 01:22:22 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/ConfigJavaGenerator.java Sun Mar 16 21:24:10 2008 @@ -22,6 +22,7 @@ import org.apache.commons.lang.StringUtils; import org.codelutin.i18n.I18n; import org.codelutin.option.ConfigPropertyKey; +import static org.codelutin.option.generate.java.OptionParserJavaGenerator.SUFFIX_PROPERTY_FIELD; import org.codelutin.option.def.ConfigPropertyModifier; import org.codelutin.option.def.DefinitionParserContexts.ConfigContext; import org.codelutin.option.def.DefinitionParserContexts.ConfigPropertyContext; @@ -61,12 +62,8 @@ private static final MessageFormat CLASS_JAVADOC_MESSAGE = new MessageFormat("Implantation de la configuration de cat\u00E9gorie {0}.\n\n@author {1}\n@see {2}"); - private static final String SUFFIX_CONFIG_PROPERTY_FIELD = "_PROPERTY_KEY"; - protected boolean concreteClass; - protected ConfigContext context; - protected String parserPack; protected String parserSimpleName; @@ -104,7 +101,7 @@ Class type = property.getType(); registerImport(normalImports, type); String clazz = classPrefix + "<" + type.getSimpleName() + ">"; - String fieldName = getConstantFieldName(key, SUFFIX_CONFIG_PROPERTY_FIELD); + String fieldName = getConstantFieldName(key, SUFFIX_PROPERTY_FIELD); String javadoc = "La clef pour acc\u00E9der \u00E0 la propri\u00E9t\u00E9 " + key + ""; description = invokeI18N(property.getKey() + ".description"); String params = "\"" + key + "\", " + type.getSimpleName() + ".class, " + property.getModifiers() + ", " + description; @@ -122,7 +119,7 @@ // add propertec constructor (this is an abstract class) builder.append('\n'); description = invokeI18N("description"); - addConstructor(null, concreteClass ? PUBLIC : PROTECTED, "super(parser ,\"" + context.getCategory() + "\", " + description + ");", null,parserSimpleName+" parser"); + addConstructor(null, concreteClass ? PUBLIC : PROTECTED, "super(\"" + context.getCategory() + "\", " + description + ");", null); // add properties typed accessors for (ConfigPropertyContext propertyContext : context.getContexts()) { generatePropertyAccessor(propertyContext); @@ -158,7 +155,7 @@ typeAsStr = "boolean"; } String methodName = buildGetterMethodName(booleanValueType, argumentKeyCap); - String fieldName = getConstantFieldName(key, SUFFIX_CONFIG_PROPERTY_FIELD); + String fieldName = getConstantFieldName(key, SUFFIX_PROPERTY_FIELD); String javadoc = generatePropertyAccessorJavadoc(context, fieldName); addMethod(typeAsStr, methodName, javadoc, PUBLIC, "return getProperty(" + fieldName + ");", null); } @@ -180,7 +177,7 @@ mods = PROTECTED; } String methodName = "set" + argumentKeyCap; - String fieldName = getConstantFieldName(key, SUFFIX_CONFIG_PROPERTY_FIELD); + String fieldName = getConstantFieldName(key, SUFFIX_PROPERTY_FIELD); String javadoc = generatePropertyMutatorJavadoc(context, fieldName, mods); addMethod("void", methodName, javadoc, mods, "setProperty(" + fieldName + ", value);", null, typeAsStr + " value"); Index: maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractConfigJavaGenerator.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractConfigJavaGenerator.java:1.1 maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractConfigJavaGenerator.java:1.2 --- maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractConfigJavaGenerator.java:1.1 Sat Mar 15 01:22:22 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/generate/java/AbstractConfigJavaGenerator.java Sun Mar 16 21:24:10 2008 @@ -20,11 +20,17 @@ package org.codelutin.option.generate.java; import org.codelutin.option.ConfigPropertyKey; +import org.codelutin.option.def.DefaultOptionAction; +import org.codelutin.option.def.DefinitionParser; +import org.codelutin.option.def.DefinitionParser.MandatoryConfigProperty; import org.codelutin.option.def.DefinitionParserContexts; +import org.codelutin.util.StringUtil; import java.io.File; import java.io.IOException; -import static java.lang.reflect.Modifier.*; +import static java.lang.reflect.Modifier.ABSTRACT; +import static java.lang.reflect.Modifier.PROTECTED; +import static java.lang.reflect.Modifier.PUBLIC; import java.text.FieldPosition; import java.text.MessageFormat; @@ -32,7 +38,7 @@ * Generateur d'implantation de classe de base de config. *

* Utiliser la méthode - * {@link #doGenerate(java.io.File,long, String, DefinitionParserContexts.ConfigContext[], String, String,String, String, String,String, String,String, String,String,String)} + * {@link #doGenerate(java.io.File,long, String,org.codelutin.option.def.DefinitionParserContexts.ConfigContext[], String, String, String, String,String, String, String, String, String,String)} * pour générer une nouvelle action. * * @author tony @@ -45,35 +51,38 @@ String parserPack, String contextPack, String optionPack, + String configPack, String parserSimpleName, String contextSimpleName, String optionKeySimpleName, String simpleName, - String superClass, - String configOptionKey, - String configFileOptionKey, - String filenameOptionKey) throws IOException { - String superClassWithType = superClass + '<' + parserSimpleName + ", " + contextSimpleName + ", " + optionKeySimpleName + '>'; + String configSimpleName, + String superClass) throws IOException { + AbstractConfigJavaGenerator gen; - gen = new AbstractConfigJavaGenerator(out, timestamp, i18nPrefix, ccontexts, parserPack,contextPack,optionPack, simpleName, superClassWithType, parserSimpleName, contextSimpleName, optionKeySimpleName, configOptionKey, configFileOptionKey, filenameOptionKey); + gen = new AbstractConfigJavaGenerator(out, timestamp, i18nPrefix, ccontexts, parserPack, contextPack, optionPack, configPack, simpleName, superClass, parserSimpleName, contextSimpleName, optionKeySimpleName, configSimpleName); gen.generate(); } private static final MessageFormat CLASS_JAVADOC_MESSAGE = new MessageFormat("Implantation de base des configurations sp\u00E9cifiques a l''application au parseur {0}.\n\n@author {1}\n@see {2}\n@see {3}\n@see {4}"); - protected String parserSimpleName; protected String contextSimpleName; + protected String optionKeySimpleName; + protected DefinitionParserContexts.ConfigContext[] ccontexts; - protected String filenameOptionKey; - protected String configOptionKey; - protected String configFileOptionKey; - protected String contextPack; + protected MandatoryConfigProperty configFileNameConfigPropertyKey; + protected DefaultOptionAction configOptionKey; + protected DefaultOptionAction configFileOptionKey; + protected String contextPack; protected String optionPack; + protected String configPack; + + protected String configSimpleName; protected AbstractConfigJavaGenerator(File out, @@ -83,25 +92,27 @@ String pack, String contextPack, String optionPack, + String configPack, String simpleName, String superClass, String parserSimpleName, String contextSimpleName, String optionKeySimpleName, - String configOptionKey, - String configFileOptionKey, - String filenameOptionKey) { + String configSimpleName) { super(out, timestamp, i18nPrefix, ABSTRACT | PUBLIC, pack, simpleName, superClass); this.parserSimpleName = parserSimpleName; this.contextSimpleName = contextSimpleName; this.optionKeySimpleName = optionKeySimpleName; this.ccontexts = ccontexts; - this.configOptionKey = configOptionKey; - this.configFileOptionKey = configFileOptionKey; - this.filenameOptionKey = filenameOptionKey; - this.contextPack=contextPack; - this.optionPack=optionPack; + + this.configOptionKey = DefaultOptionAction.changeConfig; + this.configFileOptionKey = DefaultOptionAction.changeFileConfig; + this.configFileNameConfigPropertyKey = DefinitionParser.MandatoryConfigProperty.configFileName; + this.configSimpleName = configSimpleName; + this.contextPack = contextPack; + this.optionPack = optionPack; + this.configPack = configPack; } @@ -110,16 +121,30 @@ registerImport(normalImports, ConfigPropertyKey.class); registerImport(normalImports, File.class); //registerImport(normalImports, superClassWithNoType); - registerImport(normalImports, pack,parserSimpleName); - registerImport(normalImports, pack,optionKeySimpleName); - registerImport(normalImports, contextPack,contextSimpleName); + registerImport(normalImports, pack, parserSimpleName); + registerImport(normalImports, pack, optionKeySimpleName); + registerImport(normalImports, contextPack, contextSimpleName); registerImport(normalImports, pack, optionKeySimpleName); builder.append('\n'); - addConstructor(null, PUBLIC, "super(parser, category, description);", null, parserSimpleName + " parser", "String category", "String description"); + addConstructor(null, PUBLIC, "super(category, description);", null, "String category", "String description"); + + String field; + + field = StringUtil.convertToConstantName(configOptionKey.name()) + OptionParserJavaGenerator.SUFFIX_OPTION_FIELD; + registerStaticImport(staticImports, pack + '.' + parserSimpleName + '.' + field); + addMethod(optionKeySimpleName, "getConfigOptionKey", null, PROTECTED, "return " + field + ";", null); + + field = StringUtil.convertToConstantName(configFileOptionKey.name()) + OptionParserJavaGenerator.SUFFIX_OPTION_FIELD; + registerStaticImport(staticImports, pack + '.' + parserSimpleName + '.' + field); + addMethod(optionKeySimpleName, "getConfigFileOptionKey", null, PROTECTED, "return " + field + ";", null); + + field = StringUtil.convertToConstantName(configFileNameConfigPropertyKey.name()) + OptionParserJavaGenerator.SUFFIX_PROPERTY_FIELD; + + String configImpl = configSimpleName + "Main"; + + registerStaticImport(staticImports, configPack + '.' + configImpl + '.' + field); - addMethod(optionKeySimpleName, "getConfigOptionKey", null, PROTECTED, "return " + parserSimpleName + "." + configOptionKey + ";", null); - addMethod(optionKeySimpleName, "getConfigFileOptionKey", null, PROTECTED, "return " + parserSimpleName + "." + configFileOptionKey + ";", null); - addMethod("ConfigPropertyKey", "getFileNameConfigKey", null, PROTECTED, "return " + filenameOptionKey + ";", null); + addMethod("ConfigPropertyKey", "getFileNameConfigKey", null, PROTECTED, "return " + field + ";", null); } @Override