Index: lutinutil/src/java/org/codelutin/util/OptionParserAnnotationHelper.java diff -u lutinutil/src/java/org/codelutin/util/OptionParserAnnotationHelper.java:1.7 lutinutil/src/java/org/codelutin/util/OptionParserAnnotationHelper.java:1.8 --- lutinutil/src/java/org/codelutin/util/OptionParserAnnotationHelper.java:1.7 Sun Dec 16 22:29:03 2007 +++ lutinutil/src/java/org/codelutin/util/OptionParserAnnotationHelper.java Tue Dec 18 20:28:39 2007 @@ -50,9 +50,13 @@ @Target(value = {TYPE, LOCAL_VARIABLE, CONSTRUCTOR, METHOD, FIELD}) public static @interface ApplicationA { - /** @return les options d'application connues du parseur */ + /** @return les options connues du parseur */ public OptionA[] options() default {}; + /** @return les configs connues du parseur */ + //public ConfigA[] configs() default {}; + + } /** @@ -142,6 +146,46 @@ } + /** + * Annotation pour définir une configuration (un nom et des ConfigProperty) + * + * @author chemit + */ + @Retention(value = RUNTIME) + @Target(value = ANNOTATION_TYPE) + public static @interface ConfigA { + + /** @return la nom de la config */ + public String name(); + + /** @return le type de la valeur de l'argument */ + public ConfigPropertyA[] properties() default {}; + } + + /** + * Annotation pour définir une propriété de la configuration (un nom, + * une description, un type, une classe d'implantation, une valeur par défaut + * et des modifiers + * + * @author chemit + */ + @Retention(value = RUNTIME) + @Target(value = ANNOTATION_TYPE) + public static @interface ConfigPropertyA { + + /** @return la clef de la config */ + public String key(); + + /** @return la description de la définition */ + public String desc(); + + /** @return la class d'implantation de la valeur */ + public Class clazz() default String.class; + + /** @return la valeur par defaut */ + public String defaultValue() default ""; + } + //------------------------------------------------------------------------ // Factory methods //------------------------------------------------------------------------ @@ -153,6 +197,10 @@ return optionAs; } + //public ConfigA[] configs() { + // return new ConfigA[0]; + //} + public Class annotationType() { return ApplicationA.class; } @@ -202,9 +250,9 @@ } public static GroupA newGroupArgumentA(final int min, - final int max, - final int pos, - final ArgumentA[] argumentAs) { + final int max, + final int pos, + final ArgumentA[] argumentAs) { return new GroupA() { public int min() { return min; @@ -259,4 +307,45 @@ } }; } + + public static ConfigA newConfigA(final String name, final ConfigPropertyA[] propertyAs) { + return new ConfigA() { + public String name() { + return name; + } + + public ConfigPropertyA[] properties() { + return propertyAs; + } + + public Class annotationType() { + return ConfigA.class; + } + }; + } + + public static ConfigPropertyA newConfigPropertyA(final String key, final String desc, final Class clazz, final String defaultValue) { + return new ConfigPropertyA() { + + public String key() { + return key; + } + + public String desc() { + return desc; + } + + public Class clazz() { + return clazz; + } + + public String defaultValue() { + return defaultValue; + } + + public Class annotationType() { + return ConfigPropertyA.class; + } + }; + } }