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");
+ }
+}