[Lutinutil-commits] r1503 - in lutinutil/trunk: . src/main/assembly src/main/java/org/codelutin/i18n src/main/java/org/codelutin/i18n/bundle src/main/java/org/codelutin/log src/main/java/org/codelutin/util src/site src/site/rst
Author: tchemit Date: 2009-05-11 01:06:25 +0000 (Mon, 11 May 2009) New Revision: 1503 Added: lutinutil/trunk/src/site/rst/ lutinutil/trunk/src/site/rst/CommandLineArgumentApplication.rst lutinutil/trunk/src/site/rst/LutinUtil.rst lutinutil/trunk/src/site/rst/Todo.rst lutinutil/trunk/src/site/rst/index.rst Modified: lutinutil/trunk/changelog.txt lutinutil/trunk/pom.xml lutinutil/trunk/src/main/assembly/deps.xml lutinutil/trunk/src/main/assembly/full.xml lutinutil/trunk/src/main/java/org/codelutin/i18n/I18n.java lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java lutinutil/trunk/src/main/java/org/codelutin/log/LutinLogFactory.java lutinutil/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java lutinutil/trunk/src/main/java/org/codelutin/util/FormatConverter.java lutinutil/trunk/src/main/java/org/codelutin/util/FormatMap.java lutinutil/trunk/src/main/java/org/codelutin/util/ObjectUtil.java lutinutil/trunk/src/main/java/org/codelutin/util/StringUtil.java lutinutil/trunk/src/site/site.xml Log: * bump versions (lutinproject, maven-license-switcher-plugin) * use doxia-modules-jrst instead of maven-jrst-plugin * improve download section on site * fix generics and javadoc Modified: lutinutil/trunk/changelog.txt =================================================================== --- lutinutil/trunk/changelog.txt 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/changelog.txt 2009-05-11 01:06:25 UTC (rev 1503) @@ -1,8 +1,12 @@ ver 1.1.0 ? * migrate to org.nuiton groupId -ver 1.0.6 chemit 20090509 - * 20090508 [chemit] - refactor i18n loading with a direct loding mode (see alos i18n:bundle goal) +ver 1.0.6 chemit 20090511 + * bump versions (lutinproject, maven-license-switcher-plugin) + * use doxia-modules-jrst instead of maven-jrst-plugin + * improve download section on site + * fix generics and javadoc + * refactor i18n loading with a direct looding mode (see also i18n:bundle goal) ver 1.0.5 chatellier xxxxxx ? * Add Tar/bzip2 utility class Modified: lutinutil/trunk/pom.xml =================================================================== --- lutinutil/trunk/pom.xml 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/pom.xml 2009-05-11 01:06:25 UTC (rev 1503) @@ -10,7 +10,7 @@ <parent> <groupId>org.codelutin</groupId> <artifactId>lutinproject</artifactId> - <version>3.5</version> + <version>3.5.4</version> </parent> <artifactId>lutinutil</artifactId> @@ -74,10 +74,8 @@ <properties> <labs.id>12</labs.id> - <labs.project>lutinutil</labs.project> - <i18n.version>0.11</i18n.version> </properties> <build> @@ -90,7 +88,7 @@ <plugin> <groupId>org.codelutin</groupId> <artifactId>maven-i18n-plugin</artifactId> - <version>${i18n.version}</version> + <version>0.11</version> <executions> <execution> <goals> @@ -101,28 +99,25 @@ </executions> </plugin> - <!-- Always process jrst files, but only called on pre-site phase --> - <plugin> - <groupId>org.codelutin</groupId> - <artifactId>maven-jrst-plugin</artifactId> - <version>0.8.4</version> - <configuration> - <defaultLocale>fr</defaultLocale> - </configuration> - <executions> - <execution> - <goals> - <goal>jrst</goal> - </goals> - </execution> - </executions> - </plugin> </plugins> <pluginManagement> <plugins> + <plugin> + <artifactId>maven-site-plugin</artifactId> + <dependencies> + <dependency> + <groupId>org.codelutin</groupId> + <artifactId>doxia-module-jrst</artifactId> + <version>1.0.0</version> + </dependency> + </dependencies> + </plugin> + + <plugin> <artifactId>maven-assembly-plugin</artifactId> + <version>2.1</version> <configuration> <descriptors> <descriptor>src/main/assembly/deps.xml</descriptor> @@ -130,26 +125,19 @@ </descriptors> <attach>false</attach> </configuration> - <executions> - <execution> - <id>create-assembly</id> - <goals> - <goal>single</goal> - </goals> - </execution> - </executions> </plugin> </plugins> </pluginManagement> </build> - <reporting> + <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.5</version> <configuration> + <quiet>true</quiet> <links> <link>http://java.sun.com/javase/6/docs/api/</link> </links> @@ -198,28 +186,30 @@ <build> <plugins> - <!-- launch in a release the assembly automaticly --> + <!-- always add license and third-party files to classpath --> <plugin> - <artifactId>maven-assembly-plugin</artifactId> + <groupId>org.codelutin</groupId> + <artifactId>maven-license-switcher-plugin</artifactId> + <version>0.8</version> <executions> <execution> - <id>create-assembly</id> - <phase>package</phase> + <id>attach-licenses</id> + <goals> + <goal>license</goal> + <goal>third-party</goal> + </goals> </execution> </executions> </plugin> - <!-- always add license and third-party files to classpath --> + <!-- launch in a release the assembly automaticly --> <plugin> - <groupId>org.codelutin</groupId> - <artifactId>maven-license-switcher-plugin</artifactId> - <version>0.6</version> + <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> - <id>attach-licenses</id> + <phase>verify</phase> <goals> - <goal>license</goal> - <goal>third-party</goal> + <goal>single</goal> </goals> </execution> </executions> Modified: lutinutil/trunk/src/main/assembly/deps.xml =================================================================== --- lutinutil/trunk/src/main/assembly/deps.xml 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/assembly/deps.xml 2009-05-11 01:06:25 UTC (rev 1503) @@ -14,20 +14,33 @@ <scope>runtime</scope> </dependencySet> </dependencySets> - <files> - <file> - <source>target/${artifact.artifactId}-${artifact.version}.jar</source> - </file> - <!-- <file> - <source>target/classes/THIRD-PARTY.txt</source> - </file> --> - </files> + <fileSets> <fileSet> + <directory>target</directory> + <outputDirectory>/</outputDirectory> <includes> + <include>*.jar</include> + </includes> + <excludes> + <exclude>*-sources.jar</exclude> + <exclude>*-javadoc.jar</exclude> + </excludes> + </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <includes> <include>README*</include> <include>LICENSE*</include> + <include>pom.xml</include> </includes> </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <directory>target/classes</directory> + <includes> + <include>THIRD-PARTY.txt</include> + </includes> + </fileSet> </fileSets> </assembly> \ No newline at end of file Modified: lutinutil/trunk/src/main/assembly/full.xml =================================================================== --- lutinutil/trunk/src/main/assembly/full.xml 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/assembly/full.xml 2009-05-11 01:06:25 UTC (rev 1503) @@ -13,25 +13,35 @@ <scope>runtime</scope> </dependencySet> </dependencySets> - <files> - <file> - <source>target/${artifact.artifactId}-${artifact.version}.jar</source> - </file> - <!-- <file> - <source>target/classes/THIRD-PARTY.txt</source> - </file> --> - </files> <fileSets> <fileSet> + <directory>target</directory> + <outputDirectory>/</outputDirectory> <includes> + <include>*.jar</include> + </includes> + <excludes> + <exclude>*-sources.jar</exclude> + </excludes> + </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <includes> <include>README*</include> <include>LICENSE*</include> <include>pom.xml</include> </includes> </fileSet> <fileSet> + <outputDirectory>/</outputDirectory> + <directory>target/classes</directory> + <includes> + <include>THIRD-PARTY.txt</include> + </includes> + </fileSet> + <fileSet> <directory>src</directory> - <useDefaultExcludes>true</useDefaultExcludes> + <!--useDefaultExcludes>true</useDefaultExcludes--> </fileSet> </fileSets> </assembly> \ No newline at end of file Modified: lutinutil/trunk/src/main/java/org/codelutin/i18n/I18n.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/i18n/I18n.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/i18n/I18n.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -303,12 +303,12 @@ } /** - * Parse a list of {@link Locale} sepearated by comma. + * Parse a list of {@link Locale} seperated by comma. * * Example : fr_FR,en_GB * * @param str the string representation of locale separated by comma - * @return + * @return list of available locales * @throws IllegalArgumentException ia a locale is not valid */ public static Locale[] parseLocales(String str) throws IllegalArgumentException { Modified: lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -460,7 +460,7 @@ * Obtain some rescue entries for a given locale. * <p/> * Note: <b>Calling this method implies there is no entry matched by the common method - * {@link #getBundleEntries(java.util.Locale)} return a empty array. + * {@link #getBundleEntries(Locale, Locale, I18nBundle[])} return a empty array. * * @param bundle the bundle to promute * @param l the locale required Modified: lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -44,7 +44,7 @@ * @author chemit * * @deprecated since 1.0.6, on prefere utiliser une seule classe qui gere le - * chargement {@link I18nLoader} et une classe utilitaire qui permet de + * chargement {@link org.codelutin.i18n.I18nLoader} et une classe utilitaire qui permet de * reutiliser le code {@link I18nBundleFactory}. * */ Modified: lutinutil/trunk/src/main/java/org/codelutin/log/LutinLogFactory.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/log/LutinLogFactory.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/log/LutinLogFactory.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -227,7 +227,7 @@ getParentFactory().setAttribute(arg0, arg1); } - /** @return */ + /** @return the logger timer */ public Timer getTimer() { if (timer == null) { timer = new Timer("LutinLogTimer", true); Modified: lutinutil/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -295,8 +295,8 @@ protected Properties line = new Properties(jvm); protected Properties options = new Properties(line); - protected Map<String, CacheItem> cacheOption = new HashMap<String, ApplicationConfig.CacheItem>(); - protected Map<Class, Object> cacheAction = new HashMap<Class, Object>(); + protected Map<String, CacheItem<?>> cacheOption = new HashMap<String, CacheItem<?>>(); + protected Map<Class<?>, Object> cacheAction = new HashMap<Class<?>, Object>(); /** contient apres l'appel de parse, la liste des arguments non utilises */ protected List<String> unparsed = new ArrayList<String>(); @@ -567,6 +567,7 @@ /** * get option value as typed value * + * @param <T> type of the object wanted as return type * @param clazz type of object wanted as return type * @param key the option's key * @return typed value @@ -581,7 +582,7 @@ if (value != null) { hash = value.hashCode(); } - CacheItem<T> cacheItem = cacheOption.get(cacheKey); + CacheItem<T> cacheItem = (CacheItem<T>)cacheOption.get(cacheKey); // compute value if value don't exist in cacheOption or // if it's modified since last computation if (cacheItem == null || cacheItem.hash != hash) { @@ -624,8 +625,8 @@ * @param key the option's key * @return typed value */ - public Class getOptionAsClass(String key) { - Class result = getOption(Class.class, key); + public Class<?> getOptionAsClass(String key) { + Class<?> result = getOption(Class.class, key); return result; } @@ -754,7 +755,7 @@ * * @param name name of the action * @param args - * @return + * @return the created action * @throws ArgumentsParserException * @throws IllegalAccessException * @throws IllegalArgumentException @@ -764,7 +765,7 @@ protected Action createAction(String name, ListIterator<String> args) throws ArgumentsParserException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Action result = null; - Class clazz; + Class<?> clazz; Method method = null; String className; String methodName; Modified: lutinutil/trunk/src/main/java/org/codelutin/util/FormatConverter.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/util/FormatConverter.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/util/FormatConverter.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -38,6 +38,8 @@ * gère et inversement. Pour des raisons d'optimisation, il est possible * qu'un converter sache passé d'un autre type que java vers sa representation * pour eviter une conversion supplémentaire qui pourrait-etre couteuse. + * + * @param <A> le type de l'objet a convertir */ public interface FormatConverter<A> { // FormatConverter @@ -52,7 +54,7 @@ * @param format le format souhaité en sortie * @param values une map contenant les différentes representation de la * meme valeur. Les cles de la map sont les valeurs retournés par la - * methode {@link #getFormat()}. + * methode getFormat(). * @param args des arguments qui peuvent-être utile pour la conversion. * par exemple si dans une application on a construit son propre * converter et que pour la conversion, on a besoin d'un Context applicatif @@ -82,6 +84,7 @@ * converter et que pour la conversion, on a besoin d'un Context applicatif * il peut-etre passé dans les args. Si le converter a besoin d'autre * converter les memes args lui seront passé. + * @return la valeur java * @throws IllegalArgumentException si le format géré par cette classe n'est * pas trouvé dans les values. Ou s'il manque dans les args des objets utils * pour la conversion. Modified: lutinutil/trunk/src/main/java/org/codelutin/util/FormatMap.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/util/FormatMap.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/util/FormatMap.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -26,7 +26,6 @@ * Last update: $Date$ * by : $Author$ */ - package org.codelutin.util; import org.codelutin.util.FormatMap.Format; @@ -69,37 +68,47 @@ private static final long serialVersionUID = -3386611811885092898L; static public class Format { + protected String name = null; public Format(String name) { this.name = name; } + @Override public String toString() { return name; } } + protected Class<?> clazz = null; - protected Class clazz = null; - - public FormatMap(Class clazz) { + public FormatMap(Class<?> clazz) { this.clazz = clazz; } - public Class getType() { + public Class<?> getType() { return clazz; } /** * Met a jour la valeur de l'objet. Toutes les autres valeurs calculées * sont oubliées et seront recalculé en fonction de cette nouvelle valeur + * + * @param format le format a utiliser + * @param value */ public void setValue(Format format, Object value) { clear(); put(format, value); } - /** Utilise le FormatConverterFactory par defaut pour la conversion */ + /** + * Utilise le FormatConverterFactory par defaut pour la conversion + * + * @param format le format a utiliser + * @param args les arguments + * @return l'objet converti + */ public Object convert(Format format, Object... args) { return convert(FormatConverterFactory.getInstance(), format, args); } @@ -110,9 +119,10 @@ * @param factory la FormatConverterFactory a utiliser * @param format le format souhaité * @param args des arguments facultatifs en fonction du context d'utilisation + * @return l'objet converti */ public Object convert(FormatConverterFactory factory, Format format, - Object... args) { + Object... args) { Object result = null; Map<Format, Object> values = this; //if (!values.containsKey(format) || @@ -139,7 +149,11 @@ return result; } - /** Utilise le FormatConverterFactory par defaut pour la conversion */ + /** Utilise le FormatConverterFactory par defaut pour la conversion + * @param format le format utilise + * @param args + * @return l'objet java + */ public Object unconvert(Format format, Object... args) { return unconvert(FormatConverterFactory.getInstance(), format, args); } @@ -151,9 +165,10 @@ * @param factory la factory a utiliser * @param format le format de départ souhaité * @param args des arguments facultatifs en fonction du context d'utilisation + * @return l'objet java */ public Object unconvert(FormatConverterFactory factory, Format format, - Object... args) { + Object... args) { Object result = null; Map<Format, Object> values = this; if (!values.containsKey(format) && @@ -171,6 +186,5 @@ return result; } - } // FormatMap Modified: lutinutil/trunk/src/main/java/org/codelutin/util/ObjectUtil.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/util/ObjectUtil.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/util/ObjectUtil.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -67,7 +67,7 @@ * <li> name='my string with , in string' * * @param classnameAndProperties - * @return + * @return the instanciated object * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException @@ -86,7 +86,7 @@ } else { classname = classnameAndProperties; } - Class clazz = Thread.currentThread().getContextClassLoader().loadClass(classname); + Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(classname); Object o = clazz.newInstance(); if (properties != null) { for (String prop : properties) { @@ -104,7 +104,7 @@ return o; } - static protected Object convert(String v, Class clazz) { + static protected Object convert(String v, Class<?> clazz) { Object t = ConvertUtils.convert(v, clazz); if (t != null && @@ -125,10 +125,14 @@ * @param m method to call * @param params parameters for method call * @return returned method's value + * @throws IllegalAccessException + * @throws IllegalArgumentException + * @throws InvocationTargetException + * @throws InstantiationException */ public static Object call(Object o, Method m, String ... params) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { - Class[] types = m.getParameterTypes(); + Class<?>[] types = m.getParameterTypes(); if (!m.isVarArgs() && params.length != types.length) { throw new IllegalArgumentException(String.format( "Bad number params we have %1$s parameters and waiting %2$s.", @@ -144,15 +148,15 @@ Object[] parameters = new Object[types.length]; for (int i=0; i<last; i++) { String v = params[i]; - Class clazz = types[i]; + Class<?> clazz = types[i]; Object t = convert(v, clazz); parameters[i] = t; } if (m.isVarArgs()) { - Class clazz = types[last]; // get var args type + Class<?> clazz = types[last]; // get var args type clazz = clazz.getComponentType(); // get array component type - List tmp = new ArrayList(); + List<Object> tmp = new ArrayList<Object>(); for (int i=last; i<params.length; i++) { String v = params[i]; Object t = convert(v, clazz); @@ -170,11 +174,12 @@ /** * Get all methods with name given in argument without check parameters + * @param clazz * @param methodName method name to search * @param ignoreCase if true, ignore difference in method name case - * @return + * @return list of detected methods */ - public static List<Method> getMethod(Class clazz, String methodName, boolean ignoreCase) { + public static List<Method> getMethod(Class<?> clazz, String methodName, boolean ignoreCase) { List<Method> result = new ArrayList<Method>(); Method[] methods = clazz.getMethods(); @@ -200,7 +205,7 @@ } else { classname = constructorWithParams; } - Class clazz = Thread.currentThread().getContextClassLoader().loadClass(classname); + Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(classname); Object result = newInstance(clazz, params); return result; } @@ -210,9 +215,11 @@ * constructor with beanutils converter, first constructor that permit * instanciation is used * - * @param clazz class to instanciated + * @param <T> type to instanciate + * @param clazz class to instanciate * @param params parameters for constructor call * @return new instance of clazz + * @throws IllegalArgumentException */ public static <T> T newInstance(Class<T> clazz, String ... params) throws IllegalArgumentException { @@ -223,7 +230,7 @@ for (Constructor<T> c : constructors) { try { - Class[] types = c.getParameterTypes(); + Class<?>[] types = c.getParameterTypes(); int last = types.length; if (c.isVarArgs()) { @@ -234,15 +241,15 @@ Object[] parameters = new Object[types.length]; for (int i = 0; i < last; i++) { String v = params[i]; - Class argClazz = types[i]; + Class<?> argClazz = types[i]; Object t = convert(v, argClazz); parameters[i] = t; } if (c.isVarArgs()) { - Class argClazz = types[last]; // get var args type + Class<?> argClazz = types[last]; // get var args type argClazz = argClazz.getComponentType(); // get array component type - List tmp = new ArrayList(); + List<Object> tmp = new ArrayList<Object>(); for (int i = last; i < params.length; i++) { String v = params[i]; Object t = convert(v, argClazz); @@ -272,16 +279,17 @@ * Get all constructors that support paramNumber as parameters numbers. * Varargs is supported * + * @param <T> le type de la classe a inspecter * @param clazz la classe sur lequel rechercher le constructeur * @param paramNumber le nombre de parametre souhaite pour le constructeur, * -1 indique que tous les constructeur sont souhaite. - * @return + * @return list of constructors */ + @SuppressWarnings("unchecked") public static <T> List<Constructor<T>> getConstructor(Class<T> clazz, int paramNumber) { List<Constructor<T>> result = new ArrayList<Constructor<T>>(); - - Constructor[] constructors = clazz.getConstructors(); - for (Constructor c : constructors) { + Constructor<T>[] constructors = (Constructor<T>[])clazz.getConstructors(); + for (Constructor<T> c : constructors) { if (paramNumber < 0 || (c.isVarArgs() && c.getParameterTypes().length <= paramNumber - 1) || c.getParameterTypes().length == paramNumber) { Modified: lutinutil/trunk/src/main/java/org/codelutin/util/StringUtil.java =================================================================== --- lutinutil/trunk/src/main/java/org/codelutin/util/StringUtil.java 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/main/java/org/codelutin/util/StringUtil.java 2009-05-11 01:06:25 UTC (rev 1503) @@ -431,7 +431,7 @@ /** * @param value - * @return + * @return the memory representation of the given value * @see #convert(long, double[], String[]) */ static public String convertTime(long value) { @@ -441,7 +441,7 @@ /** * @param value * @param value2 - * @return + * @return the time representation of the given value * @see #convert(long, double[], String[]) */ static public String convertTime(long value, long value2) { @@ -455,7 +455,7 @@ /** * @param value - * @return + * @return the memory representation of the given value * @see #convert(long, double[], String[]) */ static public String convertMemory(long value) { @@ -469,7 +469,7 @@ * @param value * @param factors * @param unites - * @return + * @return the converted representation of the given value */ static public String convert(long value, double[] factors, String[] unites) { long sign = value == 0 ? 1 : value / Math.abs(value); Copied: lutinutil/trunk/src/site/rst/CommandLineArgumentApplication.rst (from rev 1501, lutinutil/trunk/src/site/fr/rst/CommandLineArgumentApplication.rst) =================================================================== --- lutinutil/trunk/src/site/rst/CommandLineArgumentApplication.rst (rev 0) +++ lutinutil/trunk/src/site/rst/CommandLineArgumentApplication.rst 2009-05-11 01:06:25 UTC (rev 1503) @@ -0,0 +1,124 @@ +====================== +Argument d'application +====================== + +Il y a deux type d'argument d'application: +- les arguments permettant de modifier la configuration qui peuvent aussi + être dans un fichier de configuration ou en variable d'environnement. +- les arguments permettant d'indiquer des actions a faire a l'application + +Les options de configuration +============================ + +Les options de configuration peuvent être décrit directement par un POJO +avec des annotations:: + + @OptionConfigOrder("resource MonApp.properties", "file /etc/MonApp.properties", + "optionfile configFile", "env", "line") + public class MonAppConfig extends OptionConfig { + + @Option + @OptionSaveFile + public File configFile = new File("$HOME/.MonApp"); + + @Option(pattern [^\s]+) + public String username = "anonyous"; + + @Option(pattern ..) + public String lang = "fr"; + + @Option(pattern ..) + public String country = "FR"; + + @Option + public boolean showGui = true; + + @Option(min=10, max=10) + public List<Integer> value; + + @Unparsed + public List<String> other; + } + +La classe OptionConfig +---------------------- + +La classe OptionConfig contient plusieurs méthodes: + +- load sans argument qui permet de charger le POJO en fonction de + OptionConfigOrder +- load(File) qui permet de charger le POJO seulement en fonction d'un + fichier. Il bien sur possible d'appeler load() puis load(File). +- save qui permet de sauver les informations du POJO, le fichier ou sauver + les options est indiqué par l'annotation @OptionSaveFile + +Annotation OptionConfigOrder +---------------------------- + +OptionConfigOrder permet de déterminer l'ordre de recherche de la bonne +valeur des options. Le dernier indiqué sera le dernier lu et donc celui qui +aura raison. + +resource + indique un fichier resource a rechercher dans le classpath + +file + indique un fichier sur le systeme de fichier + +optionfile + indique un fichier dont le chemin est indiqué par une option + +env + indique les variables d'environnement du processus + +line + indique les options sur la ligne de commande + +Implantation +~~~~~~~~~~~~ + +# On charge dans un objet **Properties** chaque entre de + **OptionConfigOrder** sauf **optionfile** s'il y en a. +# On chaine tous les fichiers de proprietes pour pouvoir demander + l'information au dernier qui recherchera lui meme dans son pere s'il n'a pas + l'informaiton. +# Pour chaque **optionfile** on demande sa valeur, on crée le fichier de + propriété et on l'ajoute dans la chaine à la bonne place +# Pour chaque option trouvé dans le POJO on met a jour sa valeur avec la + valeur trouvé dans les propriétés. + +Annotation Option +----------------- + +Indique une option possible. Elle peut contenir: + +- description +- pattern +- alias +- min +- max + +Par defaut l'option sur la ligne de commande sera le nom de la variable precedé de -- + +Annotation Unparsed +------------------- + +Indique que toutes les options de la ligne de commande non reconnu finisse dans ce champs +Il est possible de type la collection autrement que par String. + +Annotation OptionSaveFile +------------------------- + +Indique le fichier a utiliser pour sauver les options + +Les actions +=========== + +TODO: comment différencier les actions des options ? comment reutiliser le travail de tony ? + +Amélioration possible +===================== + +- Générer automatiquement par un plugin maven les methodes get/set sur les options +- Gérer les options read/write et read +- un plugin maven qui verifie la coherence des options Property changes on: lutinutil/trunk/src/site/rst/CommandLineArgumentApplication.rst ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:mergeinfo + Name: svn:eol-style + native Copied: lutinutil/trunk/src/site/rst/LutinUtil.rst (from rev 1501, lutinutil/trunk/src/site/fr/rst/LutinUtil.rst) =================================================================== --- lutinutil/trunk/src/site/rst/LutinUtil.rst (rev 0) +++ lutinutil/trunk/src/site/rst/LutinUtil.rst 2009-05-11 01:06:25 UTC (rev 1503) @@ -0,0 +1,255 @@ +========================= +Documentation - LutinUtil +========================= + +:Authors: Benjamin POUSSIN, Nolwenn RANNOU +:Contact: poussin@codelutin.com +:Revision: $Revision$ +:Date: $Date$ + +.. sectnum:: + +.. contents:: + + +LutinUtil contient un ensemble de librairies trop petites pour avoir +leur propre projet. Elles sont aussi utile à la plupart des projets de +Code Lutin. + + +Resource +======== + +Cette librairie permet de rechercher une ressource dans le maximum +d'endroit possible et si elle est trouvée l'url de la ressource est +retournée. + +:: + + import org.codelutin.util.Resource; + import java.net.URL; + ... + URL image = Resource.getURL("/images/bidulle.png"); + ... + +Dans cet exemple l'image est recherchée sur le système de fichier +local, si elle n'est pas trouvée, elle est recherché dans le +classpath, et si elle n'est toujours pas trouvée une exception est +alors levée. + + +ArgumentsParser +=============== + +Cette librairie permet de traiter les arguments de la ligne de commande de +façon simple mais évoluable. Son principe de fonctionnement est que l'on +déclare les arguements que l'on attend sur la ligne de commande avec le nombre +de paramètre qu'ils prennent et une petite description de l'option. Ensuite +on dispose de toutes les fonctions utiles pour le traitement de la ligne de +commande. + +Voici un exemple d'utilisation:: + + import org.codelutin.util.ArgumentsParser; + ... + ArgumentsParser parser = new ArgumentsParser("ToPIA"); + + parser.addOption("version", "affiche le numéro de version", new String[]{"--version", "-v"}, 0).setRepetitionMax(1); + + parser.addOption("help", "affiche l'aide de topia", new String[]{"--help", "-h"}, 0).setRepetitionMax(1); + + parser.addOption("start", "Lancement d'une application", new + String[]{"--start", "-s"}, 1).setRepetitionMax(1); + + System.out.println(parser.checkCoherence()); + parser.parse(args); + + if(parser.hasParsedOption("help")){ + System.out.println(parser.usage()); + }else if (parser.hasParsedOption("start")){ + System.out.println ("--> Executing application: "); + String arg = parser.getParsedOption("start") + new Application(arg); + }else if (parser.hasParsedOption("version")){ + System.out.println( "- Topia version 0.01 - " + + "Get new release at http://www.codelutin.com/ -" ); + } + +Cette librairie permet d'afficher l'aide de la ligne de commande:: + + System.out.println(parser.usage()); + +Elle permet aussi de vérifier le nombre de fois qu'une option de la ligne de +commande est présente et que ce nombre est bien compris dans l'ensemble des +valeurs acceptées, grâce au méthode *setRepetitionMax*, et *setRepetitionMin*. + +Si l'implantation par défaut du parseur d'option ne convient pas pour une de vos +option, par exemple si le nombre de paramètre de l'option varie suivant la valeur +du premier paramètre vous pouvez alors écrire votre propre Parser pour cette +Option et l'utilisée avec les autres. + + +Log +=== + +Cette objet permet de suivre ce que fait une application simplement. Le +développeur indique grâce à cette classe l'état dans lequel l'application est. + +Ensuite, il peut mettre des listeners sur cette classe qui afficheront +les messages qui ont été envoyés. Ou afficheront l'état d'une tâche en train +de s'exécuter. + + +Liste des librairies +==================== + +Cette liste répertorie l'ensemble des librairies de LutinUtil. + + +Configuration +------------- +Gestion de la configuration d'une l'application, de l'internationalisation, +des numéros de versions, des ressources... + +ApplicationConfig + Gestion des fichiers de configuration, des variables d'environnement + et des arguments de la ligne de commande. +Resource + Recherche d'un fichier dans le système de fichiers et dans le classpath + (.jar, .zip). +ClassLoaderUtil + Récupération des urls d'un URLClassLoader. +LocaleConverter + Conversion d'une chaîne en Locale. +SortedProperties + Fichier de propriétés trié par ordre alphabétique. +RecursiveProperties + Fichier de propriétés contenant des références à des propriétés de ce + même fichier. +VersionNumber + Représentation d'un numéro de version pour une application. +VersionNumberConverter + Conversion d'une chaine en VersionNumber. +VersionNumberUtil + Manipulation de numéros de version sous forme de chaînes + (comparaison, incrémentation...). + + +Fichiers +-------- +Gestion de fichiers. + +FileUtil + Opérations sur des fichiers. Copie, suppression, renommage, + recherche, fichiers d'un répertoire, sous-répertoires d'un répertoire, + récupération du basename ou de l'extension, création d'un fichier + temporaire, comparaison de dates de création, récupération d'une chaîne, + d'un Reader ou d'un Writer à partir d'un fichier, récupération du fichier + saisi dans une boîte de dialogue, conversions en byte[], en Stream... +IOUtils + Copie d'un fichier, chemin temporaire... +ZipUtil + Opérations sur des fichiers Zip. Compression et décompression avec ou + sans filtres, scan des fichiers créés ou écrasés lors de la décompression... +ZipStreamEncoder + Encodage de fichiers Zip dans des threads. + + +Collections +----------- +Gestion de collections et de tableaux. + +CollectionUtil + Manipulation des collections. Ajout de plusieurs éléments à une + collection, conversion d'une collection non typée en collection typée. +ArrayUtil + Opérations sur des tableaux. Concaténation, somme, recherche, + conversion d'une liste en tableau, d'un String[] en int[]. +BoundedList + ArrayList avec un nombre d'élément minimum et maximum. +HashList + Liste d'objets uniques. +TransformedList + Liste d'objets transformables (interface Transformer). + + +Chaînes de caractères +--------------------- +Gestion des chaînes de caractères. + +StringUtil + Manipulation de chaînes de caractères. Découpage, suppression + d'accents, vérification de parenthésage, conversions vers un nombre, + un tableau, une couleur, une date... +URIConverter + Conversion d'une chaîne en URI. +URLConverter + Conversion d'une chaîne en URL. +GZUtil + Compression et décompression de chaînes de caractères. + + +Analyse +------- +Analyse du code et monitoring. + +CallAnalyse + Analyse sur des appels de méthodes. Temps d'éxecution, mémoire + utilisée et nombre d'appels. +Log + Mise en place de logs dans une application. +LoggingPatternFormatter + Formattage des logs. + + +Énumérations +------------ +Gestion des énumérations et énumérations utiles. + +EnumConverter + Conversion d'une chaîne en Enum. +EnumEditor + Editeur d'Enum en Swing. +H2TypeEnum + Énumération pour représenter les différents types d'implantation dans H2. +MonthEnum + Énumération pour représenter les mois d'une année. +SimplePaginationEnum + Énumération pour définir les tailles de liste. + + +Introspection +------------- +Introspection et manipulations sur des objets et des classes. + +ObjectUtil + Outils pour manipuler des objets. Création d'un objet à partir d'une chaîne + le décrivant, conversion d'un objet en Object, récupération de méthodes + à partir de leur nom, de constructeurs à partir de leurs paramètres... +ReflectUtil + Introspection sur une classe. Détermine si un attribut est constant, + recherche de constantes d'un type donné, conversion d'une classe en + Enum... +FormatConverter + Conversion d'une représentation d'un objet à une autre représentation. + (Java, SQL, XML...). + + +Divers +------ +Autres librairies utiles n'appartenant à aucune des catégories précédentes. + +CardinalityHelper + Méthodes pour tester des cardinalités. +ListenerSet + Mise en place de listeners. +CategorisedListenerSet + Gestion des catégories de listeners. +ConverterUtil + Méthodes sur des converters. +DigestGenerator + Fonctionnalités de Digest XML. +MD5 + Implémentation des MD5 hash. +MD5InputStream + MD5 dans un flux. Property changes on: lutinutil/trunk/src/site/rst/LutinUtil.rst ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:mergeinfo + Name: svn:eol-style + native Copied: lutinutil/trunk/src/site/rst/Todo.rst (from rev 1501, lutinutil/trunk/src/site/fr/rst/Todo.rst) =================================================================== --- lutinutil/trunk/src/site/rst/Todo.rst (rev 0) +++ lutinutil/trunk/src/site/rst/Todo.rst 2009-05-11 01:06:25 UTC (rev 1503) @@ -0,0 +1,80 @@ +Un nouveau parser d'argument +============================ + +L'idée est d'avoir une description simple des arguments et de leur type et +que soit généré une classe à partir de cette description. Dans le +programme il suffirat de demander à la classe généré les inforamtions. + +Les options sont chargées par leur valeur par defaut, puis sont surchargées +par les valeurs des fichiers de configurations, puis surchargé +par les valeurs des variables d'environnement, et enfin surchargé par les +valeurs de la ligne de commande. + +Les fichiers de configuraiton sont lu dans l'ordre suivant: /etc/ + chemin +indiqué, puis $HOME/. + chemin indiqué. + +si le chemin indiqué est titi/toto.conf et que l'on est sur un système Linux +les fichiers de configuration seront: /etc/titi/toto.conf et +~/.titi/toto.conf + +exemple de description +---------------------- + +Par exemple on pourrait avoir le fichier Toto.java.conf dans les sources du +projet qui fournirait le fichier Toto.java:: + + configfile: titi/toto.conf + + outFile: le fichier de sortie + short: o + long: outfile + default: - + type: File + environment: toto + + number: Le nombre de fichier à produire + required: 1 + short: n + default: 1 + long: number + condition: 0<Number && Number<10 + type: int + +La description commence l'option non obligatoire *configfile* qui donne le +nom du fichier de configuration à utiliser pour l'application. Puis on +trouve les options. Une option commence par un nom, puis sa description +ensuite l'option peut avoir plusieurs options: + +- short: l'option courte sur la ligne de commande. Si absente pas d'option + courte +- long: l'option longue sur la ligne de commande, si pas d'option, on + reprend le nom de l'option +- type: le type de l'option (int, Float, String, char, File, ...) +- default: la valeur par default, si elle n'est pas specifier sur la ligne + de commande, ni dans les variables d'environnement ni dans le fichier de + configuration. Pour une option de type File si default faut -, alors + le fichier est la sortie standard. +- condition: la condition que doit respecter l'option pour être valide + la condition est une expression java contenant le nom de l'option comme + valeur de variable. +- environment: le nom de la variable d'environnement qu'il faut utiliser + si l'option n'est pas retrouve sur la ligne de commande. Si cette option + n'est pas indiqué alors, la variable d'environnement recherchée est le nom + du fichier de description suivi d'un point, suivi du nom de l'option. + par exemple toto.outfile + + +L'objet résultat sera Toto placé dans le fichier Toto.java. L'extension +java.conf est obligatoire pour détecter un fichier de configuration à +parser. Cet objet aurai les méthodes getOutputFile():File et getNumber():int + +Librairies utilisé +------------------ + +Sans doute utilisé, le parser redwood pour le fichier de configuration +http://www.isellrenohomes.com/parser/. Il lit directement des EBNF. + +projet de parsage d'argument +---------------------------- + +http://www.martiansoftware.com/jsap/ Property changes on: lutinutil/trunk/src/site/rst/Todo.rst ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:mergeinfo + Name: svn:eol-style + native Copied: lutinutil/trunk/src/site/rst/index.rst (from rev 1501, lutinutil/trunk/src/site/fr/rst/index.rst) =================================================================== (Binary files differ) Property changes on: lutinutil/trunk/src/site/rst/index.rst ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Name: svn:mergeinfo + Modified: lutinutil/trunk/src/site/site.xml =================================================================== --- lutinutil/trunk/src/site/site.xml 2009-05-11 01:04:37 UTC (rev 1502) +++ lutinutil/trunk/src/site/site.xml 2009-05-11 01:06:25 UTC (rev 1503) @@ -4,9 +4,9 @@ <publishDate format="dd/MM/yyyy"/> <skin> - <groupId>org.codelutin</groupId> - <artifactId>maven-lutin-skin</artifactId> - <version>0.2.3</version> + <groupId>org.codelutin</groupId> + <artifactId>maven-lutin-skin</artifactId> + <version>0.2.3</version> </skin> <bannerLeft> @@ -38,10 +38,16 @@ </menu> <menu name="Téléchargement"> - <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}" - name="Télécharger la dernière version"/> - <item href="${labs.builder.url}/org/codelutin/${project.artifactId}" - name="Voir toutes les versions"/> + <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}.jar" + name="Librairie (jar)"/> + <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar" + name="Javadoc (jar)"/> + <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar" + name="Sources (jar)"/> + <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-deps.zip" + name="Bundle sans sources (zip)"/> + <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-full.zip" + name="Bundle complêt (zip)"/> </menu> <menu name="Développeur">
participants (1)
-
tchemit@users.labs.libre-entreprise.org