[Lutinutil-commits] r979 - in trunk/lutinutil: . doc 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/main/resources/i18n src/test/java/org/codelutin/i18n src/test/java/org/codelutin/i18n/bundle src/test/java/org/codelutin/log src/test/java/org/codelutin/util
Author: tchemit Date: 2008-08-04 19:25:34 +0000 (Mon, 04 Aug 2008) New Revision: 979 Removed: trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nable.java Modified: trunk/lutinutil/doc/CommandLineArgumentApplication.rst trunk/lutinutil/doc/LutinUtil.rst trunk/lutinutil/doc/Todo.rst trunk/lutinutil/doc/index.rst trunk/lutinutil/pom.xml trunk/lutinutil/src/main/java/org/codelutin/i18n/CountryEnum.java trunk/lutinutil/src/main/java/org/codelutin/i18n/I18n.java trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFileReader.java trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFilter.java trunk/lutinutil/src/main/java/org/codelutin/i18n/LanguageEnum.java trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundle.java trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogEvent.java trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogFactory.java trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogListener.java trunk/lutinutil/src/main/java/org/codelutin/log/LutinProgressEvent.java trunk/lutinutil/src/main/java/org/codelutin/log/MonitorMapper.java trunk/lutinutil/src/main/java/org/codelutin/log/ProgressMonitorFrame.java trunk/lutinutil/src/main/java/org/codelutin/log/ProgressState.java trunk/lutinutil/src/main/java/org/codelutin/util/ApplicationConfig.java trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParser.java trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserException.java trunk/lutinutil/src/main/java/org/codelutin/util/ArrayUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/BoundedList.java trunk/lutinutil/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java trunk/lutinutil/src/main/java/org/codelutin/util/CardinalityHelper.java trunk/lutinutil/src/main/java/org/codelutin/util/CategorisedListenerSet.java trunk/lutinutil/src/main/java/org/codelutin/util/CollectionUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/ConverterUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/EnumConverter.java trunk/lutinutil/src/main/java/org/codelutin/util/EnumEditor.java trunk/lutinutil/src/main/java/org/codelutin/util/FileCompletion.java trunk/lutinutil/src/main/java/org/codelutin/util/FileUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverter.java trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverterFactory.java trunk/lutinutil/src/main/java/org/codelutin/util/FormatMap.java trunk/lutinutil/src/main/java/org/codelutin/util/GZUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/GZUtilException.java trunk/lutinutil/src/main/java/org/codelutin/util/H2TypeEnum.java trunk/lutinutil/src/main/java/org/codelutin/util/HashList.java trunk/lutinutil/src/main/java/org/codelutin/util/HashMapMultiKey.java trunk/lutinutil/src/main/java/org/codelutin/util/LRUMapMultiKey.java trunk/lutinutil/src/main/java/org/codelutin/util/ListenerSet.java trunk/lutinutil/src/main/java/org/codelutin/util/LocaleConverter.java trunk/lutinutil/src/main/java/org/codelutin/util/Log.java trunk/lutinutil/src/main/java/org/codelutin/util/MonthEnum.java trunk/lutinutil/src/main/java/org/codelutin/util/RecursiveProperties.java trunk/lutinutil/src/main/java/org/codelutin/util/ReflectUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java trunk/lutinutil/src/main/java/org/codelutin/util/ResourceException.java trunk/lutinutil/src/main/java/org/codelutin/util/SortedProperties.java trunk/lutinutil/src/main/java/org/codelutin/util/StringUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/TransformedList.java trunk/lutinutil/src/main/java/org/codelutin/util/Transformer.java trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteSoftReference.java trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteWeakReference.java trunk/lutinutil/src/main/java/org/codelutin/util/URIConverter.java trunk/lutinutil/src/main/java/org/codelutin/util/URLConverter.java trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberConverter.java trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberUtil.java trunk/lutinutil/src/main/java/org/codelutin/util/ZipUtil.java trunk/lutinutil/src/main/resources/i18n/lutinutil-en_GB.properties trunk/lutinutil/src/main/resources/i18n/lutinutil-fr_FR.properties trunk/lutinutil/src/test/java/org/codelutin/i18n/I18nLoaderTest.java trunk/lutinutil/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java trunk/lutinutil/src/test/java/org/codelutin/log/LutinLogTest.java trunk/lutinutil/src/test/java/org/codelutin/util/CallAnalyseTest.java trunk/lutinutil/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java trunk/lutinutil/src/test/java/org/codelutin/util/ConverterUtilTest.java trunk/lutinutil/src/test/java/org/codelutin/util/FileUtilTest.java trunk/lutinutil/src/test/java/org/codelutin/util/HashMapMultiKeyTest.java trunk/lutinutil/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java trunk/lutinutil/src/test/java/org/codelutin/util/ListenerSetTest.java trunk/lutinutil/src/test/java/org/codelutin/util/LogTest.java trunk/lutinutil/src/test/java/org/codelutin/util/StringUtilTest.java trunk/lutinutil/src/test/java/org/codelutin/util/TransparenteReferenceTest.java trunk/lutinutil/src/test/java/org/codelutin/util/ZipUtilTest.java Log: passage en projet UTF8 reformat nettoyage des import suppression annotation I18nable utilisation de maven-i18n-plugin:0.4 qui ne traite que les fichiers modifi?\195?\169s Modified: trunk/lutinutil/doc/CommandLineArgumentApplication.rst =================================================================== --- trunk/lutinutil/doc/CommandLineArgumentApplication.rst 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/doc/CommandLineArgumentApplication.rst 2008-08-04 19:25:34 UTC (rev 979) @@ -4,13 +4,13 @@ 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. + ê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 +Les options de configuration peuvent être décrit directement par un POJO avec des annotations:: @OptionConfigOrder("resource MonApp.properties", "file /etc/MonApp.properties", @@ -43,20 +43,20 @@ La classe OptionConfig ---------------------- -La classe OptionConfig contient plusieurs m�thodes: +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 + 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 +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 @@ -66,7 +66,7 @@ indique un fichier sur le systeme de fichier optionfile - indique un fichier dont le chemin est indiqu� par une option + indique un fichier dont le chemin est indiqué par une option env indique les variables d'environnement du processus @@ -82,10 +82,10 @@ # 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. +# 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 ----------------- @@ -98,7 +98,7 @@ - min - max -Par defaut l'option sur la ligne de commande sera le nom de la variable preced� de -- +Par defaut l'option sur la ligne de commande sera le nom de la variable precedé de -- Annotation Unparsed ------------------- @@ -114,11 +114,11 @@ Les actions =========== -TODO: comment diff�rencier les actions des options ? comment reutiliser le travail de tony ? +TODO: comment différencier les actions des options ? comment reutiliser le travail de tony ? -Am�lioration possible +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 +- 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 Modified: trunk/lutinutil/doc/LutinUtil.rst =================================================================== --- trunk/lutinutil/doc/LutinUtil.rst 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/doc/LutinUtil.rst 2008-08-04 19:25:34 UTC (rev 979) @@ -13,7 +13,7 @@ LutinUtil contient un ensemble de librairies trop petites pour avoir -leur propre projet. Elles sont aussi utile � la plupart des projets de +leur propre projet. Elles sont aussi utile à la plupart des projets de Code Lutin. @@ -21,8 +21,8 @@ ======== 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. +d'endroit possible et si elle est trouvée l'url de la ressource est +retournée. :: @@ -32,19 +32,19 @@ 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. +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 +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. @@ -54,7 +54,7 @@ ... ArgumentsParser parser = new ArgumentsParser("ToPIA"); - parser.addOption("version", "affiche le num�ro de version", new String[]{"--version", "-v"}, 0).setRepetitionMax(1); + 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); @@ -79,22 +79,22 @@ 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*. +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. +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. +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. +les messages qui ont été envoyés. Ou afficheront l'état d'une tâche en train +de s'exécuter. Modified: trunk/lutinutil/doc/Todo.rst =================================================================== --- trunk/lutinutil/doc/Todo.rst 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/doc/Todo.rst 2008-08-04 19:25:34 UTC (rev 979) @@ -1,19 +1,19 @@ 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. +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 +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�. +indiqué, puis $HOME/. + chemin indiqué. -si le chemin indiqu� est titi/toto.conf et que l'on est sur un syst�me Linux +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 @@ -32,7 +32,7 @@ type: File environment: toto - number: Le nombre de fichier � produire + number: Le nombre de fichier à produire required: 1 short: n default: 1 @@ -41,7 +41,7 @@ type: int La description commence l'option non obligatoire *configfile* qui donne le -nom du fichier de configuration � utiliser pour l'application. Puis on +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: @@ -54,24 +54,24 @@ 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 +- 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 + 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 +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� +Librairies utilisé ------------------ -Sans doute utilis�, le parser redwood pour le fichier de configuration +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 Modified: trunk/lutinutil/doc/index.rst =================================================================== (Binary files differ) Modified: trunk/lutinutil/pom.xml =================================================================== --- trunk/lutinutil/pom.xml 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/pom.xml 2008-08-04 19:25:34 UTC (rev 979) @@ -78,6 +78,7 @@ <!-- compile with ? --> <maven.compile.source>1.6</maven.compile.source> <maven.compile.target>1.6</maven.compile.target> + <maven.compile.encoding>UTF-8</maven.compile.encoding> <!-- Lists URL --> <labs.lists>http://lists.labs.libre-entreprise.org/mailman/listinfo/lutinutil</labs.lists> @@ -131,8 +132,8 @@ <issueManagement> <url>http://labs.libre-entreprise.org/tracker/?group_id=12</url> </issueManagement> + <build> - <build> <plugins> <plugin> <groupId>lutinplugin</groupId> @@ -150,7 +151,7 @@ </configuration> <executions> <execution> - <phase>process-classes</phase> + <phase>process-resources</phase> <goals> <goal>parserJava</goal> <goal>gen</goal> @@ -237,7 +238,7 @@ <dependency> <groupId>lutinplugin</groupId> <artifactId>maven-i18n-plugin</artifactId> - <version>0.3-SNAPSHOT</version> + <version>0.4</version> </dependency> </dependencies> Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/CountryEnum.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/CountryEnum.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/CountryEnum.java 2008-08-04 19:25:34 UTC (rev 979) @@ -32,7 +32,7 @@ * * @author chemit */ -@org.codelutin.i18n.I18nable + public enum CountryEnum { AF, // AFG 004 AFGHANISTAN AL, // ALB 008 ALBANIA Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/I18n.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/I18n.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/I18n.java 2008-08-04 19:25:34 UTC (rev 979) @@ -59,7 +59,6 @@ * @author chemit * @created 2 decembre 2003 */ -@org.codelutin.i18n.I18nable public class I18n { public static final String ISO_8859_1_ENCONDING = "ISO-8859-1"; @@ -164,9 +163,9 @@ * @param message message formate avec la m?me syntaxe que {@link MessageFormat} * @param args les parametres pour le message. * @return la traduction si possible ou la chaine passee en parametre - * sinon. + * sinon. * @deprecated use {@link I18nf#_} that used String.format. When all project are - * switched this method use String.format too. + * switched this method use String.format too. */ @Deprecated public static String _(String message, Object... args) { @@ -207,7 +206,7 @@ * @return le message passe en argument mais formatte * avec les parametres * @deprecated use {@link I18nf#n_} that used String.format. When all project are - * switched this method use String.format too. + * switched this method use String.format too. */ @Deprecated public static String n_(String message, Object... args) { @@ -331,10 +330,10 @@ // get use locale return newLocale(null, null); } - try { + try { return ConverterUtil.convert(Locale.class, str); } catch (Exception e) { - Logger.getLogger("org.codelutin.i18n.I18n").warning("could not load locale '"+str+" for reason : "+e.getMessage()); + Logger.getLogger("org.codelutin.i18n.I18n").warning("could not load locale '" + str + " for reason : " + e.getMessage()); // use default locale return DEFAULT_LOCALE; } Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -19,7 +19,7 @@ /* * * i18nDefaultTooltipFilter.java * - * Created: 2 d�c. 2003 + * Created: 2 déc. 2003 * * @author Benjamin Poussin <poussin@codelutin.com> * Copyright Code Lutin @@ -32,8 +32,9 @@ package org.codelutin.i18n; public class I18nDefaultTooltipFilter implements I18nFilter { // I18nDefaultTooltipFilter - public String applyFilter(String message){ - if(message != null && message.startsWith("defaultToolTip-")) + + public String applyFilter(String message) { + if (message != null && message.startsWith("defaultToolTip-")) return null; return message; } Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFileReader.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFileReader.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFileReader.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2002, 2003, 2004 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -22,7 +22,7 @@ * * Created: Nov 22, 2004 * - * @author C�dric Pineau <pineau@codelutin.com> + * @author Cédric Pineau <pineau@codelutin.com> * @version $Revision$ * * Last update : $Date$ @@ -40,7 +40,7 @@ import java.util.Properties; import java.util.regex.Pattern; -/** Classe assurant la lecture et les possibles traitement n�cessaires � I18n. */ +/** Classe assurant la lecture et les possibles traitement nécessaires à I18n. */ public class I18nFileReader extends Properties { protected static final Pattern commentPattern = Pattern.compile("[^\\\\]#"); Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFilter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFilter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nFilter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -19,7 +19,7 @@ /* * * i18nFilter.java * - * Created: 2 d�c. 2003 + * Created: 2 déc. 2003 * * @author Benjamin Poussin <poussin@codelutin.com> * Copyright Code Lutin @@ -32,6 +32,7 @@ package org.codelutin.i18n; public interface I18nFilter { // I18nFilter + public String applyFilter(String message); } // I18nFilter Deleted: trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nable.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nable.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/I18nable.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,30 +0,0 @@ -/** - * ##% Copyright (C) 2008 Code Lutin, Tony Chemit - * This program is free software; you - * can redistribute it and/or modify it under the terms of the GNU General - * Public License as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. This program is - * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. See the GNU General Public License for more details. You - * should have received a copy of the GNU General Public License along with this - * program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - * - Suite 330, Boston, MA 02111-1307, USA. - * ##% - */ -package org.codelutin.i18n; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Une annotation pour marquer les classes java a traiter par le plugin i18n pour traiter les clefs. - * - * @author chemit - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface I18nable { -} Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/LanguageEnum.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/LanguageEnum.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/LanguageEnum.java 2008-08-04 19:25:34 UTC (rev 979) @@ -28,7 +28,7 @@ * * @author chemit */ -@org.codelutin.i18n.I18nable + public enum LanguageEnum { aa, // Afar ab, // Abkhazian Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundle.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundle.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundle.java 2008-08-04 19:25:34 UTC (rev 979) @@ -54,10 +54,10 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static final Log log = LogFactory.getLog(I18nBundle.class); - /** les entr�s du bundle */ + /** les entrés du bundle */ protected List<I18nBundleEntry> entries; - /** le nom du bundle encapsul� (correspond au prefix de l'url de chargement) */ + /** le nom du bundle encapsulé (correspond au prefix de l'url de chargement) */ final String bundlePrefix; public I18nBundle(String bundlePrefix) { Modified: trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java 2008-08-04 19:25:34 UTC (rev 979) @@ -113,7 +113,7 @@ for (I18nBundle i18nBundle : cache) { for (I18nBundleEntry entry : i18nBundle.getEntries()) { Locale o = entry.getLocale(); - if (o!=null && !result.contains(o)) { + if (o != null && !result.contains(o)) { result.add(o); } } @@ -221,12 +221,12 @@ } /** - * Recherche la liste des url de bundles i18n correspondant � la langue - * donn�. + * Recherche la liste des url de bundles i18n correspondant à la langue + * donné. * - * @param loader le classe loader o� trouver les bundles + * @param loader le classe loader où trouver les bundles * @param extraUrl extra urls to add - * @return la liste des urls de bundle i18n pour la langue donn� + * @return la liste des urls de bundle i18n pour la langue donné */ protected URL[] getURLs(URLClassLoader loader, URL... extraUrl) { Modified: trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogEvent.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogEvent.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogEvent.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -34,26 +34,23 @@ import java.util.EventObject; -/** - * @author poussin - * - */ +/** @author poussin */ public class LutinLogEvent extends EventObject { - + /** */ private static final long serialVersionUID = 1L; - + private LogType logType; - private String msg; + private String msg; private Throwable eee; private long time; - - static public enum LogType {user, trace, debug, info, warn, error, fatal} - - /** - * @param source - */ + + static public enum LogType { + user, trace, debug, info, warn, error, fatal + } + + /** @param source */ public LutinLogEvent(Object source, LogType logType, String msg, Throwable eee) { super(source); this.logType = logType; @@ -66,33 +63,25 @@ * @see java.util.EventObject#getSource() */ public LutinLog getLutinLog() { - return (LutinLog)super.getSource(); + return (LutinLog) super.getSource(); } - - /** - * @return the logType - */ + + /** @return the logType */ public LogType getLogType() { return this.logType; } - - /** - * @return the msg - */ + + /** @return the msg */ public String getMsg() { return this.msg; } - - /** - * @return the eee - */ + + /** @return the eee */ public Throwable getThrowable() { return this.eee; } - - /** - * @return the time - */ + + /** @return the time */ public long getTime() { return this.time; } Modified: trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogFactory.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogFactory.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogFactory.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,102 +31,94 @@ package org.codelutin.log; -import java.util.Timer; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogConfigurationException; import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.impl.LogFactoryImpl; import org.codelutin.util.CategorisedListenerSet; +import java.util.Timer; -/** - * @author poussin - * - */ +/** @author poussin */ + public class LutinLogFactory extends LogFactory { static private LutinLogFactory instance = null; - + protected LogFactory parentFactory = null; protected CategorisedListenerSet<LutinLogListener> listeners = new CategorisedListenerSet<LutinLogListener>(); protected long DefaultActiveProgressMonitorTime = 0; protected long DefaultTimeout = 0; private Timer timer; - + static public LutinLogFactory getInstance() { if (instance == null) { LogFactory factory = LogFactory.getFactory(); if (factory instanceof LutinLogFactory) { - instance = (LutinLogFactory)factory; + instance = (LutinLogFactory) factory; } else { instance = new LutinLogFactory(); } } return instance; } - + static public LutinLog getLutinLog(Class clazz) { LutinLogFactory factory = LutinLogFactory.getInstance(); - LutinLog result = (LutinLog)factory.getInstance(clazz); + LutinLog result = (LutinLog) factory.getInstance(clazz); return result; } - + static public LutinLog getLutinLog(String cat) { LutinLogFactory factory = LutinLogFactory.getInstance(); - LutinLog result = (LutinLog)factory.getInstance(cat); + LutinLog result = (LutinLog) factory.getInstance(cat); return result; } - - /** - * @return the defaultActiveProgressMonitorTime - */ + + /** @return the defaultActiveProgressMonitorTime */ public long getDefaultActiveProgressMonitorTime() { return this.DefaultActiveProgressMonitorTime; } - + /** - * @param defaultActiveProgressMonitorTime the defaultActiveProgressMonitorTime to set + * @param defaultActiveProgressMonitorTime + * the defaultActiveProgressMonitorTime to set */ public void setDefaultActiveProgressMonitorTime( long defaultActiveProgressMonitorTime) { this.DefaultActiveProgressMonitorTime = defaultActiveProgressMonitorTime; } - - /** - * @return the defaultTimeout - */ + + /** @return the defaultTimeout */ public long getDefaultTimeout() { return this.DefaultTimeout; } - - /** - * @param defaultTimeout the defaultTimeout to set - */ + + /** @param defaultTimeout the defaultTimeout to set */ public void setDefaultTimeout(long defaultTimeout) { this.DefaultTimeout = defaultTimeout; } - + /////////////////////////////////////////////////////////////////////////// // // L I S T E N E R // /////////////////////////////////////////////////////////////////////////// - + /** * Add listener on all LutinLog - * + * * @param l */ public void addLutinLogListener(LutinLogListener l) { listeners.add(this, l); } - + /** * Add listener on specific LutinLog - * + * * @param log * @param l */ @@ -134,28 +126,29 @@ listeners.addCategory(this, log); listeners.add(log, l); } - + /** * Add listener on all LutinLog - * + * * @param l */ public void removeLutinLogListener(LutinLogListener l) { listeners.remove(this, l); } - + /** * Add listener on specific LutinLog - * + * * @param log * @param l */ public void removeLutinLogListener(LutinLog log, LutinLogListener l) { listeners.remove(log, l); } - + /** - * Return le r�el commons-logging a utiliser + * Return le réel commons-logging a utiliser + * * @return the parentFactory */ protected LogFactory getParentFactory() { @@ -164,16 +157,17 @@ } return this.parentFactory; } - + /////////////////////////////////////////////////////////////////////////// // // C O M M O N S - L O G G I N G M E T H O D // /////////////////////////////////////////////////////////////////////////// - + /* (non-Javadoc) - * @see org.apache.commons.logging.LogFactory#getAttribute(java.lang.String) - */ + * @see org.apache.commons.logging.LogFactory#getAttribute(java.lang.String) + */ + @Override public Object getAttribute(String arg0) { Object result = getParentFactory().getAttribute(arg0); @@ -235,9 +229,7 @@ getParentFactory().setAttribute(arg0, arg1); } - /** - * @return - */ + /** @return */ public Timer getTimer() { if (timer == null) { timer = new Timer("LutinLogTimer", true); Modified: trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogListener.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogListener.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/LutinLogListener.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -34,16 +34,14 @@ import java.util.EventListener; -/** - * @author poussin - * - */ +/** @author poussin */ public interface LutinLogListener extends EventListener { public void progressEvent(LutinProgressEvent e); + public void logEvent(LutinLogEvent e); - + } Modified: trunk/lutinutil/src/main/java/org/codelutin/log/LutinProgressEvent.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/LutinProgressEvent.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/LutinProgressEvent.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -34,22 +34,19 @@ import java.util.EventObject; -/** - * @author poussin - * - */ +/** @author poussin */ public class LutinProgressEvent extends EventObject { - + /** */ private static final long serialVersionUID = 1L; private ProgressType type; - - static public enum ProgressType {min, max, value, askStop, cancelAskStop, start, end} - - /** - * @param source - */ + + static public enum ProgressType { + min, max, value, askStop, cancelAskStop, start, end + } + + /** @param source */ public LutinProgressEvent(Object source, ProgressType type) { super(source); this.type = type; @@ -59,16 +56,14 @@ * @see java.util.EventObject#getSource() */ public LutinLog getLutinLog() { - return (LutinLog)super.getSource(); + return (LutinLog) super.getSource(); } - - /** - * @return the type - */ + + /** @return the type */ public ProgressType getType() { return this.type; } - + } Modified: trunk/lutinutil/src/main/java/org/codelutin/log/MonitorMapper.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/MonitorMapper.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/MonitorMapper.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,6 +31,15 @@ package org.codelutin.log; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.log.LutinProgressEvent.ProgressType; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JProgressBar; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; import java.awt.Button; import java.awt.Component; import java.awt.Container; @@ -38,22 +47,12 @@ import java.awt.event.ActionListener; import java.beans.Statement; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JProgressBar; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.log.LutinProgressEvent.ProgressType; - - /** * Helper to monitor LutinLog. This class permit to say which component used * to display text, which component used to display progress and what is the - * cancel button - * + * cancel button + * * @author poussin */ @@ -61,7 +60,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(MonitorMapper.class); - + protected LutinLog lutinLog; protected Container parentContainer; protected Component label; @@ -70,35 +69,35 @@ protected boolean changeCancelText; /** - * - * @param lutinLog LutinLog to monitor - * @param parentContainer component that contains all other component - * if not null, then when task begin setVisible(true) is called - * and when task end setVisible(false) is called - * @param label component that have setText method to display user log - * ({@link JLabel}, {@link JTextField}, ...) - * @param progress progress widget - * @param cancel componant that have addActionListener - * ({@link JButton},{@link Button}, ...) + * @param lutinLog LutinLog to monitor + * @param parentContainer component that contains all other component + * if not null, then when task begin setVisible(true) is called + * and when task end setVisible(false) is called + * @param label component that have setText method to display user log + * ({@link JLabel}, {@link JTextField}, ...) + * @param progress progress widget + * @param cancel componant that have addActionListener + * ({@link JButton},{@link Button}, ...) * @param changeCancelText if true try to change text display in cancel - * component switch between "Cancel" and "Don't cancel" + * component switch between "Cancel" and "Don't cancel" */ - public MonitorMapper(LutinLog lutinLog, Container parentContainer, - Component label, JProgressBar progress, Component cancel, - boolean changeCancelText) { + public MonitorMapper(LutinLog lutinLog, Container parentContainer, + Component label, JProgressBar progress, Component cancel, + boolean changeCancelText) { this.lutinLog = lutinLog; this.parentContainer = parentContainer; this.label = label; this.progress = progress; this.cancel = cancel; this.changeCancelText = changeCancelText; - + lutinLog.addLutinLogListener(this); addActionListener(cancel, this); } - + /** * Try to call addActionListener on component, do nothing if call failed + * * @param c * @param action */ @@ -114,8 +113,10 @@ } } } + /** * try to call setText on component, do nothing if call failed + * * @param c * @param text text to put in component */ @@ -131,13 +132,13 @@ } } } - + /* (non-Javadoc) - * @see org.codelutin.log.LutinLogListener#logEvent(org.codelutin.log.LutinLogEvent) - */ + * @see org.codelutin.log.LutinLogListener#logEvent(org.codelutin.log.LutinLogEvent) + */ public void logEvent(LutinLogEvent e) { if (e.getLogType() == LutinLogEvent.LogType.user) { - SwingUtilities.invokeLater(new HandleLogEvent(e)); + SwingUtilities.invokeLater(new HandleLogEvent(e)); } } @@ -156,30 +157,36 @@ lutinLog.setAskStopTask(!oldValue); } - + /** * Used to update UI + * * @author poussin */ class HandleLogEvent implements Runnable { protected LutinLogEvent e; + public HandleLogEvent(LutinLogEvent e) { this.e = e; } + public void run() { setText(label, e.getMsg()); } } - + /** * Used to update UI + * * @author poussin */ class HandleProgressEvent implements Runnable { protected LutinProgressEvent e; + public HandleProgressEvent(LutinProgressEvent e) { this.e = e; } + public void run() { if (e.getType() == ProgressType.start) { int min = e.getLutinLog().getMin(); @@ -224,7 +231,7 @@ progress.setMaximum(0); progress.setValue(0); progress.setString(""); - } + } } } } Modified: trunk/lutinutil/src/main/java/org/codelutin/log/ProgressMonitorFrame.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/ProgressMonitorFrame.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/ProgressMonitorFrame.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,10 +31,6 @@ package org.codelutin.log; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; @@ -42,16 +38,12 @@ import javax.swing.JProgressBar; import javax.swing.SwingConstants; import javax.swing.WindowConstants; +import java.awt.Component; -import org.codelutin.log.LutinProgressEvent.ProgressType; - // 20060923 poussin FIXME we must can used i18n in util lib. (perhaps put i18n directly in util lib) //import static org.codelutin.i18n.I18n._; -/** - * @author poussin - * - */ +/** @author poussin */ public class ProgressMonitorFrame extends JFrame { @@ -60,40 +52,39 @@ protected JProgressBar progress; protected JButton cancel; protected MonitorMapper monitorMapper; - + /** - * - * @param lutinLog log that ProgressMonitorFrame must monitor + * @param lutinLog log that ProgressMonitorFrame must monitor * @param extraComponent optionnal (can be null) user component to put in - * frame + * frame */ public ProgressMonitorFrame(LutinLog lutinLog, Component extraComponent) { super("ProgressMonitor"); - + this.lutinLog = lutinLog; - + Box box = Box.createVerticalBox(); - + if (extraComponent != null) { box.add(extraComponent); } - + label = new JLabel("Message"); label.setHorizontalTextPosition(SwingConstants.CENTER); box.add(label); - - progress = new JProgressBar(); + + progress = new JProgressBar(); progress.setStringPainted(true); box.add(progress); - + cancel = new JButton(); cancel.setText("Cancel"); // TODO i18n box.add(cancel); - + this.add(box); this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); this.pack(); - + monitorMapper = new MonitorMapper(lutinLog, null, label, progress, cancel, true); } Modified: trunk/lutinutil/src/main/java/org/codelutin/log/ProgressState.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/log/ProgressState.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/log/ProgressState.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -32,10 +32,7 @@ package org.codelutin.log; -/** - * @author poussin - * - */ +/** @author poussin */ public enum ProgressState { start, stopAsked, end Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ApplicationConfig.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ApplicationConfig.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ApplicationConfig.java 2008-08-04 19:25:34 UTC (rev 979) @@ -19,8 +19,10 @@ package org.codelutin.util; -import java.util.logging.Level; -import java.util.logging.Logger; +import org.apache.commons.beanutils.ConstructorUtils; +import org.apache.commons.beanutils.ConvertUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.codelutin.i18n.I18nf._; import java.io.File; @@ -46,14 +48,10 @@ import java.util.ListIterator; import java.util.Map; import java.util.Properties; -import org.apache.commons.beanutils.ConstructorUtils; -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * <h1>To do</h1> - * + * <p/> * <ul> * <li> ajout d'annotations sur les methodes * pour precisser plus de chose pour les options (pattern, min/max, alias, @@ -67,51 +65,51 @@ * faire un plugin maven qui check que l'action existe bien durant la compilation. * Il est simple de le faire a l'execution mais c trop tard :( * </ul> - * + * <p/> * <h1>Usage</h1> * <li> create subclass of ApplicationConfig, where in constructor you call * addAliases, setConfigFileName, setDefaultActionPackage, setDefaultActionClass, setDefaultActionMethod * to have properly value. - * + * <p/> * <li> conf = new MonAppConfig(); * <li> conf.parse(args); * <li> here you can used conf.getOption(key); * <li> conf.doAction(0); * <li> ... * <li> conf.doAction(n); - * + * <p/> * <h1>Lecture des fichiers de configuration</h1> - * - * <p> + * <p/> + * <p/> * La lecture des fichiers de configuration se fait durant l'appel de la methode * {@link #parse} en utilisant la valeur de {@link #getConfigFileName} pour * trouver les fichiers (voir Les options de configuration pour l'ordre de * chargement des fichiers) - * + * <p/> * <h1>La sauvegarde</h1> - * - * <p> + * <p/> + * <p/> * La sauvegarde des options se fait via une des trois methodes disponible - * + * <p/> * <ul> - * <li> {@link #save(File, boolean)} sauve les donn�es dans le fichier demand� + * <li> {@link #save(File, boolean)} sauve les données dans le fichier demandé * <li> {@link #saveForSystem} sauvegarde les donnees dans /etc * <li> {@link #saveForUser} sauvegarde les donnees dans $HOME * </ul> - * + * <p/> * Lors de l'utilisation de la methode {@link saveForSystem} ou - * {@link saveForUser} seul les options lu dans un fichier ou modifier par + * {@link saveForUser} seul les options lu dans un fichier ou modifier par * programmation ({@link #setOption} seront sauvegardees. Par exemple les * options passees sur la ligne de commande ne seront pas sauvees. - * + * <p/> * <h1>Les options de configuration</h1> - * - * <p> - * Cette classe permet de lire les fichiers de configuration, utiliser les + * <p/> + * <p/> + * Cette classe permet de lire les fichiers de configuration, utiliser les * variable d'environnement et de parser la ligne de commande. L'ordre de prise - * en compte des informations trouv�es est la suivante (le premier le plus + * en compte des informations trouvées est la suivante (le premier le plus * important). - * + * <p/> * <ul> * <li>options ajoutees par programmation: {@link #setOption}(key, value)</li> * <li>ligne de commande</li> @@ -123,32 +121,32 @@ * <li>fichier de configuration trouve dans le classpath: $CLASSPATH/filename</li> * <li>options ajoutees par programmation: {@link #defaults}.put(key, value)</li> * </ul> - * - * <p> + * <p/> + * <p/> * Les options sur la ligne de commande sont de la forme: * <pre> * --option key value * --monOption key value1 value2 * </pre> - * + * <p/> * <ul> * <li>--option key value: est la syntaxe par defaut * <li>--monOption key value1 value2: est la syntaxe si vous avez ajouter une - * methode setMonOption(key, value1, value2) sur votre classe de configuration + * methode setMonOption(key, value1, value2) sur votre classe de configuration * qui herite de {@link ApplicationConfig}. Dans ce cas vous pouvez mettre les - * arguments que vous souhaitez du moment qu'ils soient convertibles de la + * arguments que vous souhaitez du moment qu'ils soient convertibles de la * representation String vers le type que vous avez mis. * </ul> - * + * <p/> * <h1>Les actions</h1> - * + * <p/> * Les actions ne peuvent etre que sur la ligne de commande. Ils sont de la * forme: * <pre> * --le.package.LaClass#laMethode arg1 arg2 arg3 ... argN * </pre> - * - * <p> + * <p/> + * <p/> * Une action est donc defini par le chemin complet vers la methode qui traitera * l'action. Cette methode peut-etre une methode static ou non. Si la methode * n'est pas static lors de l'instanciation de l'objet on essaie de passer en @@ -159,20 +157,20 @@ * utilise (il doit etre accessible). Toutes methodes d'actions faisant * parties d'un meme objet utiliseront la meme instance de cette objet lors * de leur execution. - * - * <p> + * <p/> + * <p/> * Si la methode utilise les arguments variants alors tous les arguments * jusqu'au prochain -- ou la fin de la ligne de commande sont utilises. Sinon * Le nombre exact d'argument necessaire a la methode sont utilises. - * - * <p> + * <p/> + * <p/> * Les arguments sont automatiquement converti dans le bon type reclame par la * methode. - * - * <p> + * <p/> + * <p/> * Si l'on veut des arguments optionnels le seul moyen actuellement est * d'utiliser une methode avec des arguments variants - * + * <p/> * <p> Les actions ne sont pas execute mais seulement parsees. Pour les executer * il faut utiilser la methode {@link #doAction} qui prend en argument un numero * de 'step'. Par defaut toutes les actions sont de niveau 0 et sont executee @@ -180,20 +178,20 @@ * distinguer les actions il est possible d'utiliser l'annotation * {@link ApplicationConfig.Action.Step} sur la methode qui fera l'action en * precisant une autre valeur que 0. - * + * <p/> * <pre> * doAction(0); * ... do something ... * doAction(1); * </pre> - * - * <p> + * <p/> + * <p/> * dans cette exemple on fait un traitement entre l'execution des actions * de niveau 0 et les actions de niveau 1. - * + * <p/> * <h1>Les arguments non parses</h1> - * - * <p> + * <p/> + * <p/> * Tout ce qui n'est pas option ou action est considere comme non parse et peut * etre recupere par la methode {@link #getUnparsed}. Si l'on souhaite forcer * la fin du parsing de la ligne de commande il est possible de mettre --. @@ -201,45 +199,45 @@ * <pre> * monProg "mon arg" --option k1 v1 -- --option k2 v2 -- autre * </pre> - * - * <p> + * <p/> + * <p/> * Dans cet exemple seule la premiere option sera considere comme une option. * On retrouvera dans unparsed: "mon arg", "--option", "k2", "v2", "--", "autre" - * + * <p/> * <h1>Les alias</h1> - * - * On voit qu'aussi bien pour les actions que pour les options, le nom de la - * methode doit etre utilise. Pour eviter ceci il est possible de definir + * <p/> + * On voit qu'aussi bien pour les actions que pour les options, le nom de la + * methode doit etre utilise. Pour eviter ceci il est possible de definir * des alias ce qui permet de creer des options courtes par exemple. Pour cela, * on utilise la methode {@link #addAlias}. - * + * <p/> * <pre> * addAlias("-v", "--option", "verbose", "true"); * addAlias("-o", "--option", "outputfile"); * addAlias("-i", "--mon.package.MaClass#MaMethode", "import"); * </pre> - * - * <p> + * <p/> + * <p/> * En faite avant le parsing de la ligne de commande tous les alias trouves sont * automatiquement remplacer par leur correspondance. Il est donc possible * d'utiliser ce mecanisme pour autre chose par exemple: - * + * <p/> * <pre> * addAlias("cl", "Code Lutin"); * addAlias("bp", "Benjamin POUSSIN); * </pre> - * - * <p> + * <p/> + * <p/> * Dans le premier exemple on simplifie une option de flags l'option -v n'attend * donc plus d'argument. Dans le second exemple on simplifie une option qui * attend encore un argment de type File. Enfin dans le troisieme exemple * on simplifie la syntaxe d'une action et on force le premier argument de * l'action a etre "import". - * + * <p/> * <h1>Conversion de type</h1> * Pour la conversion de type nous utilisons common-beans. Les types supporte * sont: - + * <p/> * <ul> * <li> les primitif (byte, short, int, long, float, double, char, boolean) * <li> String @@ -251,28 +249,29 @@ * <li> SqlTimestamps * <li> les tableaux d'un type primitif ou String. Chaque element doit etre * separe par une virgule - * </ul> -* + * </ul> + * <p/> * Pour suporter d'autre type, il vous suffit d'enregistrer de nouveau * converter dans commons-beans - + * * @author poussin * @version $Revision$ * @since 0.30 - * - * Last update $Date$ - * by $Author$ + * <p/> + * Last update $Date$ + * by $Author$ */ public class ApplicationConfig { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ApplicationConfig.class); - /** used to know what is separator between la class et la method sur la + /** + * used to know what is separator between la class et la method sur la * ligne de commande */ static final private String CLASS_METHOD_SEPARATOR = "#"; - + static final public String CONFIG_FILE_NAME = "configFileName"; protected boolean useOnlyAliases = false; @@ -282,7 +281,7 @@ String systemPath = File.separator + "etc" + File.separator; /** file $user.home/.[filename] */ String userPath = getUserHome() + File.separator + "."; - + protected Properties defaults = new Properties(); protected Properties classpath = new Properties(defaults); protected Properties etcfile = new Properties(classpath); @@ -292,15 +291,15 @@ protected Properties jvm = new Properties(env); 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 List<String> unparsed = new ArrayList<String>(); protected Map<Integer, List<Action>> actions = new HashMap<Integer, List<Action>>(); - + static public class Action { @Retention(RetentionPolicy.RUNTIME) @@ -314,20 +313,21 @@ protected Method m; protected String[] params; - public Action(int step, Object o, Method m, String ... params) { + public Action(int step, Object o, Method m, String... params) { this.step = step; this.o = o; this.m = m; this.params = params; } - + public void doAction() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { ObjectUtil.call(o, m, params); } } - + /** * Item used for cacheOption + * * @param T */ static protected class CacheItem<T> { @@ -340,39 +340,41 @@ this.item = item; this.hash = hash; } - + } - + public ApplicationConfig() { setConfigFileName(this.getClass().getSimpleName()); } - + static public String getUserHome() { String result = System.getProperty("user.home"); return result; } - + public String getUsername() { String result = getOption("user.name"); return result; } - + /** * Used to put default configuration option in config option. Those options * are used as fallback value. + * * @param key * @param value */ protected void setDefaultOption(String key, String value) { defaults.setProperty(key, value); } - + /** * Save configuration, in specified file + * * @param logOnError if true not throw exception but log error - * @param file file where config will be writen - * @param forceAll if true save all config option - * (with defaults, classpath, env, command line) + * @param file file where config will be writen + * @param forceAll if true save all config option + * (with defaults, classpath, env, command line) */ public void save(File file, boolean forceAll) throws IOException { Properties prop = new Properties(); @@ -389,11 +391,11 @@ prop.putAll(line); } prop.putAll(options); - + Writer writer = new FileWriter(file); prop.store(writer, "Last saved " + new java.util.Date()); } - + /** * Save configuration, in system directory (/etc/) using the * {@link #getConfigFileName}. Default, env and commande line note saved @@ -406,7 +408,7 @@ log.warn(_("Can't save config in file %s", file), eee); } } - + /** * Save configuration, in user home directory using the * {@link #getConfigFileName}. Default, env and commande line note saved @@ -419,17 +421,19 @@ log.warn(_("Can't save config in file %s", file), eee); } } - + /** * Return list of unparsed command line argument + * * @return list of unparsed arguments */ public List<String> getUnparsed() { return unparsed; } - + /** * Add action to list of action to do + * * @param action action to add, can be null. */ public void addAction(Action action) { @@ -443,7 +447,7 @@ list.add(action); } } - + public void doAction(int step) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { List<Action> list = actions.get(step); if (list != null) { @@ -460,29 +464,32 @@ public boolean isUseOnlyAliases() { return useOnlyAliases; } - + /** * All argument in aliases as key is substitued by target - * @param alias alias string as '-v' + * + * @param alias alias string as '-v' * @param target substitution as '--option verbose true' */ - public void addAlias(String alias, String ... target) { + public void addAlias(String alias, String... target) { aliases.put(alias, Arrays.asList(target)); } - + /** * Add alias for action. This method put just -- front the actionMethod and * call {@link addAlias} + * * @param alias * @param actionMethod must be fully qualified method path: package.Class.method */ public void addActionAlias(String alias, String actionMethod) { addAlias(alias, "--" + actionMethod); } - + /** * Set name of file where options are read (in /etc, $HOME, $CURDIR) * This set used {@link setDefaultOption} + * * @param name file name */ public void setConfigFileName(String name) { @@ -497,15 +504,17 @@ /** * Set option value + * * @param key * @param value */ public void setOption(String key, String value) { options.setProperty(key, value); } - + /** * get option value as string + * * @param key * @return String representation value */ @@ -516,6 +525,7 @@ /** * get option value as typed value + * * @param clazz type of object wanted as return type * @param key * @return typed value @@ -523,7 +533,7 @@ public <T> T getOption(Class<T> clazz, String key) { T result = null; String cacheKey = key + "-" + clazz.getName(); - + String value = options.getProperty(key); int hash = 0; if (value != null) { @@ -537,12 +547,13 @@ cacheItem = new CacheItem<T>(result, hash); cacheOption.put(cacheKey, cacheItem); } - + return result; } /** * get option value as typed value + * * @param key * @return typed value */ @@ -551,9 +562,10 @@ result = result.getAbsoluteFile(); return result; } - + /** * get option value as typed value + * * @param key * @return typed value */ @@ -564,6 +576,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -574,6 +587,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -584,6 +598,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -594,6 +609,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -604,6 +620,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -614,6 +631,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -624,6 +642,7 @@ /** * get option value as typed value + * * @param key * @return typed value */ @@ -634,12 +653,13 @@ /** * Get all set method on this object or super object + * * @return map with method name without set and in lower case as key, and - * method as value + * method as value */ protected Map<String, Method> getMethods() { // looking for all methods set on ApplicationConfig - Method [] allMethods = this.getClass().getMethods(); + Method[] allMethods = this.getClass().getMethods(); Map<String, Method> methods = new HashMap<String, Method>(); for (Method m : allMethods) { String methodName = m.getName(); @@ -647,14 +667,15 @@ methodName = methodName.substring(3).toLowerCase(); methods.put(methodName, m); } - } + } return methods; } /** * Take required argument for method in args. Argument used is removed from * args. If method has varArgs, we take all argument to next '--' - * @param m the method to call + * + * @param m the method to call * @param args iterator with many argument (equals or more than necessary * @throws java.lang.Exception if call failed */ @@ -673,8 +694,8 @@ } } } else { - int paramLenght = m.getParameterTypes().length; - for (int i = 0; i < paramLenght; i++) { + int paramLenght = m.getParameterTypes().length; + for (int i = 0; i < paramLenght; i++) { String p = args.next(); args.remove(); // remove this arg because is used now result.add(p); @@ -686,17 +707,18 @@ /** * Create action from string, string must be [package.][class][#][method] * if package, class or method missing, default is used + * * @param name * @param params * @return */ protected Action createAction(String name, ListIterator<String> args) throws ArgumentsParserException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Action result = null; - + Class clazz; Method method = null; String className; - String methodName ; + String methodName; // looking for method name int sep = name.lastIndexOf(CLASS_METHOD_SEPARATOR); @@ -724,10 +746,10 @@ } method = methods.get(0); } - + if (method != null) { args.remove(); // remove option from command line, because is used now - + // creation de l'object sur lequel on fera l'appel Object o = cacheAction.get(clazz); if (o == null && !Modifier.isStatic(method.getModifiers())) { @@ -741,28 +763,30 @@ } cacheAction.put(clazz, o); } - + // recherche du step de l'action int step = 0; Action.Step annotation = method.getAnnotation(Action.Step.class); if (annotation != null) { step = annotation.value(); } - + String[] params = getParams(method, args); result = new Action(step, o, method, params); } - + return result; } - + /** * Parse option and call set necessary method, read jvm, env variable, * Load configuration file and prepare Action. + * * @param args argument as main(String[] args) * @throws org.codelutin.util.ArgumentsParserException + * */ - public void parse(String [] args) throws ArgumentsParserException { + public void parse(String[] args) throws ArgumentsParserException { try { Map<String, Method> methods = getMethods(); @@ -812,7 +836,7 @@ log.info("Chargement du fichier de config: " + inClasspath); classpath.load(inClasspath.openStream()); } - + File etcConfig = new File(systemPath + filename); if (etcConfig.exists()) { log.info("Chargement du fichier de config: " + etcConfig); @@ -847,13 +871,13 @@ addAction(action); } } - + // // not used args added to unparsed // arguments.remove("--"); unparsed.addAll(arguments); - + } catch (Exception eee) { eee.printStackTrace(); throw new ArgumentsParserException("Can't parse argument", eee); Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParser.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParser.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParser.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2002, 2003, 2004, 2005 Code Lutin, -* C�dric Pineau, Benjamin Poussin, +* Cédric Pineau, Benjamin Poussin, * * * This program is free software; you can redistribute it and/or @@ -21,7 +21,7 @@ /* * * ArgumentsParser.java * -* Created: 22 ao�t 2003 +* Created: 22 août 2003 * * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ @@ -37,78 +37,78 @@ import java.util.HashSet; /** -* Parser d'option de la ligne de commande. -* IDEA: ajouter le type de l'argument a parser (int, double, String, boolean, Class, File, ...) -* et mettre des methodes pour r�cup�rer directement ce type. -*/ + * Parser d'option de la ligne de commande. + * IDEA: ajouter le type de l'argument a parser (int, double, String, boolean, Class, File, ...) + * et mettre des methodes pour récupérer directement ce type. + */ public class ArgumentsParser { - + /** La liste des arguments qui ne sont pas des options */ protected ArrayList<String> arguments = new ArrayList<String>(); - /** le nom � afficher pour l'usage */ + /** le nom à afficher pour l'usage */ protected String name = ""; /** - * la liste des options, la cle est une option, et la valeur est la liste - * des options qui ont �t� lu gr�ce � celle-ci. - */ + * la liste des options, la cle est une option, et la valeur est la liste + * des options qui ont été lu grâce à celle-ci. + */ protected HashMap<ArgumentsParserOption, ArrayList<ArgumentsParserOption>> options = - new HashMap<ArgumentsParserOption, ArrayList<ArgumentsParserOption>>(); + new HashMap<ArgumentsParserOption, ArrayList<ArgumentsParserOption>>(); /** liste a plat de toutes les options lus. */ protected ArrayList<ArgumentsParserOption> parsedOptions = new ArrayList<ArgumentsParserOption>(); /** - * Constructor for the ArgumentsParser object - * - *@param name e nom � afficher pour l'usage - */ + * Constructor for the ArgumentsParser object + * + * @param name e nom à afficher pour l'usage + */ public ArgumentsParser(String name) { this.name = name; } /** - * Permet de d'ajouter une option facilement au parser, sans avoir besoin de - * cr�er un objet Option. - * - *@param optionName le nom de cette option. - *@param acceptedOption la liste des marqueurs acceptables pour cette - * option. exemple -o, --option, --options - *@param argument le nombre d'argument que cette option a - *@param description description de cette option - *@return retourne l'option cr�er et qui sera utilis� - *@see #addOption(Option) - */ + * Permet de d'ajouter une option facilement au parser, sans avoir besoin de + * créer un objet Option. + * + * @param optionName le nom de cette option. + * @param acceptedOption la liste des marqueurs acceptables pour cette + * option. exemple -o, --option, --options + * @param argument le nombre d'argument que cette option a + * @param description description de cette option + * @return retourne l'option créer et qui sera utilisé + * @see #addOption(Option) + */ public ArgumentsParserOption addOption(String optionName, - String description, int argument, String ... acceptedOption) { + String description, int argument, String... acceptedOption) { return addOption(new ArgumentsParserDefaultOption - (optionName, description, argument, acceptedOption)); + (optionName, description, argument, acceptedOption)); } /** - * Permet d'ajouter une option au parseur - * - *@param option l'option � ajouter - *@return retourne l'option pass� en param�tre - */ + * Permet d'ajouter une option au parseur + * + * @param option l'option à ajouter + * @return retourne l'option passé en paramètre + */ public ArgumentsParserOption addOption(ArgumentsParserOption option) { options.put(option, new ArrayList<ArgumentsParserOption>()); return option; } /** - * Permet de v�rifier la coherence de toutes les options. Cela consiste � - * regarder si deux options n'utilise pas les m�me marqueurs, si deux - * options n'ont pas le m�me nom, si le nombre de r�p�tition min d'une - * option n'est pas supp�rieur au nombre de r�p�tition max - * - *@return une chaine de caract�re indiquant toutes les erreurs. Si la - * chaine est vide alors il n'y a pas d'erreur. - */ + * Permet de vérifier la coherence de toutes les options. Cela consiste à + * regarder si deux options n'utilise pas les même marqueurs, si deux + * options n'ont pas le même nom, si le nombre de répétition min d'une + * option n'est pas suppérieur au nombre de répétition max + * + * @return une chaine de caractère indiquant toutes les erreurs. Si la + * chaine est vide alors il n'y a pas d'erreur. + */ public String checkCoherence() { StringBuffer result = new StringBuffer(); HashSet<String> optionNames = new HashSet<String>(); HashSet<String> used = new HashSet<String>(); - + for (ArgumentsParserOption option : options.keySet()) { if (optionNames.contains(option.getName())) { result.append("option name " + option.getName() @@ -126,25 +126,25 @@ } if (option.getRepetitionMax() > 0 - && option.getRepetitionMin() > option.getRepetitionMax()) { - result.append("repetition min is over repetition max for: " - + option.getName() + "\n"); - option.setRepetitionMax(option.getRepetitionMin()); - } + && option.getRepetitionMin() > option.getRepetitionMax()) { + result.append("repetition min is over repetition max for: " + + option.getName() + "\n"); + option.setRepetitionMax(option.getRepetitionMin()); + } } return result.toString(); } /** - * Permet de v�rifier la coh�rence de la ligne de commande par rapport aux - * contraintes des options. Cela consiste � v�rifier que chaque option est - * bien r�p�t� le nmobre de fois souhait� par l'option qui � permis de la - * lire. - * - *@return vrai s'il n'y a pas d'erreur - *@exception ArgumentsParserException une exception est lev� d�s qu'une - * erreur est d�tect�e. - */ + * Permet de vérifier la cohérence de la ligne de commande par rapport aux + * contraintes des options. Cela consiste à vérifier que chaque option est + * bien répété le nmobre de fois souhaité par l'option qui à permis de la + * lire. + * + * @return vrai s'il n'y a pas d'erreur + * @throws ArgumentsParserException une exception est levé dès qu'une + * erreur est détectée. + */ boolean checkParsing() throws ArgumentsParserException { for (ArgumentsParserOption option : options.keySet()) { ArrayList<ArgumentsParserOption> list = options.get(option); @@ -152,8 +152,8 @@ && list.size() < option.getRepetitionMin()) { throw new ArgumentsParserException( "Error option repeted less than accepted need " - + option.getRepetitionMin() + " find " + list.size() + ": " - + option); + + option.getRepetitionMin() + " find " + list.size() + ": " + + option); } if (option.getRepetitionMax() > 0 && list.size() > option.getRepetitionMax()) { @@ -165,43 +165,43 @@ } /** - * Retourne les arguments de la ligne de commande qui n'ont pas �t� lu pas - * les options - * - *@return la liste des arguments non lu par les options. - */ + * Retourne les arguments de la ligne de commande qui n'ont pas été lu pas + * les options + * + * @return la liste des arguments non lu par les options. + */ public ArrayList<String> getArguments() { return arguments; } /** - * Retourne le nom utilis� pour l'affichage de l'usage - * - *@return la chaine de carat�re utilis�e pour l'usage - */ + * Retourne le nom utilisé pour l'affichage de l'usage + * + * @return la chaine de caratère utilisée pour l'usage + */ public String getName() { return name; } /** - * Permet de savoir si une option a ete trouv�e sur la ligne de commande - * - *@param name le nom de l'option dont il faut v�rifier l'existance - *@return vrai si l'option existe sur la ligne de commande - */ + * Permet de savoir si une option a ete trouvée sur la ligne de commande + * + * @param name le nom de l'option dont il faut vérifier l'existance + * @return vrai si l'option existe sur la ligne de commande + */ public boolean hasParsedOption(String optionName) { return getParsedOptions(optionName).size() != 0; } /** - * Retourne le premier argument d'un certain type - * - *@param name le nom de l'option � retourner - *@return la valeur de l'option si elle existe, null sinon - */ - public String [] getParsedOption(String optionName) { + * Retourne le premier argument d'un certain type + * + * @param name le nom de l'option à retourner + * @return la valeur de l'option si elle existe, null sinon + */ + public String[] getParsedOption(String optionName) { ArrayList<ArgumentsParserOption> list = getParsedOptions(optionName); - if (list.size() == 0){ + if (list.size() == 0) { return null; } else { return list.get(0).getArguments(); @@ -209,24 +209,24 @@ } /** - * Retourne la liste de toutes les options cr��es durant le parsage de la - * ligne de commande. - * - *@return la liste de toutes les options lus - */ + * Retourne la liste de toutes les options créées durant le parsage de la + * ligne de commande. + * + * @return la liste de toutes les options lus + */ public ArrayList<ArgumentsParserOption> getParsedOptions() { return parsedOptions; } /** - * Retourne la liste de toutes les options d'un certain type - * - *@param name le nom des options � retourner - *@return la liste des options d'un certain nom, ou une liste vide si - * aucune option de ce nom existe ou si cette option n'a pas �t� trouv� - * sur la ligne de commande - */ - public ArrayList<ArgumentsParserOption> getParsedOptions(String optionName){ + * Retourne la liste de toutes les options d'un certain type + * + * @param name le nom des options à retourner + * @return la liste des options d'un certain nom, ou une liste vide si + * aucune option de ce nom existe ou si cette option n'a pas été trouvé + * sur la ligne de commande + */ + public ArrayList<ArgumentsParserOption> getParsedOptions(String optionName) { ArrayList<ArgumentsParserOption> result = new ArrayList<ArgumentsParserOption>(); for (ArgumentsParserOption option : options.keySet()) { if (optionName.equals(option.getName())) { @@ -237,15 +237,15 @@ } /** - * Permet de recherche une option permettant de lire l'argument courant de - * la ligne de commande et d'utiliser une copie de cette option pour lire la - * suite de la ligne de commande. - * - *@param args la ligne de commande - *@param index la position courant de parsage de la ligne de commande - *@return retourne l'option qui a permit de lire la ligne de commande - * ou null si aucune option ne peut lire l'argument courant. - */ + * Permet de recherche une option permettant de lire l'argument courant de + * la ligne de commande et d'utiliser une copie de cette option pour lire la + * suite de la ligne de commande. + * + * @param args la ligne de commande + * @param index la position courant de parsage de la ligne de commande + * @return retourne l'option qui a permit de lire la ligne de commande + * ou null si aucune option ne peut lire l'argument courant. + */ ArgumentsParserOption lookingForOption(String[] args, int index) { for (ArgumentsParserOption option : options.keySet()) { ArgumentsParserOption copy = option.copy(); @@ -261,22 +261,22 @@ /** - * Une methode main pour tester la librairie - * - *@param args The command line arguments - *@exception Exception on fait suivre toutes les erreurs - */ + * Une methode main pour tester la librairie + * + * @param args The command line arguments + * @throws Exception on fait suivre toutes les erreurs + */ public static void main(String[] args) throws Exception { ArgumentsParser ap = new ArgumentsParser("ArgumentsParserTest"); ap.addOption("project", "le nom du projet", 1, "-p") - .setRepetitionMin(1); + .setRepetitionMin(1); ap.addOption("lib", "les librairies", 1, "-l") - .setRepetitionMin(2).setRepetitionMax(1); + .setRepetitionMin(2).setRepetitionMax(1); ap.addOption("truc", "les dummy", 1, "-t"); - ap.addOption("package", "le package utilis�", + ap.addOption("package", "le package utilisé", 1, "-k", "--package").setRepetitionMax(10); System.out.println(ap.usage()); @@ -291,14 +291,14 @@ } /** - * Cette m�thode permet de parser une ligne de commande. Aucune - * r�initialisation n'est faite entre deux appels. - * - *@param args la ligne de commande � parser - *@return la liste de toutes les options lus - *@exception ArgumentsParserException si la v�rification de la lecture - * montre des incoh�rence une exception est lev�e - */ + * Cette méthode permet de parser une ligne de commande. Aucune + * réinitialisation n'est faite entre deux appels. + * + * @param args la ligne de commande à parser + * @return la liste de toutes les options lus + * @throws ArgumentsParserException si la vérification de la lecture + * montre des incohérence une exception est levée + */ public ArgumentsParserOption[] parse(String[] args) throws ArgumentsParserException { for (int i = 0; i < args.length; i++) { ArgumentsParserOption option = lookingForOption(args, i); @@ -312,36 +312,36 @@ checkParsing(); return (ArgumentsParserOption[]) parsedOptions.toArray( - new ArgumentsParserOption[parsedOptions.size()]); + new ArgumentsParserOption[parsedOptions.size()]); } /** - * <p> - * - * Permet d'afficher l'usage gr�ce aux informations des options: r�p�tition, - * description, ...</p> <p> - * - * la cha�ne retourn� est de la forme suivante</p> <pre> - *usage: ArgumentsParserTest [package{10}][truc+] lib project+ - * - *package(-k, --package) le package utilisé - *truc(-t) les dummy - *lib(-l) les librairies - *project(-p) le nom du projet - *</pre> <p> - * - * ArgumentsParserTest est le nom pass� au constructeur de ArgumentsParser. - * </p> <p> - * - * une option qui a une r�p�tition min � 0 est entre [ ]</p> <p> - * - * une option qui a une r�p�tition max � 0 � un + ajout�</p> <p> - * - * une option qui a une r�p�tition max � sup�rieur � 1 � le nombre max - * ajout� entre {}</p> - * - *@return la cha�ne de carat�re de l'usage. - */ + * <p> + * <p/> + * Permet d'afficher l'usage gràce aux informations des options: répétition, + * description, ...</p> <p> + * <p/> + * la chaîne retourné est de la forme suivante</p> <pre> + * usage: ArgumentsParserTest [package{10}][truc+] lib project+ + * <p/> + * package(-k, --package) le package utilisé + * truc(-t) les dummy + * lib(-l) les librairies + * project(-p) le nom du projet + * </pre> <p> + * <p/> + * ArgumentsParserTest est le nom passé au constructeur de ArgumentsParser. + * </p> <p> + * <p/> + * une option qui a une répétition min à 0 est entre [ ]</p> <p> + * <p/> + * une option qui a une répétition max à 0 à un + ajouté</p> <p> + * <p/> + * une option qui a une répétition max à supérieur à 1 à le nombre max + * ajouté entre {}</p> + * + * @return la chaîne de caratère de l'usage. + */ public String usage() { StringBuffer result = new StringBuffer(); result.append("usage: " + getName() + " "); @@ -358,7 +358,7 @@ result.append("{" + option.getRepetitionMax() + "}"); } - for(int a = 0; a < option.count(); a++){ + for (int a = 0; a < option.count(); a++) { result.append(" <arg" + a + ">"); } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java 2008-08-04 19:25:34 UTC (rev 979) @@ -12,12 +12,12 @@ */ /** - * ArgumentsParserDefaultOption.java Created: 22 ao�t 2003 + * ArgumentsParserDefaultOption.java Created: 22 août 2003 * - *@author Benjamin Poussin <poussin@codelutin.com> + *@author Benjamin Poussin <poussin@codelutin.com> * * Copyright Code Lutin - *@version $Revision$ Mise a jour: $Date$ par : $Author$ + *@version $Revision$ Mise a jour: $Date$ par : $Author$ */ package org.codelutin.util; @@ -27,14 +27,14 @@ /** * Description of the Class * - *@author poussin - *@created 22 ao�t 2003 + * @author poussin + * @created 22 août 2003 */ public class ArgumentsParserDefaultOption implements ArgumentsParserOption {// ArgumentsParserDefaultOption - /** Toutes les options accept�: -o --option */ + /** Toutes les options accepté: -o --option */ String[] acceptedOption; - /** L'option utilis� sur la ligne de commande */ + /** L'option utilisé sur la ligne de commande */ String parsedOption; /** Le nom de cette option */ String name; @@ -43,12 +43,12 @@ /** la liste des arguments */ ArrayList<String> argumentList = new ArrayList<String>(); /** - * le nombre de fois minimum que l'option peut-�tre r�p�t�e sur la ligne de + * le nombre de fois minimum que l'option peut-être répétée sur la ligne de * commande */ int repetitionMin = 0; /** - * le nombre de fois maximum que l'option peut-�tre r�p�t�e sur la ligne de + * le nombre de fois maximum que l'option peut-être répétée sur la ligne de * commande: 1 par defaut */ int repetitionMax = 1; @@ -56,27 +56,27 @@ String description = ""; /** - *@param name le nom de l'option - *@param acceptedOption la liste variante de l'option accept�: -o --option - *@param argument le nombre d'argument que cette option accepte - *@param description TODO Description of the Parameter + * @param name le nom de l'option + * @param acceptedOption la liste variante de l'option accepté: -o --option + * @param argument le nombre d'argument que cette option accepte + * @param description TODO Description of the Parameter */ public ArgumentsParserDefaultOption(String name, String description, - int argument, String ... acceptedOption) { + int argument, String... acceptedOption) { this.name = name; this.description = description; this.acceptedOption = acceptedOption; this.argument = argument; } - public String [] getAcceptedOption(){ + public String[] getAcceptedOption() { return acceptedOption; } /** * TODO Description of the Method * - *@return TODO Description of the Return Value + * @return TODO Description of the Return Value */ public ArgumentsParserOption copy() { return new ArgumentsParserDefaultOption(name, description, argument, acceptedOption).setRepetitionMin(getRepetitionMin()).setRepetitionMax(getRepetitionMax()); @@ -85,9 +85,9 @@ /** * Description of the Method * - *@param args Description of the Parameter - *@param index Description of the Parameter - *@return vrai si le parsing a reussi + * @param args Description of the Parameter + * @param index Description of the Parameter + * @return vrai si le parsing a reussi */ public boolean parse(String[] args, int index) { parsedOption = args[index++]; @@ -103,7 +103,7 @@ /** * Gets the usedOption attribute of the DefaultOption object * - *@return The usedOption value + * @return The usedOption value */ public String getUsedOption() { return parsedOption; @@ -112,7 +112,7 @@ /** * Gets the description attribute of the DefaultOption object * - *@return The description value + * @return The description value */ public String getDescription() { return description; @@ -122,7 +122,7 @@ /** * Get repetitionMin property. * - *@return RepetitionMin property. + * @return RepetitionMin property. */ public int getRepetitionMin() { return this.repetitionMin; @@ -131,8 +131,8 @@ /** * Set repetitionMin property. * - *@param repetitionMin New repetitionMin property. - *@return TODO Description of the Return Value + * @param repetitionMin New repetitionMin property. + * @return TODO Description of the Return Value */ public ArgumentsParserOption setRepetitionMin(int repetitionMin) { this.repetitionMin = repetitionMin; @@ -143,7 +143,7 @@ /** * Get repetitionMax property. * - *@return RepetitionMax property. + * @return RepetitionMax property. */ public int getRepetitionMax() { return this.repetitionMax; @@ -152,8 +152,8 @@ /** * Set repetitionMax property. * - *@param repetitionMax New repetitionMax property. - *@return TODO Description of the Return Value + * @param repetitionMax New repetitionMax property. + * @return TODO Description of the Return Value */ public ArgumentsParserOption setRepetitionMax(int repetitionMax) { this.repetitionMax = repetitionMax; @@ -164,7 +164,7 @@ /** * Gets the name attribute of the DefaultOption object * - *@return The name value + * @return The name value */ public String getName() { return name; @@ -173,7 +173,7 @@ /** * Gets the arguments attribute of the DefaultOption object * - *@return The arguments value + * @return The arguments value */ public String[] getArguments() { return (String[]) argumentList.toArray(new String[count()]); @@ -191,8 +191,8 @@ /** * Description of the Method * - *@param optionName Description of the Parameter - *@return Description of the Return Value + * @param optionName Description of the Parameter + * @return Description of the Return Value */ protected boolean acceptOption(String optionName) { for (int i = 0; i < acceptedOption.length; i++) { @@ -206,7 +206,7 @@ /** * TODO Description of the Method * - *@return TODO Description of the Return Value + * @return TODO Description of the Return Value */ public String toString() { return name + "(" + parsedOption + ")" + argumentList; Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserException.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserException.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ArgumentsParserException.java 2008-08-04 19:25:34 UTC (rev 979) @@ -19,7 +19,7 @@ /** * ArgumentsParserException.java * - * Created: 23 ao�t 2003 + * Created: 23 août 2003 * * @author Benjamin Poussin <poussin@codelutin.com> * Copyright Code Lutin @@ -36,11 +36,11 @@ /** */ private static final long serialVersionUID = 8265924907001359910L; - public ArgumentsParserException(String msg){ + public ArgumentsParserException(String msg) { super(msg); } - public ArgumentsParserException(String msg, Throwable eee){ + public ArgumentsParserException(String msg, Throwable eee) { super(msg, eee); } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ArrayUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ArrayUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ArrayUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -34,19 +34,20 @@ import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; -import java.util.Collection; public class ArrayUtil { // ArrayUtil /** - * Permet de convertir un tableau en une liste, le type primitif - * est encapsul� dans un objet. + * Permet de convertir un tableau en une liste, le type primitif + * est encapsulé dans un objet. + * * @param a le tableau a convertir + * @return la liste * @deprecated avec l'auto-boxing en java 5 et plus ? - * @return la liste - */ - static public List<Double> asList(double [] a){ + */ + static public List<Double> asList(double[] a) { ArrayList<Double> result = new ArrayList<Double>(a.length); for (double anA : a) { result.add(anA); @@ -54,18 +55,19 @@ return result; } - static public <T> List<T> asList(T [] a){ + static public <T> List<T> asList(T[] a) { return Arrays.asList(a); } /** - * Permet de convertir un tableau en une liste, le type primitif - * est encapsul� dans un objet. - * @param a le tableau a convertir + * Permet de convertir un tableau en une liste, le type primitif + * est encapsulé dans un objet. + * + * @param a le tableau a convertir + * @return la liste * @deprecated avec l'auto-boxing en java 5 et plus ? - * @return la liste - */ - static public List<Integer> asList(int [] a){ + */ + static public List<Integer> asList(int[] a) { ArrayList<Integer> result = new ArrayList<Integer>(a.length); for (int anA : a) { result.add(anA); @@ -73,9 +75,9 @@ return result; } - public static int[] asIntArray(String [] a){ - int [] result = new int[a.length]; - for(int i=0; i<a.length; i++){ + public static int[] asIntArray(String[] a) { + int[] result = new int[a.length]; + for (int i = 0; i < a.length; i++) { result[i] = StringUtil.toInt(a[i]); } return result; @@ -83,35 +85,36 @@ /** - * Fait la somme des 2 tableaux et retourne un nouveau tableau, les - * 2 tableaux pass�s en argument ne sont pas modifi�s. Les deux tableaux - * doivent �tre non null et avoir la m�me taille. - * @param a le premier tableau + * Fait la somme des 2 tableaux et retourne un nouveau tableau, les + * 2 tableaux passés en argument ne sont pas modifiés. Les deux tableaux + * doivent être non null et avoir la même taille. + * + * @param a le premier tableau * @param b le second tableau * @return le tableau des sommes */ - static public int [] sum(int [] a, int [] b){ - if(a == null || b == null || a.length != b.length){ - throw new IllegalArgumentException("Au moins des tableaux est null ou les tableaux ne font pas la m�me taille"); + static public int[] sum(int[] a, int[] b) { + if (a == null || b == null || a.length != b.length) { + throw new IllegalArgumentException("Au moins des tableaux est null ou les tableaux ne font pas la même taille"); } - int [] result = new int[a.length]; - for(int i=0; i<a.length; i++){ + int[] result = new int[a.length]; + for (int i = 0; i < a.length; i++) { result[i] = a[i] + b[i]; } return result; } - static public int [] concat(int [] ... tabs){ + static public int[] concat(int[]... tabs) { int length = 0; - for(int[] tab: tabs){ - if(tab != null){ + for (int[] tab : tabs) { + if (tab != null) { length += tab.length; } } - int [] result = new int[length]; + int[] result = new int[length]; length = 0; - for(int[] tab: tabs){ - if(tab != null){ + for (int[] tab : tabs) { + if (tab != null) { System.arraycopy(tab, 0, result, length, tab.length); length += tab.length; } @@ -120,25 +123,26 @@ } /** - * Retourne un nouveau tableau qui est la concatenation des deux autres. - * Essai de garder pour le tableau resultat le type des tableaux en entr� - * si possible. [Double], [Number] -> [Number]; [Double], [Long] -> [Object] - * @param tabs les tableaux - * @return le nouveau tableau ou null, si les deux tableaux sont null - * todo essayer de retourner le meilleur type de tableau possible - * [Double], [Long] -> [Number] - */ - static public Object [] concat(Object [] ... tabs){ - Object [] result = null; + * Retourne un nouveau tableau qui est la concatenation des deux autres. + * Essai de garder pour le tableau resultat le type des tableaux en entré + * si possible. [Double], [Number] -> [Number]; [Double], [Long] -> [Object] + * + * @param tabs les tableaux + * @return le nouveau tableau ou null, si les deux tableaux sont null + * todo essayer de retourner le meilleur type de tableau possible + * [Double], [Long] -> [Number] + */ + static public Object[] concat(Object[]... tabs) { + Object[] result = null; Class<?> clazz = null; int length = 0; - for(Object[] tab:tabs){ - if(tab != null){ + for (Object[] tab : tabs) { + if (tab != null) { length += tab.length; Class<?> tmp = tab.getClass().getComponentType(); - if(clazz == null){ + if (clazz == null) { clazz = tmp; - } else if(tmp.isAssignableFrom(clazz)){ + } else if (tmp.isAssignableFrom(clazz)) { clazz = tmp; } else if (clazz.isAssignableFrom(tmp)) { // do nothing, because clazz can't be better @@ -148,11 +152,11 @@ } } - if(clazz != null){ - result = (Object[])Array.newInstance(clazz, length); + if (clazz != null) { + result = (Object[]) Array.newInstance(clazz, length); length = 0; - for(Object[] tab:tabs){ - if(tab != null){ + for (Object[] tab : tabs) { + if (tab != null) { System.arraycopy(tab, 0, result, length, tab.length); length += tab.length; } @@ -162,29 +166,31 @@ } /** - * Ajoute a un tableau un ensemble d'element. Le type du tableau retourn� + * Ajoute a un tableau un ensemble d'element. Le type du tableau retourné * est le meilleur possible. - * @param tab les valeurs initiales du tableau + * + * @param tab les valeurs initiales du tableau * @param elems les elemements a ajouter * @return un nouveau tableau contenant a la fin les elements souhaites */ @SuppressWarnings("unchecked") - static public <E, F extends E>E [] concatElems(E [] tab, F ... elems) { - E [] result; - result = (E[])concat(tab, elems); + static public <E, F extends E> E[] concatElems(E[] tab, F... elems) { + E[] result; + result = (E[]) concat(tab, elems); return result; } /** - * Recherche dans le table le 1er element qui correspond a la classe - * pass�e en argument. - * @param tab le tableau dans lequel il faut chercher - * @param clazz la classe de l'objet souhait� - * @return un objet de la classe demand�, ou null si aucun ne correspond - */ - static public <A> A search(Object [] tab, Class<A> clazz) { + * Recherche dans le table le 1er element qui correspond a la classe + * passée en argument. + * + * @param tab le tableau dans lequel il faut chercher + * @param clazz la classe de l'objet souhaité + * @return un objet de la classe demandé, ou null si aucun ne correspond + */ + static public <A> A search(Object[] tab, Class<A> clazz) { A result = null; - for(Object o:tab) { + for (Object o : tab) { if (clazz.isInstance(o)) { result = clazz.cast(o); } @@ -193,9 +199,9 @@ } @SuppressWarnings({"unchecked"}) - static public <T> T[] toArray(Collection list,Class<T> clazz) { - T[] result = (T[]) Array.newInstance(clazz,list==null?0:list.size()); - int i=0; + static public <T> T[] toArray(Collection list, Class<T> clazz) { + T[] result = (T[]) Array.newInstance(clazz, list == null ? 0 : list.size()); + int i = 0; for (Object o : list) { result[i++] = (T) o; } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/BoundedList.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/BoundedList.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/BoundedList.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2002, 2003, 2004, 2005 Code Lutin, -* C�dric Pineau, Benjamin Poussin, +* Cédric Pineau, Benjamin Poussin, * * * This program is free software; you can redistribute it and/or @@ -33,201 +33,202 @@ import java.util.ArrayList; import java.util.Collection; -/** - * ArrayList with minimum and maximum sizes. For each operation, the size is checked and the BoundedList to ensure that it is kept in the range. - */ +/** ArrayList with minimum and maximum sizes. For each operation, the size is checked and the BoundedList to ensure that it is kept in the range. */ public class BoundedList<E> extends ArrayList<E> { - /** */ + /** */ private static final long serialVersionUID = -3211387041114409849L; - -//By defaut, maxSize is set to -1 (infinite) - private int minSize = 0; - private int maxSize = -1; - /** - * Indicates if the list size is at the maximum - * @return true is the maximum size has been reached - */ - public boolean isFull() { - return (maxSize == -1 || size() >= maxSize); - } - - /** - * Indicates if the list size is to the minimum - * @return true is the list size is the minimum size - */ - public boolean isToMinimum() { - return (size() <= minSize); - } - - /** - * Creates a new BoundedList with the specified initialCapacity. The min size is set to 0 and the max size to the infinite. - * @param initialCapacity - */ - public BoundedList(int initialCapacity) { - super(initialCapacity); - } + //By defaut, maxSize is set to -1 (infinite) + private int minSize = 0; + private int maxSize = -1; - /** - * Creates a new BoundedList with the default capacity. The min size is set to 0 and the max size to the infinite. - */ - public BoundedList() { - super(); - } + /** + * Indicates if the list size is at the maximum + * + * @return true is the maximum size has been reached + */ + public boolean isFull() { + return (maxSize == -1 || size() >= maxSize); + } - /** - * Creates a new BoundedList with the specified collection of elements. The min size is set to 0 and the max size to the infinite. - * @param arg0 - */ - public BoundedList(Collection<E> arg0) { - super(arg0); - } + /** + * Indicates if the list size is to the minimum + * + * @return true is the list size is the minimum size + */ + public boolean isToMinimum() { + return (size() <= minSize); + } - /** - * Creates a new empty BoundedList with the specified min and max sizes. Please be informed that -1 represents the infinite. - * @param minSize - * @param maxSize - */ - public BoundedList(int minSize, int maxSize) { - super(); - if (minSize > 0) - this.minSize = minSize; - if (minSize > -1) - this.maxSize = maxSize; - } + /** + * Creates a new BoundedList with the specified initialCapacity. The min size is set to 0 and the max size to the infinite. + * + * @param initialCapacity + */ + public BoundedList(int initialCapacity) { + super(initialCapacity); + } - /** - * Appends the specified element to the end of this list. - * @param o the Object to be added - */ - @Override - public boolean add(E o) { - if (checkNewSize(1)) - return super.add(o); - else - throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); - } + /** Creates a new BoundedList with the default capacity. The min size is set to 0 and the max size to the infinite. */ + public BoundedList() { + super(); + } - /** - * Inserts the specified element at the specified position in this list. - * @param index the position where to add the Object - * @param o the Object to be added - */ - @Override - public void add(int index, E o) { - if (checkNewSize(1)) - super.add(index, o); - else - throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); - } + /** + * Creates a new BoundedList with the specified collection of elements. The min size is set to 0 and the max size to the infinite. + * + * @param arg0 + */ + public BoundedList(Collection<E> arg0) { + super(arg0); + } - /** - * Appends all of the elements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator. - * @param c the collection of Objects to be added - */ - @Override - public boolean addAll(Collection<? extends E> c) { - if (checkNewSize(c.size())) - return super.addAll(c); - else - throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); - } + /** + * Creates a new empty BoundedList with the specified min and max sizes. Please be informed that -1 represents the infinite. + * + * @param minSize + * @param maxSize + */ + public BoundedList(int minSize, int maxSize) { + super(); + if (minSize > 0) + this.minSize = minSize; + if (minSize > -1) + this.maxSize = maxSize; + } - /** - * Inserts all of the elements in the specified Collection into this list, starting at the specified position. - * @param index the index where to start adding the collection of objects - * @param c the collection of Objects to be added - */ - @Override - public boolean addAll(int index, Collection<? extends E> c) { - if (checkNewSize(c.size())) - return super.addAll(index, c); - else - throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); - } + /** + * Appends the specified element to the end of this list. + * + * @param o the Object to be added + */ + @Override + public boolean add(E o) { + if (checkNewSize(1)) + return super.add(o); + else + throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); + } - /** - * Returns a shallow copy of this BoundedList instance - */ - @SuppressWarnings("unchecked") - @Override - public Object clone() { - BoundedList<E> bL = (BoundedList<E>)super.clone(); - bL.minSize = minSize; - bL.maxSize = maxSize; - return bL; - } + /** + * Inserts the specified element at the specified position in this list. + * + * @param index the position where to add the Object + * @param o the Object to be added + */ + @Override + public void add(int index, E o) { + if (checkNewSize(1)) + super.add(index, o); + else + throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); + } - /* - public Object set(int index, Object o) { - //Pas d'action particuli�re � priori - return super.set(index, o); - } - */ + /** + * Appends all of the elements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator. + * + * @param c the collection of Objects to be added + */ + @Override + public boolean addAll(Collection<? extends E> c) { + if (checkNewSize(c.size())) + return super.addAll(c); + else + throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); + } - /** - * Removes the element at the specified position in this list. - * @param index the position of the element to be removed - */ - @Override - public E remove(int index) { - if (checkNewSize(-1)) - return super.remove(index); - else - throw getException("Cannot remove element, minSize is " + minSize); - } + /** + * Inserts all of the elements in the specified Collection into this list, starting at the specified position. + * + * @param index the index where to start adding the collection of objects + * @param c the collection of Objects to be added + */ + @Override + public boolean addAll(int index, Collection<? extends E> c) { + if (checkNewSize(c.size())) + return super.addAll(index, c); + else + throw getException("Cannot add element. Use set to replace element or remove to free space or addAll"); + } - /** - * Removes from this List all of the elements whose index is between fromIndex, inclusive and toIndex, exclusive. - * @param fromIndex index of first element to be removed - * @param toIndex index after last element to be removed - */ - @Override - protected void removeRange(int fromIndex, int toIndex) { - if (checkNewSize(-(toIndex - fromIndex))) - super.removeRange(fromIndex, toIndex); - else - throw getException("Cannot remove element, minSize is " + minSize); - } + /** Returns a shallow copy of this BoundedList instance */ + @SuppressWarnings("unchecked") + @Override + public Object clone() { + BoundedList<E> bL = (BoundedList<E>) super.clone(); + bL.minSize = minSize; + bL.maxSize = maxSize; + return bL; + } - /** - * Removes a single instance of the specified element from this list, if it is present (optional operation). + /* + public Object set(int index, Object o) { + //Pas d'action particulière à priori + return super.set(index, o); + } */ - @Override - public boolean remove(Object o) { - if (checkNewSize(-1) || !contains(o)) - return super.remove(o); - else - throw getException("Cannot remove element, minSize is " + minSize); - } - /** - * Removes from this collection all of its elements that are contained in the specified collection (optional operation). - */ - @Override - public boolean removeAll(Collection<?> c) { - //On ne sait pas si les �l�ments de la Collection sont contenus dans la liste. - //De plus, on ne sait pas si les instances sont pr�sentes un ou plusieurs fois (Si elles y sont +sieurs fois elles sont supprim�es +sieurs fois) - if (checkNewSize(-c.size())) - return super.removeAll(c); - else - throw getException("Cannot remove element, minSize is " + minSize); - } + /** + * Removes the element at the specified position in this list. + * + * @param index the position of the element to be removed + */ + @Override + public E remove(int index) { + if (checkNewSize(-1)) + return super.remove(index); + else + throw getException("Cannot remove element, minSize is " + minSize); + } - private boolean checkNewSize(int size) { - if (size == 0) //Pas de changement de taille ! - return (((size()) >= minSize) && ((maxSize == -1) || (size() <= maxSize))); - else if (size > 0) //Ajout d'un elem - v�rification qu'on ne d�passe pas la borne max - return ((maxSize == -1) || ((size() + size) <= maxSize)); - return ((size() + size) >= minSize); //Suppression d'un �lem - on v�rifie qu'on ne descend pas en dessous de la borne min - } + /** + * Removes from this List all of the elements whose index is between fromIndex, inclusive and toIndex, exclusive. + * + * @param fromIndex index of first element to be removed + * @param toIndex index after last element to be removed + */ + @Override + protected void removeRange(int fromIndex, int toIndex) { + if (checkNewSize(-(toIndex - fromIndex))) + super.removeRange(fromIndex, toIndex); + else + throw getException("Cannot remove element, minSize is " + minSize); + } - private RuntimeException getException(String msg) { - return new BoundedListOutOfBoundsException(msg); - } + /** Removes a single instance of the specified element from this list, if it is present (optional operation). */ + @Override + public boolean remove(Object o) { + if (checkNewSize(-1) || !contains(o)) + return super.remove(o); + else + throw getException("Cannot remove element, minSize is " + minSize); + } - @Override - public String toString() { - return /*"(" + minSize + ", " + maxSize + ") " +*/ super.toString(); - } + /** Removes from this collection all of its elements that are contained in the specified collection (optional operation). */ + @Override + public boolean removeAll(Collection<?> c) { + //On ne sait pas si les éléments de la Collection sont contenus dans la liste. + //De plus, on ne sait pas si les instances sont présentes un ou plusieurs fois (Si elles y sont +sieurs fois elles sont supprimées +sieurs fois) + if (checkNewSize(-c.size())) + return super.removeAll(c); + else + throw getException("Cannot remove element, minSize is " + minSize); + } + + private boolean checkNewSize(int size) { + if (size == 0) //Pas de changement de taille ! + return (((size()) >= minSize) && ((maxSize == -1) || (size() <= maxSize))); + else if (size > 0) //Ajout d'un elem - vérification qu'on ne dépasse pas la borne max + return ((maxSize == -1) || ((size() + size) <= maxSize)); + return ((size() + size) >= minSize); //Suppression d'un élem - on vérifie qu'on ne descend pas en dessous de la borne min + } + + private RuntimeException getException(String msg) { + return new BoundedListOutOfBoundsException(msg); + } + + @Override + public String toString() { + return /*"(" + minSize + ", " + maxSize + ") " +*/ super.toString(); + } } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2002, 2003, 2004, 2005 Code Lutin, -* C�dric Pineau, Benjamin Poussin, +* Cédric Pineau, Benjamin Poussin, * * * This program is free software; you can redistribute it and/or @@ -33,36 +33,32 @@ public class BoundedListOutOfBoundsException extends RuntimeException { - /** */ + /** */ private static final long serialVersionUID = 7006384682459926080L; -/** - * - */ - public BoundedListOutOfBoundsException() { - super(); - } + /** + * + */ + public BoundedListOutOfBoundsException() { + super(); + } - /** - * @param message - */ - public BoundedListOutOfBoundsException(String message) { - super(message); - } + /** @param message */ + public BoundedListOutOfBoundsException(String message) { + super(message); + } - /** - * @param message - * @param cause - */ - public BoundedListOutOfBoundsException(String message, Throwable cause) { - super(message, cause); - } + /** + * @param message + * @param cause + */ + public BoundedListOutOfBoundsException(String message, Throwable cause) { + super(message, cause); + } - /** - * @param cause - */ - public BoundedListOutOfBoundsException(Throwable cause) { - super(cause); - } + /** @param cause */ + public BoundedListOutOfBoundsException(Throwable cause) { + super(cause); + } } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/CardinalityHelper.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/CardinalityHelper.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/CardinalityHelper.java 2008-08-04 19:25:34 UTC (rev 979) @@ -21,32 +21,32 @@ import java.util.regex.Pattern; /** - * Une classe avec des m�thodes utiles sur les cardinalit�s : + * Une classe avec des méthodes utiles sur les cardinalités : * <p/> - * parser une cardinalit� {@link #parseCardinalite(String, boolean)} + * parser une cardinalité {@link #parseCardinalite(String, boolean)} * <p/> - * afficher une cardinit� {@link #printCardinalite(StringBuilder, String, int, int, boolean, String, String, String, String)} + * afficher une cardinité {@link #printCardinalite(StringBuilder, String, int, int, boolean, String, String, String, String)} * <p/> - * et pour tester des cardinalit�s : + * et pour tester des cardinalités : * <p/> - * {@link #isMandatory(int)}, savoir si une cardinalit� est obligatoire � + * {@link #isMandatory(int)}, savoir si une cardinalité est obligatoire à * partir de son min. * <p/> - * {@link #isRepetable(int)}, savoir si une cardinalit� est r�p�table � partir + * {@link #isRepetable(int)}, savoir si une cardinalité est répétable à partir * de son max. * <p/> - * {@link #isMaxBounded(int)}, savoir si une cardinalit� est born�e sur son max - * � partir de son max. + * {@link #isMaxBounded(int)}, savoir si une cardinalité est bornée sur son max + * à partir de son max. * <p/> - * {@link #isDefaultMandatory(int, int)}, savoir si la cardinalit� est la - * cardinalit� obligatoire par d�faut {1}. + * {@link #isDefaultMandatory(int, int)}, savoir si la cardinalité est la + * cardinalité obligatoire par défaut {1}. * <p/> - * {@link #isDefaultOptional(int, int)}, savoir si la cardinalit� est la - * cardinalit� optionel par d�faut {0,1}. + * {@link #isDefaultOptional(int, int)}, savoir si la cardinalité est la + * cardinalité optionel par défaut {0,1}. * <p/> * {@link #isAvailable(int, int)}, savoir si il reste encore des occurrences - * disponibles sur une cardianlit� � partir d'un nombre d'oocurrence et du max - * de la cardinalit�. + * disponibles sur une cardianlité à partir d'un nombre d'oocurrence et du max + * de la cardinalité. * * @author tony */ @@ -65,10 +65,10 @@ public static final Pattern PATTERN_BOUNDED = Pattern.compile("(.*)\\{([0-9]+),([0-9]+|\\*)\\}"); /** - * Indique si une cardinalit� est la cardinalit� obligatoire par d�faut {1} + * Indique si une cardinalité est la cardinalité obligatoire par défaut {1} * - * @param min le min de la cardinalit� � tester - * @param max le max de la cardinalit� � tester + * @param min le min de la cardinalité à tester + * @param max le max de la cardinalité à tester * @return <code>true</code> si min==1 et max=1 */ public static boolean isDefaultMandatory(int min, int max) { @@ -76,10 +76,10 @@ } /** - * Indique si une cardinalit� est la cardinalit� optionel par d�faut {0,1} + * Indique si une cardinalité est la cardinalité optionel par défaut {0,1} * - * @param min le min de la cardinalit� � tester - * @param max le max de la cardinalit� � tester + * @param min le min de la cardinalité à tester + * @param max le max de la cardinalité à tester * @return <code>true</code> si min==0 && max==1 */ public static boolean isDefaultOptional(int min, int max) { @@ -87,9 +87,9 @@ } /** - * Indique si une cardinalit� est obligatoire � partir de son min + * Indique si une cardinalité est obligatoire à partir de son min * - * @param min le min de la cardinalit� � tester + * @param min le min de la cardinalité à tester * @return <code>true</code> if min>0 */ public static boolean isMandatory(int min) { @@ -97,9 +97,9 @@ } /** - * Indique si une cardinalit� est major�e � partir de son max + * Indique si une cardinalité est majorée à partir de son max * - * @param max le max de la cardinalit� � tester + * @param max le max de la cardinalité à tester * @return <code>true</code> si max!=-1 */ public static boolean isMaxBounded(int max) { @@ -107,9 +107,9 @@ } /** - * Indique si une cardinalit� est r�p�table � partir de son max + * Indique si une cardinalité est répétable à partir de son max * - * @param max le max de la cardinalit� � tester + * @param max le max de la cardinalité à tester * @return <code>true</code> si max>0 || max==-1 */ public static boolean isRepetable(int max) { @@ -117,12 +117,12 @@ } /** - * Indique si on n'a pas encore atteint la borne max d'une cardinalit� � - * partir de son max et d'un nombre d'occurrences d�j� atteint. + * Indique si on n'a pas encore atteint la borne max d'une cardinalité à + * partir de son max et d'un nombre d'occurrences déjà atteint. * * @param current le nombre d'occurence actuel - * @param max la borne max de la cardinalit� - * @return <code>true</code> si la cardinalit� n'a pas atteint sa borne max + * @param max la borne max de la cardinalité + * @return <code>true</code> si la cardinalité n'a pas atteint sa borne max */ public static boolean isAvailable(int current, int max) { @@ -130,10 +130,10 @@ } /** - * Retourne le min par d�fault d'une cardinalit� � partir du crit�re + * Retourne le min par défault d'une cardinalité à partir du critère * obligatoire ou non. * - * @param mandatory le crit�re � tester + * @param mandatory le critère à tester * @return <code>1</code> si obligatoire, 0 sinon. */ public static int getDefaultMin(boolean mandatory) { @@ -141,12 +141,12 @@ } /** - * Parse la cardinalite � la fin d'un texte. + * Parse la cardinalite à la fin d'un texte. * - * @param txt la valeur dont on cherche la cardinalit� + * @param txt la valeur dont on cherche la cardinalité * @param mandatory si vrai, valeurs par default {1}, sinon {0,1} - * @return un tableau contenant 3 object : le texte donn� sans les - * informations de cardinalit�, la r�p�titionMin, la r�p�titionMax. + * @return un tableau contenant 3 object : le texte donné sans les + * informations de cardinalité, la répétitionMin, la répétitionMax. */ public static Object[] parseCardinalite(String txt, boolean mandatory) { @@ -181,19 +181,19 @@ } /** - * Imprime dans le builder, le txt + une cardinalit�. + * Imprime dans le builder, le txt + une cardinalité. * * @param sb le builder - * @param txt le txt � imprimer - * @param min la caridnalit� min - * @param max la cardinalit� max - * @param mandatory pour indiquer dans quel cas on affiche la cardinalit� : - * si elle correspond aux valeurs par d�faut + * @param txt le txt à imprimer + * @param min la caridnalité min + * @param max la cardinalité max + * @param mandatory pour indiquer dans quel cas on affiche la cardinalité : + * si elle correspond aux valeurs par défaut * de mandatory {1} ou optionel {0,1}, pas d'impression. - * @param mo le caract�re ouvrant pour un object obligatoire - * @param mc le caract�re fermant pour un object obligatoire - * @param oo le caract�re ouvrant pour un object optionel - * @param oc le caract�re fermant pour un object optionel + * @param mo le caractère ouvrant pour un object obligatoire + * @param mc le caractère fermant pour un object obligatoire + * @param oo le caractère ouvrant pour un object optionel + * @param oc le caractère fermant pour un object optionel */ public static void printCardinalite(StringBuilder sb, String txt, int min, int max, boolean mandatory, String mo, String mc, String oo, String oc) { // flag pour indiquer s'il faut ou non imprimer les bordures Modified: trunk/lutinutil/src/main/java/org/codelutin/util/CategorisedListenerSet.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/CategorisedListenerSet.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/CategorisedListenerSet.java 2008-08-04 19:25:34 UTC (rev 979) @@ -31,46 +31,47 @@ package org.codelutin.util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.beans.Statement; import java.util.Iterator; import java.util.WeakHashMap; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - /** -* Objet permettant de g�r� plusieurs liste de listener de facon simple. -* Chaque liste de listener est rang� en fonction d'une cle (categorie) -* Une categorie peut avoir un pere, dans ce cas si un event doit etre lanc� -* sur une categorie il est aussi lancer sur le pere de la categorie. -* Mais attention l'inverse n'est pas vrai, un event lanc� sur un p�re n'est -* jamais lanc� sur ses fils. -* Il existe une Category sp�ciale {@link #ALL} qui permet d'envoyer un event -* a tous les listeners. -* Si cette classe est la derniere classe a conserver l'objet categorie -* alors la categorie est libere et ainsi que les listeners si c'etait aussi -* leur derniers referencements -* -* <p> Si les categories sont representees par des Class, alors vous pouvez -* utiliser la hierachie de classe pour creer de facon automatique les pere -* -* @see org.codelutin.util.ListenerSet -*/ + * Objet permettant de géré plusieurs liste de listener de facon simple. + * Chaque liste de listener est rangé en fonction d'une cle (categorie) + * Une categorie peut avoir un pere, dans ce cas si un event doit etre lancé + * sur une categorie il est aussi lancer sur le pere de la categorie. + * Mais attention l'inverse n'est pas vrai, un event lancé sur un père n'est + * jamais lancé sur ses fils. + * Il existe une Category spéciale {@link #ALL} qui permet d'envoyer un event + * a tous les listeners. + * Si cette classe est la derniere classe a conserver l'objet categorie + * alors la categorie est libere et ainsi que les listeners si c'etait aussi + * leur derniers referencements + * <p/> + * <p> Si les categories sont representees par des Class, alors vous pouvez + * utiliser la hierachie de classe pour creer de facon automatique les pere + * + * @see org.codelutin.util.ListenerSet + */ public class CategorisedListenerSet<Listener> { // CategorisedListenerSet /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(CategorisedListenerSet.class); /** - * permet de remplacer toutes les categories. - * Si on utilise cette category, alors tous les listeners present - * seront utilis�. - */ + * permet de remplacer toutes les categories. + * Si on utilise cette category, alors tous les listeners present + * seront utilisé. + */ static public final Object ALL = new Object(); - /** HashMap de ListenerSet, en cle l'objet qui caracterise la categorie - * en valeur un ListenerSet - */ + /** + * HashMap de ListenerSet, en cle l'objet qui caracterise la categorie + * en valeur un ListenerSet + */ protected WeakHashMap<Object, ListenerSet<Listener>> listeners = new WeakHashMap<Object, ListenerSet<Listener>>(); protected WeakHashMap<Object, Object> categoryParent = new WeakHashMap<Object, Object>(); protected boolean isClassCategory = true; @@ -78,27 +79,26 @@ /** * Construit un CategorisedListenerSet qui accepte n'importe quel type - * de listener et dont le isClassCategory est activ� - * + * de listener et dont le isClassCategory est activé */ - public CategorisedListenerSet(){} + public CategorisedListenerSet() { + } // /** // * Construit un CategorisedListenerSet qui accepte les listeners -// * dont le type est pass� en parametre et dont le isClassCategory est activ� +// * dont le type est passé en parametre et dont le isClassCategory est activé // */ // public CategorisedListenerSet(Class listenerClass){ // this.listenerClass = listenerClass; // } - + /** - * - * @param listenerClass la classe dont doit heriter les listeners pour - * etre accept� lors de l'ajout - * @param isClassCategory si vrai et que les categorie pass� en arguement - * lors de l'ajout sont de type Class alors lors du fire on recherche aussi - * les peres dans la hierarchie d'heritage de la classe (Super class et - * interfaces) + * @param listenerClass la classe dont doit heriter les listeners pour + * etre accepté lors de l'ajout + * @param isClassCategory si vrai et que les categorie passé en arguement + * lors de l'ajout sont de type Class alors lors du fire on recherche aussi + * les peres dans la hierarchie d'heritage de la classe (Super class et + * interfaces) */ public CategorisedListenerSet(Class listenerClass, boolean isClassCategory) { // this(listenerClass); @@ -106,54 +106,60 @@ } - protected void checkCategory(Object category){ - if(category == ALL){ + protected void checkCategory(Object category) { + if (category == ALL) { throw new IllegalArgumentException("ALL category can't be use to add listener or add Category"); } } /** - * Ajoute une categorie en indiquant sont pere. Une categorie ne peut - * avoir qu'un seul pere, si la nouvelle categorie existait deja - * alors l'appel a cette methode change son pere. - * @param parent le pere de la categorie, null si on ne souhaite pas de pere - * @param newCategory la nouvelle caterogie - */ - public void addCategory(Object parent, Object newCategory){ + * Ajoute une categorie en indiquant sont pere. Une categorie ne peut + * avoir qu'un seul pere, si la nouvelle categorie existait deja + * alors l'appel a cette methode change son pere. + * + * @param parent le pere de la categorie, null si on ne souhaite pas de pere + * @param newCategory la nouvelle caterogie + */ + public void addCategory(Object parent, Object newCategory) { checkCategory(parent); checkCategory(newCategory); categoryParent.put(newCategory, parent); } /** - * Ajoute un listener sur une certaine categorie, si la categorie n'existe - * alors on la cr�e en ne lui affectant pas de p�re - * @param category la categorie dans lequel il faut ajouter le listener - * @param l le listener a ajouter - */ - public void add(Object category, Listener l){ + * Ajoute un listener sur une certaine categorie, si la categorie n'existe + * alors on la crée en ne lui affectant pas de père + * + * @param category la categorie dans lequel il faut ajouter le listener + * @param l le listener a ajouter + */ + public void add(Object category, Listener l) { checkCategory(category); ListenerSet<Listener> listeners = getListeners(category); listeners.add(l); } + /** - * Supprime un listener d'une categorie, si la categorie ou le listener - * n'existe pas, rien ne se passe. - * @param category la categorie dans lequel il faut supprimer le listener - * @param l le listener a supprimer - */ - public void remove(Object category, Listener l){ + * Supprime un listener d'une categorie, si la categorie ou le listener + * n'existe pas, rien ne se passe. + * + * @param category la categorie dans lequel il faut supprimer le listener + * @param l le listener a supprimer + */ + public void remove(Object category, Listener l) { ListenerSet<Listener> listeners = getListeners(category); listeners.remove(l); } + /** - * Permet de lancer un event dans une categorie, l'event est aussi propag� - * sur les anc�tres de la categorie - * @param category la categorie a partir duquel il faut lancer l'evenement - * @param methodeName le nom de la m�thode de la classe listener - * @param event l'objet event a passer en param�tre de la methode du - * listener - */ + * Permet de lancer un event dans une categorie, l'event est aussi propagé + * sur les ancètres de la categorie + * + * @param category la categorie a partir duquel il faut lancer l'evenement + * @param methodeName le nom de la méthode de la classe listener + * @param event l'objet event a passer en paramètre de la methode du + * listener + */ public void fire(Object category, String methodName, Object event) throws Exception { if (log != null && log.isTraceEnabled()) { @@ -169,44 +175,47 @@ } */ } + /** - * Permet de lancer un event dans une categorie, l'event est aussi propag� - * sur les anc�tres de la categorie, si un meme objet etait listener - * dans plusieurs categories alors il ne recevra qu'une seul notification - * @param category la categorie a partir duquel il faut lancer l'evenement - * @param methodeName le nom de la m�thode de la classe listener - */ + * Permet de lancer un event dans une categorie, l'event est aussi propagé + * sur les ancètres de la categorie, si un meme objet etait listener + * dans plusieurs categories alors il ne recevra qu'une seul notification + * + * @param category la categorie a partir duquel il faut lancer l'evenement + * @param methodeName le nom de la méthode de la classe listener + */ public void fire(Object category, String methodName) throws Exception { - for(Listener l : getAllListeners(category)){ - Statement stm = new Statement(l, methodName, null); + for (Listener l : getAllListeners(category)) { + Statement stm = new Statement(l, methodName, null); stm.execute(); } } + /** - * Retourne un Iterator sur tous les listeners qu'il faut prevenir si on - * souhaite prevenir une certaine categorie. Ceci inclue les ancetre de la - * categorie - */ - public Iterator<Listener> iterator(Object category){ + * Retourne un Iterator sur tous les listeners qu'il faut prevenir si on + * souhaite prevenir une certaine categorie. Ceci inclue les ancetre de la + * categorie + */ + public Iterator<Listener> iterator(Object category) { return getAllListeners(category).iterator(); } /** - * Retourne un ListenerSet contenant tous les listeners c'est � dire les - * listener de la categorie demand� mais aussi les listeners des ancetres - */ - protected ListenerSet<Listener> getAllListeners(Object category){ + * Retourne un ListenerSet contenant tous les listeners c'est à dire les + * listener de la categorie demandé mais aussi les listeners des ancetres + */ + protected ListenerSet<Listener> getAllListeners(Object category) { ListenerSet<Listener> result = new ListenerSet<Listener>(); - if(category == ALL){ - for(ListenerSet<Listener> ls : listeners.values()){ + if (category == ALL) { + for (ListenerSet<Listener> ls : listeners.values()) { result.addAll(ls); } - }else{ + } else { Object parentCategory = category; - while(parentCategory != null){ + while (parentCategory != null) { result.addAll(getListeners(parentCategory)); if (isClassCategory && parentCategory instanceof Class) { - result.addAll(getListenersClass((Class)parentCategory)); + result.addAll(getListenersClass((Class) parentCategory)); } parentCategory = categoryParent.get(parentCategory); } @@ -223,19 +232,19 @@ if (superClass != null) { result.addAll(getAllListeners(superClass)); } - for (Class c : category.getInterfaces()){ + for (Class c : category.getInterfaces()) { result.addAll(getAllListeners(c)); } - return result; + return result; } - + /** - * Retourne un ListenerSet contenant seulement les listener de la categorie - * demand�. Si la categorie n'existe pas alors elle est cr��. - */ - protected ListenerSet<Listener> getListeners(Object category){ + * Retourne un ListenerSet contenant seulement les listener de la categorie + * demandé. Si la categorie n'existe pas alors elle est créé. + */ + protected ListenerSet<Listener> getListeners(Object category) { ListenerSet<Listener> result = listeners.get(category); - if(result == null){ + if (result == null) { listeners.put(category, result = new ListenerSet<Listener>()); } if (log != null && log.isTraceEnabled()) { @@ -244,7 +253,7 @@ return result; } - public String toString(){ + public String toString() { return "Listeners Category: " + categoryParent + "\nListener: " + listeners; } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/CollectionUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/CollectionUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/CollectionUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +20,7 @@ /* * * CollectionUtil.java * - * Created: 23 f�vr. 2006 09:03:39 + * Created: 23 févr. 2006 09:03:39 * * @author poussin * @version $Revision$ @@ -43,11 +43,11 @@ public class CollectionUtil { /** - * Ajoute a la collection tous les elements pass�s en parametre + * Ajoute a la collection tous les elements passés en parametre * * @param col la collection * @param e les elements a ajouter - * @return la collection pass� en parametre + * @return la collection passé en parametre */ static public <A, E extends Collection<A>> E addAll(E col, A... e) { Collections.addAll(col, e); @@ -55,12 +55,12 @@ } /** - * Ajoute a la liste tous les elements pass�s en parametre + * Ajoute a la liste tous les elements passés en parametre * * @param col la liste - * @param pos le premier index o� ins�rer les donn�es + * @param pos le premier index où insérer les données * @param e les elements a ajouter - * @return la liste pass� en parametre + * @return la liste passé en parametre */ static public <A, E extends List<A>> E addAll(E col, int pos, A... e) { col.addAll(pos, Arrays.asList(e)); @@ -68,19 +68,19 @@ } /** - * Permet de convertir une liste non typ�e, en une liste typ�e. + * Permet de convertir une liste non typée, en une liste typée. * <p/> - * La liste en entr�e en juste bien cast�e. + * La liste en entrée en juste bien castée. * <p/> - * On effectue une v�rification sur le typage des �lements de la liste. + * On effectue une vérification sur le typage des élements de la liste. * <p/> - * Note : <b>Aucune liste n'est cr�ee, ni recopi�e</b> + * Note : <b>Aucune liste n'est créee, ni recopiée</b> * - * @param list la liste � convertir - * @param type le type des �l�ments de la liste - * @return la liste typ�e - * @throws IllegalArgumentException si un �l�ment de la liste en entr�e n'est - * pas en ad�quation avec le type voulue. + * @param list la liste à convertir + * @param type le type des éléments de la liste + * @return la liste typée + * @throws IllegalArgumentException si un élément de la liste en entrée n'est + * pas en adéquation avec le type voulue. */ @SuppressWarnings({"unchecked"}) static public <O> List<O> toGenericList(List list, Class<O> type) throws IllegalArgumentException { @@ -96,19 +96,19 @@ } /** - * Permet de convertir une collection non typ�e, en une collection typ�e. + * Permet de convertir une collection non typée, en une collection typée. * <p/> - * La collection en entr�e en juste bien cast�e. + * La collection en entrée en juste bien castée. * <p/> - * On effectue une v�rification sur le typage des �lements de la collection. + * On effectue une vérification sur le typage des élements de la collection. * <p/> - * Note : <b>Aucune collection n'est cr�ee, ni recopi�e</b> + * Note : <b>Aucune collection n'est créee, ni recopiée</b> * - * @param list la collection � convertir - * @param type le type des �l�ments de la collection - * @return la collection typ�e - * @throws IllegalArgumentException si un �l�ment de la collection en entr�e n'est - * pas en ad�quation avec le type voulue. + * @param list la collection à convertir + * @param type le type des éléments de la collection + * @return la collection typée + * @throws IllegalArgumentException si un élément de la collection en entrée n'est + * pas en adéquation avec le type voulue. */ @SuppressWarnings({"unchecked"}) static public <O> Collection<O> toGenericCollection(Collection list, Class<O> type) throws IllegalArgumentException { @@ -124,19 +124,19 @@ } /** - * Permet de convertir un ensemble non typ�e, en un ensemble typ�e. + * Permet de convertir un ensemble non typée, en un ensemble typée. * <p/> - * L'ensemble en entr�e en juste bien cast�e. + * L'ensemble en entrée en juste bien castée. * <p/> - * On effectue une v�rification sur le typage des �lements de la collection. + * On effectue une vérification sur le typage des élements de la collection. * <p/> - * Note : <b>Aucun ensemble n'est cr�ee, ni recopi�e</b> + * Note : <b>Aucun ensemble n'est créee, ni recopiée</b> * - * @param list l'ensemble � convertir - * @param type le type des �l�ments de l'ensemble - * @return l'ensemble typ�e - * @throws IllegalArgumentException si un �l�ment de l'ensemble en entr�e n'est - * pas en ad�quation avec le type voulue. + * @param list l'ensemble à convertir + * @param type le type des éléments de l'ensemble + * @return l'ensemble typée + * @throws IllegalArgumentException si un élément de l'ensemble en entrée n'est + * pas en adéquation avec le type voulue. */ @SuppressWarnings({"unchecked"}) static public <O> Set<O> toGenericSet(Set list, Class<O> type) throws IllegalArgumentException { Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ConverterUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ConverterUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ConverterUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -22,28 +22,28 @@ import org.apache.commons.beanutils.Converter; /** - * Une classe contenant des m�thodes utiles sur les converters et les conversions + * Une classe contenant des méthodes utiles sur les converters et les conversions * * @author tony */ public class ConverterUtil { - /** le paquetage o� chercher les implentations de Converter, si non pr�sents dans le syst�me */ + /** le paquetage où chercher les implentations de Converter, si non présents dans le système */ protected static final String CONVERTER_PACKAGE = "org.codelutin.util"; /** - * Cherche un converter pour un <code>type</code> donn�. + * Cherche un converter pour un <code>type</code> donné. * <p/> - * Recherche dans un premier temps dans les converteurs d�j� connus. + * Recherche dans un premier temps dans les converteurs déjà connus. * <p/> - * Si le type est une �num et qu'aucun converter, n'a �t� trouv�, on + * Si le type est une énum et qu'aucun converter, n'a été trouvé, on * enregistre un nouveau convert d'enum. * <p/> - * Sinon on tente d'instancier un converteur dans le paquetage d�di� aux + * Sinon on tente d'instancier un converteur dans le paquetage dédié aux * converteurs {@link #CONVERTER_PACKAGE}. * - * @param type le type � convertir - * @return le converter trouv�, ou null si non trouv� + * @param type le type à convertir + * @return le converter trouvé, ou null si non trouvé */ public static <T> Converter getConverter(Class<T> type) { Converter converter = ConvertUtils.lookup(type); @@ -66,21 +66,22 @@ /** * Convertir une valeur! - * - * @param type le type de donn�e recherch�e + * + * @param type le type de donnée recherchée * @param toConvert l'object a convertir - * @return la nouvelle instance de l'objet converti typ� ou null + * @return la nouvelle instance de l'objet converti typé ou null */ @SuppressWarnings({"unchecked"}) - public static <T> T convert(Class<T> type,Object toConvert) { + public static <T> T convert(Class<T> type, Object toConvert) { - T result=null; + T result = null; Converter converter = getConverter(type); - if (converter!=null) { - return (T) converter.convert(type,toConvert); + if (converter != null) { + return (T) converter.convert(type, toConvert); } return result; } + public static void registerConverter(Class type) throws IllegalAccessException, InstantiationException, ClassNotFoundException { if (ConvertUtils.lookup(type) == null) { registerConverter0(type); @@ -94,10 +95,10 @@ } /** - * Enregistre un nouveau converter pour un type d'enum donn�, avec une + * Enregistre un nouveau converter pour un type d'enum donné, avec une * valeur par defaut. * - * @param type le type d'enum � convertir + * @param type le type d'enum à convertir * @param defaultValue la valeur par defaut. */ public static void registerEnumConverter(Class<?> type, Object defaultValue) { @@ -108,10 +109,10 @@ } /** - * Enregistre un nouveau converter pour un type d'enum donn�, sans utiliser + * Enregistre un nouveau converter pour un type d'enum donné, sans utiliser * de valeur par defaut. * - * @param type le type d'enum � convertir + * @param type le type d'enum à convertir */ public static void registerEnumConverter(Class<?> type) { registerEnumConverter(type, null); Modified: trunk/lutinutil/src/main/java/org/codelutin/util/EnumConverter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/EnumConverter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/EnumConverter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -40,7 +40,6 @@ * @see Enum * @see Enum#ordinal() */ -@org.codelutin.i18n.I18nable public class EnumConverter implements Converter { /** to use log facility, just put in your code: log.info(\"...\"); */ @@ -60,7 +59,7 @@ if (useDefault) { return defaultValue; } - throw new ConversionException(_("lutin.error.convertor.noValue",this)); + throw new ConversionException(_("lutin.error.convertor.noValue", this)); } if (isEnabled(aClass, enumType)) { Object result; @@ -124,7 +123,7 @@ } @SuppressWarnings({"unchecked"}) - protected Object valueOf(Class aClass, Object value) { + protected Object valueOf(Class aClass, Object value) { Object result; result = Enum.valueOf(aClass, (String) value); return result; Modified: trunk/lutinutil/src/main/java/org/codelutin/util/EnumEditor.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/EnumEditor.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/EnumEditor.java 2008-08-04 19:25:34 UTC (rev 979) @@ -24,7 +24,7 @@ import java.util.EnumSet; /** - * Une �diteur d'enum. + * Une éditeur d'enum. * * @author chemit */ @@ -43,7 +43,7 @@ protected static Object[] buildModel(Class<?> type) { Class<Enum> enumClass = ReflectUtil.getEnumClass(type); EnumSet result = EnumSet.allOf(enumClass); - return toGenericSet(result,Object.class).toArray(new Object[result.size()]); + return toGenericSet(result, Object.class).toArray(new Object[result.size()]); } } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/FileCompletion.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/FileCompletion.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/FileCompletion.java 2008-08-04 19:25:34 UTC (rev 979) @@ -45,16 +45,16 @@ package org.codelutin.util; +import org.codelutin.i18n.I18n; +import static org.codelutin.i18n.I18n._; + import java.io.Console; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.Locale; -import org.codelutin.i18n.I18n; -import static org.codelutin.i18n.I18n._; -@org.codelutin.i18n.I18nable public class FileCompletion { private boolean exit; private boolean creation; @@ -63,12 +63,10 @@ private Console console; /** - * - * * private Console console; /** constructeur * * @param creation TODO - * @param exit TODO + * @param exit TODO */ public FileCompletion(boolean creation, boolean exit) { this.exit = exit; @@ -84,8 +82,8 @@ /** * demande a l'utilisateur de saisir un chemin - * - * @return TODO + * + * @return TODO * @throws IOException TODO */ public String read() throws IOException { @@ -119,9 +117,9 @@ filtre.setFilter(file); String[] listFichier = fTmp.list(filtre); if (listFichier.length == 1) { - if (!(fTmp.getParentFile()==null)) + if (!(fTmp.getParentFile() == null)) line = fTmp.getCanonicalPath() + File.separator - + listFichier[0]; + + listFichier[0]; else line = fTmp.getCanonicalPath() + listFichier[0]; } else if (listFichier.length > 1) { @@ -167,16 +165,12 @@ return line; } - /** - * - * Filtre les fichiers a afficher - * - */ + /** Filtre les fichiers a afficher */ class Filter implements FilenameFilter { private String filtre; /** - * @param dir TODO + * @param dir TODO * @param name TODO * @return boolean */ @@ -186,7 +180,7 @@ /** * le parametre est le debut des noms de fichiers a afficher - * + * * @param s TODO */ public void setFilter(String s) { @@ -195,7 +189,6 @@ } /** - * * @param path TODO * @return String */ @@ -206,18 +199,12 @@ return lineNonNull; } - /** - * - * @return boolean - */ + /** @return boolean */ public boolean consoleAvailable() { return consoleAvailable; } - /** - * - * @param listefichiers TODO - */ + /** @param listefichiers TODO */ private void afficherListe(String[] listefichiers) { if (listefichiers != null) { int i = 0; Modified: trunk/lutinutil/src/main/java/org/codelutin/util/FileUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/FileUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/FileUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -59,7 +59,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private org.apache.commons.logging.Log log = LogFactory.getLog(FileUtil.class); - /** Encoding par defaut utilis� si non sp�cifi� */ + /** Encoding par defaut utilisé si non spécifié */ static public String ENCODING = "ISO-8859-1"; static protected File currentDirectory = new File("."); @@ -91,9 +91,9 @@ /** * Retourne le nom du fichier entre dans la boite de dialogue. - * Si le bouton annuler est utilis�, ou qu'il y a une erreur retourne null. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. * - * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre donn�es + * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données * par deux, le pattern du filtre + la description du filtre * @return * @see #getFile(javax.swing.filechooser.FileFilter[]) @@ -115,7 +115,7 @@ /** * Retourne le nom du fichier entre dans la boite de dialogue. - * Si le bouton annuler est utilis�, ou qu'il y a une erreur retourne null. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. * * @param filters les filtres a ajouter * @return @@ -154,7 +154,7 @@ * @param title le nom de la boite de dialogue * @param approvalText * @return le nom du repertoire entre dans la boite de dialogue. - * Si le bouton annuler est utilis�, ou qu'il y a une erreur retourne + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne * null. */ static public String getDirectory(String title, String approvalText) { @@ -183,7 +183,7 @@ /** * @return le nom du repertoire entre dans la boite de dialogue. - * Si le bouton annuler est utilis�, ou qu'il y a une erreur retourne + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne * null. */ static public String getDirectory() { @@ -212,7 +212,7 @@ /** * Permet de convertir des bytes en fichier, le fichier sera automatiquement - * supprim� a la fin de la JVM. + * supprimé a la fin de la JVM. * * @param bytes * @return le fichier temporaire contenant les bytes @@ -229,7 +229,7 @@ * * @param bytes * @param file le fichier dans lequel il faut ecrire les bytes - * @return le fichier pass� en parametre + * @return le fichier passé en parametre * @throws IOException */ static public File byteToFile(byte[] bytes, File file) throws IOException { @@ -251,7 +251,7 @@ } /** - * Retourne un reader utilisant l'encoding choisi et plac� dans un + * Retourne un reader utilisant l'encoding choisi et placé dans un * BufferedReader * * @param file @@ -279,7 +279,7 @@ } /** - * Retourne un writer utilisant l'encoding choisi et plac� dans un + * Retourne un writer utilisant l'encoding choisi et placé dans un * BufferedWriter * * @param file @@ -301,11 +301,11 @@ /** * Permet de creer un nouveu repertoire temporaire, l'effacement du - * r�pertoire est a la charge de l'appelant + * répertoire est a la charge de l'appelant * * @param prefix le prefix du fichier * @param suffix le suffix du fichier - * @param tmpdir le r�pertoire temporaire ou il faut creer le repertoire + * @param tmpdir le répertoire temporaire ou il faut creer le repertoire * si null on utilise java.io.tmpdir * @return le fichier pointant sur le nouveau repertoire * @throws java.io.IOException @@ -326,7 +326,7 @@ /** * Permet de creer un nouveu repertoire temporaire, l'effacement du - * r�pertoire est a la charge de l'appelant + * répertoire est a la charge de l'appelant * * @param prefix * @param suffix @@ -401,7 +401,7 @@ /** * Permet de donner une representation fichier pour une chaine de caractere. - * Le fichier sera automatiquement effac� � la fin de la JVM. + * Le fichier sera automatiquement effacé à la fin de la JVM. * * @param content le contenu du fichier temporaire * @return le fichier qui contient content @@ -413,10 +413,10 @@ /** * Permet de donner une representation fichier pour une chaine de caractere. - * Le fichier sera automatiquement effac� � la fin de la JVM. + * Le fichier sera automatiquement effacé à la fin de la JVM. * * @param content le contenu du fichier temporaire - * @param fileSuffix l'extension du fichier cr�� + * @param fileSuffix l'extension du fichier créé * @return le fichier qui contient content * @throws IOException */ @@ -433,8 +433,8 @@ * * @param file le fichier dont on souhaite le nom sans le chemin * @param suffixes si present represente le suffixe a eliminer du fichier - * s'il est trouv� - * @return le nom du fichier sans le suffixe si trouv�. + * s'il est trouvé + * @return le nom du fichier sans le suffixe si trouvé. */ static public String basename(File file, String... suffixes) { String result = file.getName(); @@ -448,7 +448,7 @@ } /** - * Permet de r�cup�rer l'extension d'un fichier + * Permet de récupérer l'extension d'un fichier * * @param file le fichier dont on souhaite l'extension * @param extchars la liste des caracteres pouvant former l'extension @@ -478,12 +478,12 @@ } /** - * Retourne tous les sous r�pertoires du r�pertoire pass� en argument. + * Retourne tous les sous répertoires du répertoire passé en argument. * - * @param directory un r�pertoire - * @return une liste d'objet {@link java.io.File} de r�pertoires et ceci - * recursivement � partir de directory, si directory - * n'est pas un r�pertoire la liste est vide. + * @param directory un répertoire + * @return une liste d'objet {@link java.io.File} de répertoires et ceci + * recursivement à partir de directory, si directory + * n'est pas un répertoire la liste est vide. */ public static List<File> getSubDirectories(File directory) { class DirectoryFilter implements FileFilter { @@ -495,12 +495,12 @@ } /** - * Retourne tous les fichiers du r�pertoire pass� en argument. + * Retourne tous les fichiers du répertoire passé en argument. * - * @param directory un r�pertoire + * @param directory un répertoire * @return une liste d'objet {@link java.io.File} des fichiers et ceci - * recursivement � partir de directory, si directory n'est pas un - * r�pertoire la liste est vide + * recursivement à partir de directory, si directory n'est pas un + * répertoire la liste est vide */ public static List<File> getFiles(File directory) { class NormalFileFilter implements FileFilter { @@ -512,12 +512,12 @@ } /** - * Retourne les fichiers d'un r�pertoire qui s'attisfont un certain pattern. - * La recherche est faite r�cursivement dans les sous r�pertoires + * Retourne les fichiers d'un répertoire qui s'attisfont un certain pattern. + * La recherche est faite récursivement dans les sous répertoires * - * @param directory le r�pertoire � partir duquel il faut faire la recherche - * @param pattern le pattern que doit respecter le fichier pour �tre dans la - * liste r�sultante + * @param directory le répertoire à partir duquel il faut faire la recherche + * @param pattern le pattern que doit respecter le fichier pour être dans la + * liste résultante * @param recursively * @return une liste d'objet {@link java.io.File} qui ont s'attisfait le * pattern. @@ -537,12 +537,12 @@ } /** - * Retourne la liste de toutes les fichiers ou r�pertoire qui s'attisfont + * Retourne la liste de toutes les fichiers ou répertoire qui s'attisfont * le filtre * - * @param directory repertoire � partir duquel il faut faire la recherche - * @param ff le filtre � appliquer pour savoir si le fichier parcouru doit - * �tre conserv� dans les r�sultats, ou null pour tous les fichiers + * @param directory repertoire à partir duquel il faut faire la recherche + * @param ff le filtre à appliquer pour savoir si le fichier parcouru doit + * être conservé dans les résultats, ou null pour tous les fichiers * @param recursively * @return une liste d'objet {@link java.io.File}, qui s'attisfont le filtre */ @@ -568,10 +568,10 @@ } /** - * Supprime recursivement tout le contenu d'un r�pertoire. + * Supprime recursivement tout le contenu d'un répertoire. * * @param directory - * @return vrai si tout se passe bien, false si la suppression d'un �lement + * @return vrai si tout se passe bien, false si la suppression d'un élement * se passe mal */ public static boolean deleteRecursively(String directory) { @@ -579,10 +579,10 @@ } /** - * Supprime recursivement tout le contenu d'un r�pertoire. + * Supprime recursivement tout le contenu d'un répertoire. * * @param directory - * @return vrai si tout se passe bien, false si la suppression d'un �lement + * @return vrai si tout se passe bien, false si la suppression d'un élement * se passe mal */ public static boolean deleteRecursively(File directory) { @@ -595,14 +595,14 @@ /** * Permet de faire une action avant le parcours des fichiers, c-a-d que - * l'on fera l'action sur les fichiers contenu dans un r�pertoire - * apr�s l'action sur le r�pertoire lui m�me. + * l'on fera l'action sur les fichiers contenu dans un répertoire + * après l'action sur le répertoire lui même. * - * @param f le fichier ou r�pertoire � partir duquel il faut commencer - * @param fileAction l'action � effectuer sur chaque fichier - * @return le r�sultat des fileAction execut� sur les fichiers, chaque - * r�sultat de FileAction sont assembl� par un ET logique pour donner - * le r�sultat final + * @param f le fichier ou répertoire à partir duquel il faut commencer + * @param fileAction l'action à effectuer sur chaque fichier + * @return le résultat des fileAction executé sur les fichiers, chaque + * résultat de FileAction sont assemblé par un ET logique pour donner + * le résultat final */ public static boolean walkAfter(File f, FileAction fileAction) { boolean result = fileAction.doAction(f); @@ -616,15 +616,15 @@ } /** - * Permet de faire une action ap�s le parcours des fichiers, c-a-d que - * l'on fera l'action sur les fichiers contenu dans un r�pertoire - * avant l'action sur le r�pertoire lui m�me. + * Permet de faire une action apès le parcours des fichiers, c-a-d que + * l'on fera l'action sur les fichiers contenu dans un répertoire + * avant l'action sur le répertoire lui même. * - * @param f le fichier ou r�pertoire � partir duquel il faut commencer - * @param fileAction l'action � effectuer sur chaque fichier - * @return le r�sultat des fileAction execut� sur les fichiers, chaque - * r�sultat de FileAction sont assembl� par un ET logique pour donner - * le r�sultat final + * @param f le fichier ou répertoire à partir duquel il faut commencer + * @param fileAction l'action à effectuer sur chaque fichier + * @return le résultat des fileAction executé sur les fichiers, chaque + * résultat de FileAction sont assemblé par un ET logique pour donner + * le résultat final */ public static boolean walkBefore(File f, FileAction fileAction) { boolean result = true; @@ -675,7 +675,7 @@ * @param srcDir * @param destDir * @param includePatterns les patterns que doivent resperter les - * fichiers/repertoires pour etre copi�. Si vide alors tout est copi� + * fichiers/repertoires pour etre copié. Si vide alors tout est copié * @throws IOException */ static public void copyRecursively(File srcDir, File destDir, String... includePatterns) throws IOException { @@ -694,7 +694,7 @@ * @param renameTo new name for file if renameFrom is applicable to it * you can use $1, $2, ... if you have '(' ')' in renameFrom * @param includePatterns les patterns que doivent resperter les - * fichiers/repertoires pour etre copi�. Si vide alors tout est copi� + * fichiers/repertoires pour etre copié. Si vide alors tout est copié * @throws IOException */ static public void copyAndRenameRecursively(File srcDir, File destDir, @@ -717,7 +717,7 @@ * you can use $1, $2, ... if you have '(' ')' in renameFrom * @param exclude inverse include pattern interpretation * @param includePatterns les patterns que doivent resperter les - * fichiers/repertoires pour etre copi�. Si vide alors tout est copi� + * fichiers/repertoires pour etre copié. Si vide alors tout est copié * @throws IOException */ static public void copyAndRenameRecursively(File srcDir, File destDir, Modified: trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -34,60 +34,62 @@ import org.codelutin.util.FormatMap.Format; /** -* Un converter est un objet qui permet de pass� d'une representation d'un -* objet vers une autre representation. Le mininum que converter doit savoir -* faire, est de converter une representation Java vers le format qu'il -* 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. -*/ + * Un converter est un objet qui permet de passé d'une representation d'un + * objet vers une autre representation. Le mininum que converter doit savoir + * faire, est de converter une representation Java vers le format qu'il + * 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. + */ public interface FormatConverter<A> { // FormatConverter static final public Format FORMAT_JAVA = new Format("Format Java"); /** - * Convertie une valeur vers la representation FORMAT g�r� par cette classe - * @param factory la factory utilisable pour rechercher d'autre converter - * si la representation Java n'est pas presente dans values et que l'on - * en a besoin - * @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()}. - * @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 - * il peut-etre pass� dans les args. Si le converter a besoin d'autre - * converter les memes args lui seront pass�. - * @return l'objet dans la representation demand�s par type - * @throws IllegalArgumentException si auncun moyen n'est trouve pour - * convertir une des valeurs de values dans le format g�r� par cette classe. - * Ou s'il manque dans les args des objets utils pour la conversion. - */ + * Convertie une valeur vers la representation FORMAT géré par cette classe + * + * @param factory la factory utilisable pour rechercher d'autre converter + * si la representation Java n'est pas presente dans values et que l'on + * en a besoin + * @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()}. + * @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 + * il peut-etre passé dans les args. Si le converter a besoin d'autre + * converter les memes args lui seront passé. + * @return l'objet dans la representation demandés par type + * @throws IllegalArgumentException si auncun moyen n'est trouve pour + * convertir une des valeurs de values dans le format géré par cette classe. + * Ou s'il manque dans les args des objets utils pour la conversion. + */ public A convert(FormatConverterFactory factory, - Format format, FormatMap values, Object ... args); + Format format, FormatMap values, Object... args); /** - * Convertie une valeur vers le Java - * @param factory la factory utilisable pour rechercher d'autre converter - * si la representation Java n'est pas presente dans values et que l'on - * en a besoin - * @param format le format � utiliser comme valeur d'entr� - * @param values une map contenant les diff�rentes representation de la - * meme valeur. La valeur interessante dans la map pour cette methode - * est celle retourn�e par values.get(getFormat()) si cet appel, ne - * retourne pas quelque chose de valid, la methode doit lever une exception - * @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 - * il peut-etre pass� dans les args. Si le converter a besoin d'autre - * converter les memes args lui seront pass�. - * @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. - */ + * Convertie une valeur vers le Java + * + * @param factory la factory utilisable pour rechercher d'autre converter + * si la representation Java n'est pas presente dans values et que l'on + * en a besoin + * @param format le format à utiliser comme valeur d'entré + * @param values une map contenant les différentes representation de la + * meme valeur. La valeur interessante dans la map pour cette methode + * est celle retournée par values.get(getFormat()) si cet appel, ne + * retourne pas quelque chose de valid, la methode doit lever une exception + * @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 + * il peut-etre passé dans les args. Si le converter a besoin d'autre + * converter les memes args lui seront passé. + * @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. + */ public Object unconvert(FormatConverterFactory factory, - Format format, FormatMap values, Object ... args); + Format format, FormatMap values, Object... args); } // FormatConverter Modified: trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverterFactory.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverterFactory.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/FormatConverterFactory.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,33 +31,33 @@ package org.codelutin.util; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedList; - import org.apache.commons.collections.map.MultiKeyMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.util.FormatMap.Format; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedList; + /** -* Factory permet d'enregistrer des objets de changement de format, et de -* les recup�rer pour les utiliser. -* Les objets converter doivent au moins savoir convertir les objets depuis -* une representation Java. Pour des raisons d'optimisation, il est possible -* qu'il sache aussi convertir a partir d'autre representation, qui si elle -* existe sont moins couteuse a convertir. -* Il faut aussi que les converter sache convertir de leur representation vers -* un objet Java. -* par exemple si on enregistre les converiseurs suivant: -* <pre> -* addConverter(new MatrixToXMLFormatConverter()); -* addConverter(new MatrixToSQLFormatConverter()); -* FormatConverterFactory.convert(Matrix.class, MatrixToXMLFormatConverter.TYPE, -* values, AppContext); -* </pre> -* Dans ce cas pour des raisons d'optimisation -*/ + * Factory permet d'enregistrer des objets de changement de format, et de + * les recupérer pour les utiliser. + * Les objets converter doivent au moins savoir convertir les objets depuis + * une representation Java. Pour des raisons d'optimisation, il est possible + * qu'il sache aussi convertir a partir d'autre representation, qui si elle + * existe sont moins couteuse a convertir. + * Il faut aussi que les converter sache convertir de leur representation vers + * un objet Java. + * par exemple si on enregistre les converiseurs suivant: + * <pre> + * addConverter(new MatrixToXMLFormatConverter()); + * addConverter(new MatrixToSQLFormatConverter()); + * FormatConverterFactory.convert(Matrix.class, MatrixToXMLFormatConverter.TYPE, + * values, AppContext); + * </pre> + * Dans ce cas pour des raisons d'optimisation + */ public class FormatConverterFactory { // FormatConverterFactory /** to use log facility, just put in your code: log.info(\"...\"); */ @@ -67,7 +67,7 @@ /** <Class, from, to -> FormatConverter> */ protected MultiKeyMap converters = new MultiKeyMap(); - synchronized static public FormatConverterFactory getInstance(){ + synchronized static public FormatConverterFactory getInstance() { if (instance == null) { instance = new FormatConverterFactory(); } @@ -75,59 +75,62 @@ } /** - * Permet d'enregitrer un converter pour permettre la convertion d'une - * certain type Java d'une representation vers une autre. - * par exemple le type String d'un objet Java vers une chaine XML - * @param clazz la class de la representation Java de l'objet - * @param format le format g�r� par le FormatConverter - * @param c le converter a enregistrer - */ + * Permet d'enregitrer un converter pour permettre la convertion d'une + * certain type Java d'une representation vers une autre. + * par exemple le type String d'un objet Java vers une chaine XML + * + * @param clazz la class de la representation Java de l'objet + * @param format le format géré par le FormatConverter + * @param c le converter a enregistrer + */ public void addConverter(Class clazz, Format format, FormatConverter c) { converters.put(clazz, format, c); } /** - * permet de recupere le converter pour la classe souhait�e. - * @param clazz la classe de l'objet dont on souhaite le converter - * @param format qui doit �tre g�r� par le converter - * @param defaultConverter si aucun converter trouv�, ce converter est - * retourn� - * @return le converter souhait� ou defaultConverter - */ + * permet de recupere le converter pour la classe souhaitée. + * + * @param clazz la classe de l'objet dont on souhaite le converter + * @param format qui doit être géré par le converter + * @param defaultConverter si aucun converter trouvé, ce converter est + * retourné + * @return le converter souhaité ou defaultConverter + */ public FormatConverter getConverter(Class clazz, Format format, - FormatConverter defaultConverter) { - FormatConverter result = (FormatConverter)converters.get(clazz, format); - if(result == null){ + FormatConverter defaultConverter) { + FormatConverter result = (FormatConverter) converters.get(clazz, format); + if (result == null) { result = defaultConverter; } return result; } /** - * @return retourne null si aucun converter trouv� - * @see #getConverter(Class, Object, FormatConverter) - */ - public FormatConverter getConverter(Class clazz, Format format){ + * @return retourne null si aucun converter trouvé + * @see #getConverter(Class, Object, FormatConverter) + */ + public FormatConverter getConverter(Class clazz, Format format) { return getConverter(clazz, format, null); } /** - * Permet de retrouver le meilleur converter disponible pour l'argument - * clazz - * @param clazz la classe de l'objet dont on souhaite le converter - * @param format qui doit �tre g�r� par le converter - * @param defaultConverter si aucun converter trouv�, ce converter est - * retourn� - * @return le converter souhait� ou defaultConverter - */ + * Permet de retrouver le meilleur converter disponible pour l'argument + * clazz + * + * @param clazz la classe de l'objet dont on souhaite le converter + * @param format qui doit être géré par le converter + * @param defaultConverter si aucun converter trouvé, ce converter est + * retourné + * @return le converter souhaité ou defaultConverter + */ public FormatConverter findConverter(Class clazz, Format format, - FormatConverter defaultConverter) { + FormatConverter defaultConverter) { FormatConverter result = null; LinkedList<Class> interfaces = new LinkedList<Class>(); - // On recherche la le transformer le plus sp�cifique sur les Class + // On recherche la le transformer le plus spécifique sur les Class Class parent = clazz; - while(result == null && parent != null){ + while (result == null && parent != null) { Collections.addAll(interfaces, parent.getInterfaces()); result = getConverter(parent, format); parent = parent.getSuperclass(); @@ -135,51 +138,51 @@ // Si on a pas encore trouve de transformer on recherche // un encodeur/decodeur pour les interfaces - for(Iterator<Class> i=interfaces.iterator(); result==null && i.hasNext();){ + for (Iterator<Class> i = interfaces.iterator(); result == null && i.hasNext();) { result = getConverter(i.next(), format); } if (result == null) { - log.warn("Aucun converter trouv� pour le type: " + clazz); + log.warn("Aucun converter trouvé pour le type: " + clazz); result = defaultConverter; } - log.debug("converter " + result + " utilis� pour le type: " + clazz); + log.debug("converter " + result + " utilisé pour le type: " + clazz); return result; } /** - * @return retourne null si aucun converter trouv� - * @see #findConverter(Class, Object, FormatConverter) - */ + * @return retourne null si aucun converter trouvé + * @see #findConverter(Class, Object, FormatConverter) + */ public FormatConverter findConverter(Class clazz, Format format) { return findConverter(clazz, format, null); } - public Object convert(Format format, FormatMap values, Object ... args) { + public Object convert(Format format, FormatMap values, Object... args) { FormatConverter c = findConverter(values.getType(), format); - if(c == null){ - throw new IllegalArgumentException("Aucun converter utilisable pour les arguments donn�s class: " + values.getType().getName() + " format: " + format); + if (c == null) { + throw new IllegalArgumentException("Aucun converter utilisable pour les arguments donnés class: " + values.getType().getName() + " format: " + format); } return c.convert(this, format, values, args); } - public Object unconvert(Format format, FormatMap values, Object ... args) { + public Object unconvert(Format format, FormatMap values, Object... args) { FormatConverter c = findConverter(values.getType(), format); - if(c == null){ - throw new IllegalArgumentException("Aucun converter utilisable pour les arguments donn�s"); + if (c == null) { + throw new IllegalArgumentException("Aucun converter utilisable pour les arguments donnés"); } return c.unconvert(this, format, values, args); } public Object convert(FormatConverter defaultConverter, - Format format, FormatMap values, Object ... args) { + Format format, FormatMap values, Object... args) { FormatConverter c = findConverter(values.getType(), format, defaultConverter); return c.convert(this, format, values, args); } public Object unconvert(FormatConverter defaultConverter, - Format format, FormatMap values, Object ... args) { + Format format, FormatMap values, Object... args) { FormatConverter c = findConverter(values.getType(), format, defaultConverter); return c.unconvert(this, format, values, args); } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/FormatMap.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/FormatMap.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/FormatMap.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,88 +31,90 @@ package org.codelutin.util; +import org.codelutin.util.FormatMap.Format; + import java.util.HashMap; import java.util.Map; -import org.codelutin.util.FormatMap.Format; /** -* Classe servant de conteneur pour les diff�rentes representation d'un objet -* Les representations doivents �tre des instances de {@link #Format}. Le mieux -* est lors de l'ecriture des convertisseurs pour un nouveau format est de -* cr�er une instance final static de {@link #Format} Format pour representer -* ce format -* -* <h2>Utilisation</h2> -* <pre> -* FormatMap values = new FormatMap(MonObject.class); -* values.put(FormatConverter.FORMAT_JAVA, monInstance); -* Element xml = (Element)values.convert(XMLConverter.FORMAT_XML); -* Object sql = values.convert(SQLConverter.FORMAT_SQL); -* </pre> -* <pre> -* FormatMap values = new FormatMap(MonObject.class); -* values.put(FormatConverter.FORMAT_XML, monInstanceEnXML); -* Object sql = values.convert(SQLConverter.FORMAT_SQL); -* </pre> -* Dans ce second cas, la demande de la version SQL, transforme automatiquement -* la representation XML qui est la seul presente en Java, puis a partir de -* cette representation Java, on recupere la representation SQL. Bien sur -* Si le convertisseur SQL, peut directement convertir le XML en SQL, alors -* la conversion Java ne sera pas faite. -* <p> -* Il est souvent plus simple de faire une petite classe avec les methodes -* getSQL() et getXML(), qui retourne les valeurs directement dans le bon type -* et qui n'ont pas besoin d'argument. -*/ + * Classe servant de conteneur pour les différentes representation d'un objet + * Les representations doivents être des instances de {@link #Format}. Le mieux + * est lors de l'ecriture des convertisseurs pour un nouveau format est de + * créer une instance final static de {@link #Format} Format pour representer + * ce format + * <p/> + * <h2>Utilisation</h2> + * <pre> + * FormatMap values = new FormatMap(MonObject.class); + * values.put(FormatConverter.FORMAT_JAVA, monInstance); + * Element xml = (Element)values.convert(XMLConverter.FORMAT_XML); + * Object sql = values.convert(SQLConverter.FORMAT_SQL); + * </pre> + * <pre> + * FormatMap values = new FormatMap(MonObject.class); + * values.put(FormatConverter.FORMAT_XML, monInstanceEnXML); + * Object sql = values.convert(SQLConverter.FORMAT_SQL); + * </pre> + * Dans ce second cas, la demande de la version SQL, transforme automatiquement + * la representation XML qui est la seul presente en Java, puis a partir de + * cette representation Java, on recupere la representation SQL. Bien sur + * Si le convertisseur SQL, peut directement convertir le XML en SQL, alors + * la conversion Java ne sera pas faite. + * <p/> + * Il est souvent plus simple de faire une petite classe avec les methodes + * getSQL() et getXML(), qui retourne les valeurs directement dans le bon type + * et qui n'ont pas besoin d'argument. + */ public class FormatMap extends HashMap<Format, Object> { // FormatMap /** */ private static final long serialVersionUID = -3386611811885092898L; - + static public class Format { protected String name = null; + public Format(String name) { this.name = name; } - public String toString(){ + + public String toString() { return name; } } 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 - */ + * 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 + */ public void setValue(Format format, Object value) { clear(); put(format, value); } - /** - * Utilise le FormatConverterFactory par defaut pour la conversion - */ - public Object convert(Format format, Object ... args){ + /** Utilise le FormatConverterFactory par defaut pour la conversion */ + public Object convert(Format format, Object... args) { return convert(FormatConverterFactory.getInstance(), format, args); } /** - * Recupere la valeur dans le format demand� - * @param factory la FormatConverterFactory a utiliser - * @param format le format souhait� - * @param args des arguments facultatifs en fonction du context d'utilisation - */ + * Recupere la valeur dans le format demandé + * + * @param factory la FormatConverterFactory a utiliser + * @param format le format souhaité + * @param args des arguments facultatifs en fonction du context d'utilisation + */ public Object convert(FormatConverterFactory factory, Format format, - Object ... args){ + Object... args) { Object result = null; Map<Format, Object> values = this; //if (!values.containsKey(format) || @@ -124,7 +126,7 @@ result = values.get(format); } else if (format.equals(FormatConverter.FORMAT_JAVA)) { // on recherche une representation, que l'on convertie en Java - if (values.isEmpty()){ + if (values.isEmpty()) { throw new IllegalArgumentException("Aucun valeur disponible"); } Format otherFormat = values.keySet().iterator().next(); @@ -139,22 +141,21 @@ return result; } - /** - * Utilise le FormatConverterFactory par defaut pour la conversion - */ - public Object unconvert(Format format, Object ... args){ + /** Utilise le FormatConverterFactory par defaut pour la conversion */ + public Object unconvert(Format format, Object... args) { return unconvert(FormatConverterFactory.getInstance(), format, args); } /** - * Donne la representation Java de l'objet en essayant de partir de la - * representation pass� en parametre. - * @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 - */ + * Donne la representation Java de l'objet en essayant de partir de la + * representation passé en parametre. + * + * @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 + */ public Object unconvert(FormatConverterFactory factory, Format format, - Object ... args){ + Object... args) { Object result = null; Map<Format, Object> values = this; if (!values.containsKey(format) && @@ -165,7 +166,7 @@ // si on a deja la representation Java on la retourne tout de suite if (values.containsKey(FormatConverter.FORMAT_JAVA)) { result = values.get(FormatConverter.FORMAT_JAVA); - } else if (values.containsKey(format)){ + } else if (values.containsKey(format)) { result = factory.unconvert(format, this, args); values.put(FormatConverter.FORMAT_JAVA, result); } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/GZUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/GZUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/GZUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -44,60 +44,52 @@ public class GZUtil { // GZUtil - /** - * Retourne la string decompressee - */ - public static StringBuffer bytesToStringBuffer(byte[] in){ - try{ - if (in == null || in.length == 0){ + /** Retourne la string decompressee */ + public static StringBuffer bytesToStringBuffer(byte[] in) { + try { + if (in == null || in.length == 0) { return new StringBuffer(""); } GZIPInputStream gz = new GZIPInputStream(new BufferedInputStream(new ByteArrayInputStream(in))); StringBuffer sb = new StringBuffer(); int c; - while((c=gz.read()) != -1){ - sb.append((char)c); + while ((c = gz.read()) != -1) { + sb.append((char) c); } gz.close(); return sb; } - catch(IOException eee){ + catch (IOException eee) { throw new GZUtilException("Probleme dans la decompression", eee); } } - /** - * Retourne la string decompressee - */ - public static String bytesToString(byte[] in){ + /** Retourne la string decompressee */ + public static String bytesToString(byte[] in) { return bytesToStringBuffer(in).toString(); } - /** - * Retourne la string compressee - */ - public static byte[] stringBufferToBytes(StringBuffer elem){ + /** Retourne la string compressee */ + public static byte[] stringBufferToBytes(StringBuffer elem) { return stringToBytes(elem.toString()); } - /** - * Retourne la string compressee - */ - public static byte[] stringToBytes(String elem){ - try{ + /** Retourne la string compressee */ + public static byte[] stringToBytes(String elem) { + try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream gz = new GZIPOutputStream(new BufferedOutputStream(baos)); Reader sr = new BufferedReader(new StringReader(elem)); int c; - while((c=sr.read()) != -1){ - gz.write((char)c); + while ((c = sr.read()) != -1) { + gz.write((char) c); } gz.close(); return baos.toByteArray(); } - catch(IOException eee){ + catch (IOException eee) { throw new GZUtilException("Probleme dans la compression", eee); } } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/GZUtilException.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/GZUtilException.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/GZUtilException.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -31,15 +31,15 @@ package org.codelutin.util; -public class GZUtilException extends RuntimeException { // GZUtilException +public class GZUtilException extends RuntimeException { // GZUtilException /** */ private static final long serialVersionUID = -3342417793974741697L; - public GZUtilException (String msg){ + public GZUtilException(String msg) { super(msg); } - public GZUtilException (String msg, Throwable eee){ + public GZUtilException(String msg, Throwable eee) { super(msg, eee); } } // GZUtilException Modified: trunk/lutinutil/src/main/java/org/codelutin/util/H2TypeEnum.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/H2TypeEnum.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/H2TypeEnum.java 2008-08-04 19:25:34 UTC (rev 979) @@ -19,7 +19,7 @@ package org.codelutin.util; /** - * Une �num�ration pour repr�senter les diff�rentes types d'implantation dans H2 + * Une énumération pour représenter les différentes types d'implantation dans H2 * * @author chemit */ Modified: trunk/lutinutil/src/main/java/org/codelutin/util/HashList.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/HashList.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/HashList.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -37,31 +37,33 @@ import java.util.Iterator; /** -* Cette objet permet de gerer l'unicit� des objets ajout�. -* Lorsque l'on appelle la methode add sur cette objet, il verifie -* en premier que l'objet n'est pas deja dans la liste. S'il y est -* alors il n'est pas ajouter, sinon il est ajouter. -* L'utilisation de la methode set n'est pas permise -* -* FIXME: la serialisation n'est pas modifier, c-a-d que seul le tableau est -* conserve et pas la hashSet, donc apres recuperation, l'uticite n'est plus -* garantie. Il faut donc surcharger readObject et writeObject pour conserver -* le HashSet -*/ + * Cette objet permet de gerer l'unicité des objets ajouté. + * Lorsque l'on appelle la methode add sur cette objet, il verifie + * en premier que l'objet n'est pas deja dans la liste. S'il y est + * alors il n'est pas ajouter, sinon il est ajouter. + * L'utilisation de la methode set n'est pas permise + * <p/> + * FIXME: la serialisation n'est pas modifier, c-a-d que seul le tableau est + * conserve et pas la hashSet, donc apres recuperation, l'uticite n'est plus + * garantie. Il faut donc surcharger readObject et writeObject pour conserver + * le HashSet + */ public class HashList<E> extends ArrayList<E> { // HashList /** */ private static final long serialVersionUID = -334941610313293930L; - + protected HashSet<E> set = new HashSet<E>(); - public HashList(){ + public HashList() { super(); } - public HashList(Collection<? extends E> c){ + + public HashList(Collection<? extends E> c) { addAll(c); } - public HashList(int initialCapacity){ + + public HashList(int initialCapacity) { super(initialCapacity); } @@ -79,41 +81,41 @@ @Override public void add(int index, E element) { - if(set.add(element)){ + if (set.add(element)) { super.add(index, element); } } /** - * supprime l'element demand�. Si l'elment n'existe pas alors, null - * est retroun�. - */ + * supprime l'element demandé. Si l'elment n'existe pas alors, null + * est retrouné. + */ @Override public E remove(int index) { - if(set.remove(get(index))){ + if (set.remove(get(index))) { return super.remove(index); } return null; } - + @Override public void clear() { set.clear(); super.clear(); } - + @Override public boolean addAll(Collection<? extends E> c) { boolean modified = false; Iterator<? extends E> e = c.iterator(); while (e.hasNext()) { - if(add(e.next())) + if (add(e.next())) modified = true; } return modified; } - + @Override public boolean addAll(int index, Collection<? extends E> c) { boolean modified = false; @@ -128,7 +130,7 @@ @Override protected void removeRange(int fromIndex, int toIndex) { - for(int i=toIndex-1; i>=fromIndex; i--){ + for (int i = toIndex - 1; i >= fromIndex; i--) { remove(i); } } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/HashMapMultiKey.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/HashMapMultiKey.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/HashMapMultiKey.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -31,6 +31,9 @@ package org.codelutin.util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.io.Serializable; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; @@ -41,19 +44,17 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; /** * Permet de stocker un element suivant un ensemble de cle. - * + * <p/> * FIXME: pas le temps d'implanter toutes les methodes pour un support * complet des References. iterator(), entrySet(), ... peuvent ne pas * fonctionner comme il faut, c-a-d qu'il retourne les references et non * les objets. Mais les methodes simples fonctionnent: put, remove, get, ... - * + * * @deprecated Cette classe semble avoir des memory leaks. Mieux vaut ne pas - * l'utiliser ou alors il faudrait refaire l'implantation complete de facon propre + * l'utiliser ou alors il faudrait refaire l'implantation complete de facon propre */ @Deprecated public class HashMapMultiKey extends HashMap<Object, Object> { // HashMapMultiKey @@ -67,11 +68,13 @@ public static final Object HARD = null; public static final Object SOFT = new Object(); public static final Object WEAK = new Object(); - + /** key: un objet, value un Set de key pour la vrai hashmap */ protected HashMap<Object, Set<Object>> keys = new HashMap<Object, Set<Object>>(); - /** key: la valeur, valeur: la cle. Permet de supprimer rapidement une - * key lorsque la valeur disparait */ + /** + * key: la valeur, valeur: la cle. Permet de supprimer rapidement une + * key lorsque la valeur disparait + */ protected Map<Object, Object> valueToKey = new IdentityHashMap<Object, Object>(); protected ReferenceQueue<Object> refQueueKey = new ReferenceQueue<Object>(); protected ReferenceQueue<Object> refQueueValue = new ReferenceQueue<Object>(); @@ -80,12 +83,13 @@ protected Object valueType = null; /** - * Si value est une reference et qu'il disparait alors la cle disparait - * Si key est une reference et qu'une de ses composantes disparait alors - * la cle et la valeur disparaissent. - * @param keyType le type de cle SOFT ou WEAK ou null - * @param valueType le type de valeur SOFT ou WEAK ou null - */ + * Si value est une reference et qu'il disparait alors la cle disparait + * Si key est une reference et qu'une de ses composantes disparait alors + * la cle et la valeur disparaissent. + * + * @param keyType le type de cle SOFT ou WEAK ou null + * @param valueType le type de valeur SOFT ou WEAK ou null + */ public HashMapMultiKey(Object keyType, Object valueType) { super(); this.keyType = keyType; @@ -96,80 +100,80 @@ this(null, null); } - /** - * Encapsule dans un objet Reference si besoin l'objet o - */ + /** Encapsule dans un objet Reference si besoin l'objet o */ protected Object refValue(Object o) { - Object result = o; - if (valueType == SOFT) { - result = new TransparenteSoftReference<Object>(o, refQueueValue, false); - } else if (valueType == WEAK) { - result = new TransparenteWeakReference<Object>(o, refQueueValue, false); - } - return result; - } + Object result = o; + if (valueType == SOFT) { + result = new TransparenteSoftReference<Object>(o, refQueueValue, false); + } else if (valueType == WEAK) { + result = new TransparenteWeakReference<Object>(o, refQueueValue, false); + } + return result; + } - protected Object derefValue(Object o) { - Object result = o; - if (valueType == SOFT && o != null) { - result = ((TransparenteSoftReference<?>)o).get(); - } else if (valueType == WEAK && o != null) { - result = ((TransparenteWeakReference<?>)o).get(); - } - return result; - } + protected Object derefValue(Object o) { + Object result = o; + if (valueType == SOFT && o != null) { + result = ((TransparenteSoftReference<?>) o).get(); + } else if (valueType == WEAK && o != null) { + result = ((TransparenteWeakReference<?>) o).get(); + } + return result; + } - /** - * Encapsule dans un objet Reference si besoin l'objet o - */ - protected Object refKey(Object o){ - Object result = o; - if (keyType == SOFT) { - result = new TransparenteSoftReference<Object>(o, refQueueKey, false); - } else if (keyType == WEAK) { - result = new TransparenteWeakReference<Object>(o, refQueueKey, false); - } - return result; - } + /** Encapsule dans un objet Reference si besoin l'objet o */ + protected Object refKey(Object o) { + Object result = o; + if (keyType == SOFT) { + result = new TransparenteSoftReference<Object>(o, refQueueKey, false); + } else if (keyType == WEAK) { + result = new TransparenteWeakReference<Object>(o, refQueueKey, false); + } + return result; + } - protected Object derefKey(Object o) { - Object result = o; - if (keyType == SOFT && o != null) { - result = ((TransparenteSoftReference<?>)o).get(); - } else if (keyType == WEAK && o != null) { - result = ((TransparenteWeakReference<?>)o).get(); - } - return result; - } + protected Object derefKey(Object o) { + Object result = o; + if (keyType == SOFT && o != null) { + result = ((TransparenteSoftReference<?>) o).get(); + } else if (keyType == WEAK && o != null) { + result = ((TransparenteWeakReference<?>) o).get(); + } + return result; + } /** - * Look in the queue if reference is available and remove reference in - * all map - * ATTENTION: this method not call other method, because all other method - * call it - */ - protected void cleanQueue(){ + * Look in the queue if reference is available and remove reference in + * all map + * ATTENTION: this method not call other method, because all other method + * call it + */ + protected void cleanQueue() { Reference<?> o = null; - while(null != (o = refQueueKey.poll())) { - if(log.isTraceEnabled()){ log.trace("clean the refQueueKey : " + o);} + while (null != (o = refQueueKey.poll())) { + if (log.isTraceEnabled()) { + log.trace("clean the refQueueKey : " + o); + } Object val = super.remove(o); valueToKey.remove(val); } - while(null != (o = refQueueValue.poll())) { - if(log.isTraceEnabled()){ log.trace("clean the refQueueValue : " + o);} + while (null != (o = refQueueValue.poll())) { + if (log.isTraceEnabled()) { + log.trace("clean the refQueueValue : " + o); + } // suppression dans la table des values et recuperation de la cle - // associ� + // associé Object keyRef = valueToKey.remove(o); - // suppression dans la table a partir de la cle recuper� + // suppression dans la table a partir de la cle recuperé super.remove(keyRef); - + Object key = derefKey(keyRef); // System.out.println("++++++++++ key: " + key + " keyRef: " + keyRef + " for value: " + o); - if( key != null) { + if (key != null) { // suppression dans l'association des objets de la cle - for(Iterator<Object> i=((Key)key).iterator(); i.hasNext();){ + for (Iterator<Object> i = ((Key) key).iterator(); i.hasNext();) { Object k = i.next(); Set<?> list = keys.get(k); // FIXME il arrive que la list soit null, mais cela devrait @@ -183,13 +187,15 @@ } } } else { - if(log.isTraceEnabled()){ log.trace("key is null !!! do long task to prevent memory leak " + o);} + if (log.isTraceEnabled()) { + log.trace("key is null !!! do long task to prevent memory leak " + o); + } // to prevent memory leak we can clean all list in keys Map - for (Iterator<Object> e=keys.keySet().iterator(); e.hasNext();) { + for (Iterator<Object> e = keys.keySet().iterator(); e.hasNext();) { Object k = e.next(); Set<?> list = keys.get(k); if (list != null) { - for (Iterator<?> i=list.iterator(); i.hasNext();) { + for (Iterator<?> i = list.iterator(); i.hasNext();) { if (derefKey(i.next()) == null) { i.remove(); } @@ -199,40 +205,44 @@ } } } - if(log.isTraceEnabled()){ log.trace("end of long task to prevent memory leak" + o);} + if (log.isTraceEnabled()) { + log.trace("end of long task to prevent memory leak" + o); + } } } } /** - * Retourne toutes les cles qui contiennent au moins une fois l'�l�ment - * e. - * @param e l'element que doivent contenir les cles - * @return la liste des cles. Si aucune cle ne contient l'element e, - * alors la liste retourn� est vide. - */ - public Set<Object> getKeys(Object e){ + * Retourne toutes les cles qui contiennent au moins une fois l'élément + * e. + * + * @param e l'element que doivent contenir les cles + * @return la liste des cles. Si aucune cle ne contient l'element e, + * alors la liste retourné est vide. + */ + public Set<Object> getKeys(Object e) { Set<Object> list = _getKeys(e); return list; } /** - * Retourne toutes les cles qui contiennent au moins une fois l'�l�ment + * Retourne toutes les cles qui contiennent au moins une fois l'élément * e. + * * @param e l'element que doivent contenir les cles * @return la liste des cles. Si aucune cle ne contient l'element e, - * alors la liste retourn� est vide. + * alors la liste retourné est vide. */ - protected Set<Object> _getKeys(Object e){ - cleanQueue(); - Set<Object> list = keys.get(e); - if( list == null){ - list = new HashSet<Object>(); - } - return list; - } + protected Set<Object> _getKeys(Object e) { + cleanQueue(); + Set<Object> list = keys.get(e); + if (list == null) { + list = new HashSet<Object>(); + } + return list; + } - protected Set<Object> getKeysAndAdd(Object e){ + protected Set<Object> getKeysAndAdd(Object e) { Set<Object> list = _getKeys(e); // il ne faut pas encapsuler e dans une ref, sinon on ne retrouve // plus les cles si l'objet etait seulement dans la cle @@ -241,27 +251,29 @@ } /** - * Method put - * - * @param key une collection d'objet - * @param value la valeur a associer a la cle. - * @return l'ancienne valeur pour cette cle, ou null, s'il n'y - * avait pas d'ancienne valeur. - * @throws IllegalArgumentException si le parametre key n'est pas - * une collection d'objet. - */ + * Method put + * + * @param key une collection d'objet + * @param value la valeur a associer a la cle. + * @return l'ancienne valeur pour cette cle, ou null, s'il n'y + * avait pas d'ancienne valeur. + * @throws IllegalArgumentException si le parametre key n'est pas + * une collection d'objet. + */ @Override - public Object put(Object key, Object value){ + public Object put(Object key, Object value) { if (key == null) { - if(log.isWarnEnabled()) {log.warn("key is null");} + if (log.isWarnEnabled()) { + log.warn("key is null"); + } } // a chaque fois que l'on ajoute, on nettoie un peu avant cleanQueue(); - if(key instanceof Key){ + if (key instanceof Key) { // ajout dans la hash des cles - Key keyObject = (Key)key; + Key keyObject = (Key) key; Object keyRef = refKey(key); - for(int i=0; i<keyObject.size(); i++){ + for (int i = 0; i < keyObject.size(); i++) { Object k = keyObject.get(i); // on recupere la liste des cles qui contiennent deja cette cle Set<Object> list = getKeysAndAdd(k); @@ -276,7 +288,7 @@ throw new IllegalArgumentException("L'argument key doit etre un tableau d'objet"); } - + @Override public boolean containsValue(Object value) { cleanQueue(); @@ -300,29 +312,29 @@ } /** - * Method remove permet de supprimer un element suivant une cle - * qui a permit d'ajouter l'element, on bien une composant d'une - * cle qui a permis d'ajouter l'element. Si un tableau d'objet est - * donne, alors au maximum un element est supprime. Si un objet - * est passe alors 0 � N element sont supprimes. En fait tous les - * valeurs qui ont dans leur cle, l'objet sont supprime. - * - * @param key soit un tableau d'objet soit un objet - * @return si un objet Key a ete passe, alors retourne la - * valeur associ�e a cette cle. Si un objet a ete passe, retourne la liste - * des cles qui contient cet objet et qui ont �t� supprim�es. - */ + * Method remove permet de supprimer un element suivant une cle + * qui a permit d'ajouter l'element, on bien une composant d'une + * cle qui a permis d'ajouter l'element. Si un tableau d'objet est + * donne, alors au maximum un element est supprime. Si un objet + * est passe alors 0 à N element sont supprimes. En fait tous les + * valeurs qui ont dans leur cle, l'objet sont supprime. + * + * @param key soit un tableau d'objet soit un objet + * @return si un objet Key a ete passe, alors retourne la + * valeur associée a cette cle. Si un objet a ete passe, retourne la liste + * des cles qui contient cet objet et qui ont été supprimées. + */ @Override - public Object remove(Object key){ + public Object remove(Object key) { // on nettoie un peu avant cleanQueue(); - if(key instanceof Key){ + if (key instanceof Key) { // suppression de la cle // on pourrait aussi mettre la cle dans un WeakRef, ca eviterait // de devoir le supprimer dans les lists de keys, le // GC le ferait pour nous. Object keyRef = refKey(key); - for(Iterator<Object> i=((Key)key).iterator(); i.hasNext();){ + for (Iterator<Object> i = ((Key) key).iterator(); i.hasNext();) { Object k = i.next(); Set<Object> list = _getKeys(k); if (list != null) { @@ -330,22 +342,22 @@ if (list.size() == 0) { keys.remove(k); } - } + } } Object result = super.remove(keyRef); valueToKey.remove(result); return derefValue(result); - }else{ + } else { ArrayList<Key> result = new ArrayList<Key>(); Set<Object> list = _getKeys(key); - if ( list != null ){ - for(Iterator<Object> i=list.iterator(); i.hasNext();){ + if (list != null) { + for (Iterator<Object> i = list.iterator(); i.hasNext();) { Object keyRef = i.next(); - Key keyObject = (Key)derefKey(keyRef); + Key keyObject = (Key) derefKey(keyRef); i.remove(); if (keyObject != null) { // si la cle existe encore - result.add(keyObject); + result.add(keyObject); Object value = super.remove(keyRef); valueToKey.remove(value); } @@ -359,17 +371,18 @@ } /** - * Retourne toutes les valeurs associ�s avec un element de cle - * @param keyElement un element constituant d'une ou de plusieurs cles - * @return la liste des valeurs associ�es aux cl�s contenant keyElement - */ - public ArrayList<Object> getValues(Object keyElement){ + * Retourne toutes les valeurs associés avec un element de cle + * + * @param keyElement un element constituant d'une ou de plusieurs cles + * @return la liste des valeurs associées aux clés contenant keyElement + */ + public ArrayList<Object> getValues(Object keyElement) { cleanQueue(); ArrayList<Object> result = new ArrayList<Object>(); Set<Object> list = _getKeys(keyElement); if (list != null) { - for(Iterator<Object> i=list.iterator(); i.hasNext();){ - Key keyObject = (Key)derefKey(i.next()); + for (Iterator<Object> i = list.iterator(); i.hasNext();) { + Key keyObject = (Key) derefKey(i.next()); if (keyObject != null) { // si la cle existe encore Object val = super.get(keyObject); result.add(derefValue(val)); @@ -383,48 +396,55 @@ /** */ private static final long serialVersionUID = -2297846844678010597L; ArrayList<Object> keys = new ArrayList<Object>(); - public Key add(Object o){ + + public Key add(Object o) { keys.add(o); return this; } - public int size(){ + + public int size() { return keys.size(); } - public Object get(int index){ + + public Object get(int index) { return keys.get(index); } - public Iterator<Object> iterator(){ + + public Iterator<Object> iterator() { return keys.iterator(); } + @Override - public boolean equals(Object o){ + public boolean equals(Object o) { if (o != null && o instanceof Reference) { // on inverse l'egalite pour que la Key soit egal a la ref // si la ref contient la Key return o.equals(this); } else { return (o instanceof Key) && - keys.equals(((Key)o).keys); + keys.equals(((Key) o).keys); } } + @Override - public int hashCode(){ + public int hashCode() { int result = 0; - for(int i=0; i<keys.size(); i++){ + for (int i = 0; i < keys.size(); i++) { Object key = keys.get(i); - if(key != null){ + if (key != null) { result += keys.get(i).hashCode(); } } return result; } + @Override - public String toString(){ + public String toString() { StringBuffer result = new StringBuffer("["); - String v =""; - for(int i=0; i<keys.size(); i++){ + String v = ""; + for (int i = 0; i < keys.size(); i++) { result.append(v); - result.append(""+keys.get(i)); + result.append("" + keys.get(i)); v = ","; } result.append("]"); Modified: trunk/lutinutil/src/main/java/org/codelutin/util/LRUMapMultiKey.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/LRUMapMultiKey.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/LRUMapMultiKey.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,6 +31,9 @@ package org.codelutin.util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -40,34 +43,25 @@ import java.util.Map; import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +/** @author poussin */ -/** - * @author poussin - * - */ - public class LRUMapMultiKey extends LinkedHashMap<LRUMapMultiKey.Key, Object> { private static final long serialVersionUID = 1L; - + private static final Log log = LogFactory.getLog(LRUMapMultiKey.class); - - /** - * @author poussin - * - */ - static public class Key extends ArrayList<Object> { - + + /** @author poussin */ + static public class Key extends ArrayList<Object> { + private static final long serialVersionUID = 1L; - + // protected LRUMapMultiKey map = null; -// protected Reference ref = null; + // protected Reference ref = null; protected int hash = 0; - - public Key(Object ... k) { + + public Key(Object... k) { Collections.addAll(this, k); } @@ -78,7 +72,7 @@ } return hash; } - + // /* (non-Javadoc) // * @see java.util.AbstractList#equals(java.lang.Object) // */ @@ -93,7 +87,7 @@ // } // return super.equals(o); // } - + // /* (non-Javadoc) // * @see java.lang.Object#finalize() // */ @@ -119,40 +113,40 @@ } - - protected Map<Object, Set<Key>> keys = new HashMap<Object, Set<Key>>(); + + protected Map<Object, Set<Key>> keys = new HashMap<Object, Set<Key>>(); protected int maxSize; - + public LRUMapMultiKey(int maxSize) { - super(maxSize<=0?1000:maxSize*100/75, (float)0.75, true); + super(maxSize <= 0 ? 1000 : maxSize * 100 / 75, (float) 0.75, true); this.maxSize = maxSize; } - - public Key createKey(Object ... k) { + + public Key createKey(Object... k) { return new Key(k); } - + /* (non-Javadoc) - * @see java.util.WeakHashMap#clear() - */ + * @see java.util.WeakHashMap#clear() + */ @Override public void clear() { keys.clear(); super.clear(); } - + /* (non-Javadoc) - * @see java.util.WeakHashMap#remove(java.lang.Object) - */ + * @see java.util.WeakHashMap#remove(java.lang.Object) + */ @Override public Object remove(Object k) { if (k instanceof Key) { - return super.remove(k); + return super.remove(k); } else { ArrayList<Key> result = new ArrayList<Key>(); Set<Key> list = keys.remove(k); if (list != null) { - for (Iterator<Key> i=list.iterator(); i.hasNext();){ + for (Iterator<Key> i = list.iterator(); i.hasNext();) { Key key = i.next(); result.add(key); super.remove(key); @@ -162,17 +156,17 @@ return result; } } - + /* (non-Javadoc) - * @see java.util.WeakHashMap#put(java.lang.Object, java.lang.Object) - */ + * @see java.util.WeakHashMap#put(java.lang.Object, java.lang.Object) + */ @Override public Object put(Key key, Object value) { // if (!(akey instanceof Key)) { // throw new IllegalArgumentException("key must be Key object"); // } // Key key = (Key)akey; - for (Iterator i=key.iterator();i.hasNext();) { + for (Iterator i = key.iterator(); i.hasNext();) { Object k = i.next(); Set<Key> list = keys.get(k); if (list == null) { @@ -194,8 +188,8 @@ @Override protected boolean removeEldestEntry(Map.Entry<Key, Object> eldest) { if (this.maxSize > 0 && size() > this.maxSize) { - Key key = (Key)eldest.getKey(); - for (Iterator i=key.iterator(); i.hasNext();) { + Key key = (Key) eldest.getKey(); + for (Iterator i = key.iterator(); i.hasNext();) { Object k = i.next(); Set<Key> list = keys.get(k); if (list != null) { @@ -205,15 +199,15 @@ } } } - + if (!containsKey(eldest.getKey())) { - log.warn("possible memory leak !!! removeEldestEntry ("+eldest.getKey().getClass()+")" + eldest.getKey() + " size " + size() + " maxSize" + maxSize) ; + log.warn("possible memory leak !!! removeEldestEntry (" + eldest.getKey().getClass() + ")" + eldest.getKey() + " size " + size() + " maxSize" + maxSize); } return true; } return false; } - + // /* (non-Javadoc) // * @see org.apache.commons.collections.map.LRUMap#removeLRU(org.apache.commons.collections.map.AbstractLinkedMap.LinkEntry) // */ @@ -232,7 +226,7 @@ // } // return true; // } - + } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ListenerSet.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ListenerSet.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ListenerSet.java 2008-08-04 19:25:34 UTC (rev 979) @@ -37,15 +37,15 @@ /** * <p>Cette classe permet de mettre en place facilement le support de listeners. * Elle ne permet d'ajouter qu'une seul fois le meme listener. Si elle est - * la derniere � avoir une r�f�rence sur le listener, le listener est supprim� + * la derniere à avoir une référence sur le listener, le listener est supprimé * de la liste des listeners.</p> - * <p>Si on souhaite avoir une v�rification sur le type de listener ajout� - * il faut utiliser le constructeur qui prend une classe en param�tre. Dans ce - * cas la m�thode {@link #addListener} v�rifie que l'object pass� est bien - * du type ou un enfant du type donn� en param�tre du constructeur - * <p>Il y a deux fa�on de pr�venir les listeners d'un event soit par le - * m�canisme inclu dans cette classe en utilisant la m�thode {@link #fire} soit - * en utilisant soit m�me l'Iterateur sur les listeners encore valide.</p> + * <p>Si on souhaite avoir une vérification sur le type de listener ajouté + * il faut utiliser le constructeur qui prend une classe en paramètre. Dans ce + * cas la méthode {@link #addListener} vérifie que l'object passé est bien + * du type ou un enfant du type donné en paramètre du constructeur + * <p>Il y a deux façon de prévenir les listeners d'un event soit par le + * mécanisme inclu dans cette classe en utilisant la méthode {@link #fire} soit + * en utilisant soit même l'Iterateur sur les listeners encore valide.</p> * <pre> * ListenerSet listeners = new ListenerSet(); * ... @@ -60,21 +60,22 @@ * l.monEvent(MonObjetEvent); * } * </pre> - * Cette deuxi�me fa�on de faire est plus s�r car elle n'utilise pas - * l'introspection et donc une v�rification est faite sur le nom de la m�thode - * � appeler � la compilation, mais elle est plus verbeuse � �crire. + * Cette deuxième façon de faire est plus sûr car elle n'utilise pas + * l'introspection et donc une vérification est faite sur le nom de la méthode + * à appeler à la compilation, mais elle est plus verbeuse à écrire. * - * @see org.codelutin.util.CategorisedListenerSet + * @see org.codelutin.util.CategorisedListenerSet */ public class ListenerSet<Listerner> implements Iterable<Listerner> { // ListenerSet - /** DOCUMENTME Description of the Field */ + /** DOCUMENTME Description of the Field DOCUMENTME Description of the Field DOCUMENTME Description of the Field */ // protected Class<T> listenerClass = null; /** DOCUMENTME Description of the Field */ - protected HashSet<Reference<Listerner>> listeners = new HashSet<Reference<Listerner>>(); + protected HashSet<Reference<Listerner>> listeners = new HashSet<Reference<Listerner>>(); /** DOCUMENTME Constructor for the ListenerSet object */ - public ListenerSet() { } + public ListenerSet() { + } // /** // * Constructeur permettant de passer une classe que devra s'attisfaire les @@ -89,21 +90,21 @@ public int size() { return listeners.size(); } - + /** * Ajoute un listener dans la liste des listeners. * - * @param l le listener � ajouter. Si l'objet pass� est null, rien n'est fait - * si l'objet n'est pas du type pass� en argument du constructeur - * une IllegalArgumentException est lev�e. + * @param l le listener à ajouter. Si l'objet passé est null, rien n'est fait + * si l'objet n'est pas du type passé en argument du constructeur + * une IllegalArgumentException est levée. */ public void add(Listerner l) { if (l == null) { return; } // if (listenerClass == null || listenerClass.isInstance(l)) { - TransparenteWeakReference<Listerner> ref = new TransparenteWeakReference<Listerner>(l); - listeners.add(ref); + TransparenteWeakReference<Listerner> ref = new TransparenteWeakReference<Listerner>(l); + listeners.add(ref); // } else { // throw new IllegalArgumentException("Listener object (" // + l.getClass().getName() + ") is not compatible with class: " @@ -114,12 +115,12 @@ /** * ajoute tous les listeners d'un ListenerSet * - * @param ls The feature to be added to the All attribute + * @param ls The feature to be added to the All attribute */ public void addAll(ListenerSet<Listerner> ls) { // if (listenerClass == null || (ls.listenerClass != null && // listenerClass.isAssignableFrom(ls.listenerClass))) { - listeners.addAll(ls.listeners); + listeners.addAll(ls.listeners); // } else { // throw new IllegalArgumentException("Listener object (" // + ls.listenerClass + ") is not compatible with : " @@ -128,34 +129,34 @@ } /** - * Appel la m�thode du listener en passant l'objet event en param�tre - * Cette m�thode echoue si la methode ou l'objet contenant la methode a + * Appel la méthode du listener en passant l'objet event en paramètre + * Cette méthode echoue si la methode ou l'objet contenant la methode a * appeler n'est pas public * - * @param event l'event a passer en parametre de la methode a appeler - * @param methodName DOCUMENTME Description of the Parameter - * @exception Exception DOCUMENTME Description of the Exception + * @param event l'event a passer en parametre de la methode a appeler + * @param methodName DOCUMENTME Description of the Parameter + * @throws Exception DOCUMENTME Description of the Exception */ public void fire(String methodName, Object event) throws Exception { - for (Iterator i = iterator(); i.hasNext(); ) { - Object o = i.next(); - Statement stm = new Statement(o, methodName, new Object[]{event}); + for (Iterator i = iterator(); i.hasNext();) { + Object o = i.next(); + Statement stm = new Statement(o, methodName, new Object[]{event}); stm.execute(); } } /** - * Appel la m�thode du listener sans argument - * Cette m�thode echoue si la methode ou l'objet contenant la methode a + * Appel la méthode du listener sans argument + * Cette méthode echoue si la methode ou l'objet contenant la methode a * appeler n'est pas public * - * @param methodName DOCUMENTME Description of the Parameter - * @exception Exception DOCUMENTME Description of the Exception + * @param methodName DOCUMENTME Description of the Parameter + * @throws Exception DOCUMENTME Description of the Exception */ public void fire(String methodName) throws Exception { - for (Iterator i = iterator(); i.hasNext(); ) { - Object o = i.next(); - Statement stm = new Statement(o, methodName, null); + for (Iterator i = iterator(); i.hasNext();) { + Object o = i.next(); + Statement stm = new Statement(o, methodName, null); stm.execute(); } } @@ -163,7 +164,7 @@ /** * DOCUMENTME Method * - * @return DOCUMENTME Description of the Return Value + * @return DOCUMENTME Description of the Return Value */ public Iterator<Listerner> iterator() { return new ReferenceIterator<Listerner>(listeners.iterator()); @@ -172,17 +173,17 @@ /** * DOCUMENTME Method * - * @param l DOCUMENTME Description of the Parameter + * @param l DOCUMENTME Description of the Parameter */ public void remove(Listerner l) { - TransparenteWeakReference<Listerner> ref = new TransparenteWeakReference<Listerner>(l); + TransparenteWeakReference<Listerner> ref = new TransparenteWeakReference<Listerner>(l); listeners.remove(ref); } /** * DOCUMENTME Method * - * @return DOCUMENTME Description of the Return Value + * @return DOCUMENTME Description of the Return Value */ public String toString() { return "" + listeners; @@ -191,14 +192,14 @@ /** Iterator qui supprime les references vides lors du parcours */ static class ReferenceIterator<T> implements Iterator<T> { /** DOCUMENTME Description of the Field */ - protected Iterator<Reference<T>> iter = null; + protected Iterator<Reference<T>> iter = null; /** DOCUMENTME Description of the Field */ - protected T nextObject = null; + protected T nextObject = null; /** * Un iterator contenant des References * - * @param iter DOCUMENTME Description of the Parameter + * @param iter DOCUMENTME Description of the Parameter */ public ReferenceIterator(Iterator<Reference<T>> iter) { this.iter = iter; @@ -208,8 +209,8 @@ /** DOCUMENTME Method */ protected void findNext() { while (iter.hasNext() && nextObject == null) { - Reference<T> ref = iter.next(); - T o = ref.get(); + Reference<T> ref = iter.next(); + T o = ref.get(); if (o != null) { nextObject = o; } else { @@ -221,7 +222,7 @@ /** * DOCUMENTME Method * - * @return DOCUMENTME Description of the Return Value + * @return DOCUMENTME Description of the Return Value */ public boolean hasNext() { return nextObject != null; @@ -230,10 +231,10 @@ /** * DOCUMENTME Method * - * @return DOCUMENTME Description of the Return Value + * @return DOCUMENTME Description of the Return Value */ public T next() { - T result = nextObject; + T result = nextObject; nextObject = null; findNext(); return result; Modified: trunk/lutinutil/src/main/java/org/codelutin/util/LocaleConverter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/LocaleConverter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/LocaleConverter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -34,7 +34,7 @@ * * @author chemit */ -@org.codelutin.i18n.I18nable + public class LocaleConverter implements Converter { private static final Pattern FULL_SCOPE_PATTERN = Pattern.compile("([a-zA-Z]{2})_([a-zA-Z]{2})"); Modified: trunk/lutinutil/src/main/java/org/codelutin/util/Log.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/Log.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/Log.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003 Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -20,7 +20,7 @@ /* * * Log.java * - * Created: 12 ao�t 2004 + * Created: 12 août 2004 * * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ @@ -31,58 +31,55 @@ package org.codelutin.util; +import java.util.EventListener; +import java.util.EventObject; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.EventListener; -import java.util.EventObject; /** -* Cette classe permet de mettre en place un monitoring d'application simplement. -* Le d�veloppeur a chaque fois qu'il le souhaite ajoute dans son code un -* Log.logUserInfo("...", "....") qui indique un message que l'utilisateur est -* suceptible de vouloir, par exemple le r�sultat de la sauvegarde d'un fichier. -* Ou bien si l'application effectue un traitement, il peut utiliser -* Log.logTask("...", "...", max, value) pour indiquer qu'un traitement est -* en cours. -* <p> -* Il suffit ensuite de creer un objet qui herite de {@link #LogListener}, puis -* de l'enregistrer sur certaine category d'event il recevra alors les -* evenements de l'utilisateur. -* <p> -* Une utilisation peut-�tre la bar de status qui afficherait le message. -* <p> -* exemple de code -* <pre> -* LogListener l = new StatusBar(); -* Log.addLogListener(l); -* ... -* ... -* ... -* Log.logTask("SAVE", "Sauvegarde en cours", -1, 0); -* ... // sauvegarde -* Log.logUserInfo("SAVE", "Sauvegarde r�ussie"); -* Log.logTask("SAVE", "Sauvegarde termin�e", 0, 0); -* </pre> -*/ + * Cette classe permet de mettre en place un monitoring d'application simplement. + * Le développeur a chaque fois qu'il le souhaite ajoute dans son code un + * Log.logUserInfo("...", "....") qui indique un message que l'utilisateur est + * suceptible de vouloir, par exemple le résultat de la sauvegarde d'un fichier. + * Ou bien si l'application effectue un traitement, il peut utiliser + * Log.logTask("...", "...", max, value) pour indiquer qu'un traitement est + * en cours. + * <p/> + * Il suffit ensuite de creer un objet qui herite de {@link #LogListener}, puis + * de l'enregistrer sur certaine category d'event il recevra alors les + * evenements de l'utilisateur. + * <p/> + * Une utilisation peut-être la bar de status qui afficherait le message. + * <p/> + * exemple de code + * <pre> + * LogListener l = new StatusBar(); + * Log.addLogListener(l); + * ... + * ... + * ... + * Log.logTask("SAVE", "Sauvegarde en cours", -1, 0); + * ... // sauvegarde + * Log.logUserInfo("SAVE", "Sauvegarde réussie"); + * Log.logTask("SAVE", "Sauvegarde terminée", 0, 0); + * </pre> + */ public class Log { // Log static private Log LOG_INSTANCE = new Log(); - /** - * L'interface que doivent respecter un listener - */ + /** L'interface que doivent respecter un listener */ static public interface LogListener extends EventListener { public void logMessage(LogEvent e); + public void logTask(LogEvent e); } - /** - * Les events envoyes aux listeners - */ + /** Les events envoyes aux listeners */ static public class LogEvent extends EventObject { /** */ private static final long serialVersionUID = 6597052732707368243L; - + protected String category; protected Level level; protected String message; @@ -90,195 +87,199 @@ protected int taskMax = 0; protected int taskValue = 0; - public LogEvent(Object source, String category, Level level, String message, Throwable exception){ - super(source==null?LOG_INSTANCE:source); + public LogEvent(Object source, String category, Level level, String message, Throwable exception) { + super(source == null ? LOG_INSTANCE : source); this.category = category; this.level = level; this.message = message; this.exception = exception; } - public LogEvent(Object source, String category, String message, int taskMax, int taskValue){ - super(source==null?LOG_INSTANCE:source); + + public LogEvent(Object source, String category, String message, int taskMax, int taskValue) { + super(source == null ? LOG_INSTANCE : source); this.category = category; this.message = message; this.taskMax = taskMax; this.taskValue = taskValue; } - public String getCategory(){ + + public String getCategory() { return category; } - /** - * Retourne une valeur que si l'event est un sendMessage, sinon null; - */ + + /** Retourne une valeur que si l'event est un sendMessage, sinon null; */ public Level getLevel() { return level; } + public String getMessage() { return message; } + /** - * L'exception envoy� dans le log, si le log ne contient pas d'exception - * alors null est retourne. - */ + * L'exception envoyé dans le log, si le log ne contient pas d'exception + * alors null est retourne. + */ public Throwable getException() { return exception; } + public int getTaskMax() { return taskMax; } + public int getTaskValue() { return taskValue; } } - /** - * Le Level pour les log utilisateur - */ + /** Le Level pour les log utilisateur */ static private class UserLevel extends Level { /** */ private static final long serialVersionUID = -9075227788352473733L; - public UserLevel(String name, int value){ + public UserLevel(String name, int value) { super(name, value); } } - /** - * Tous les listeners - */ + /** Tous les listeners */ static protected CategorisedListenerSet<LogListener> listeners = new CategorisedListenerSet<LogListener>(); - /** Level.INFO = 700 Level.FINE=500 **/ + /** Level.INFO = 700 Level.FINE=500 * */ public static final Level USER_INFO = new UserLevel("USERINFO", 600); - /** - * Ajoute un listener sur tous les logs envoye - */ - static public void addLogListener(LogListener l){ + /** Ajoute un listener sur tous les logs envoye */ + static public void addLogListener(LogListener l) { listeners.add(LOG_INSTANCE, l); } - /** - * enleve un listener sur tous les logs envoye - */ - static public void removeLogListener(LogListener l){ + + /** enleve un listener sur tous les logs envoye */ + static public void removeLogListener(LogListener l) { listeners.remove(LOG_INSTANCE, l); } - /** - * Ajoute un listener sur une certaine category de log - */ - static public void addLogListener(LogListener l, String category){ + + /** Ajoute un listener sur une certaine category de log */ + static public void addLogListener(LogListener l, String category) { listeners.add(category, l); } - /** - * enleve un listener sur une certaine category de log - */ - static public void removeLogListener(LogListener l, String category){ + + /** enleve un listener sur une certaine category de log */ + static public void removeLogListener(LogListener l, String category) { listeners.remove(category, l); } - static protected void fire(String category, Level level, String message, Throwable exception){ + static protected void fire(String category, Level level, String message, Throwable exception) { LogEvent e = new LogEvent(null, category, level, message, exception); - try{ - logDevFinest("org.codelutin.util.Log.fire", "Category: " + category + " listeners enregistr�s: " + listeners); + try { + logDevFinest("org.codelutin.util.Log.fire", "Category: " + category + " listeners enregistrés: " + listeners); listeners.fire(category, "logMessage", e); listeners.fire(LOG_INSTANCE, "logMessage", e); - }catch(Exception eee){ + } catch (Exception eee) { Logger.getLogger(Log.class.getName() + ".fire").log(Level.WARNING, "Error during send log event", eee); } } - static protected void fire(String category, String message, int max, int value){ + static protected void fire(String category, String message, int max, int value) { LogEvent e = new LogEvent(null, category, message, max, value); - try{ - log("org.codelutin.util.Log.fire", Level.FINEST, "Category: " + category + " listeners enregistr�s: " + listeners, null); + try { + log("org.codelutin.util.Log.fire", Level.FINEST, "Category: " + category + " listeners enregistrés: " + listeners, null); listeners.fire(category, "logTask", e); listeners.fire(LOG_INSTANCE, "logTask", e); - }catch(Exception eee){ + } catch (Exception eee) { Logger.getLogger(Log.class.getName() + ".fire").log(Level.WARNING, "Error during send log event", eee); } } /** - * Ajoute un message dans le USER_LEVEL. - * @param category la category du message, souvent un nom de module d'une - * application. - * @param message le message a envoyer - */ - static public void logUserInfo(String category, String message){ + * Ajoute un message dans le USER_LEVEL. + * + * @param category la category du message, souvent un nom de module d'une + * application. + * @param message le message a envoyer + */ + static public void logUserInfo(String category, String message) { logUserInfo(category, message, null); } - static public void logUserInfo(String category, String message, Throwable e){ + static public void logUserInfo(String category, String message, Throwable e) { log(category, USER_INFO, message, e); fire(category, USER_INFO, message, e); } /** - * Permet d'indiquer l'avancement d'une tache. Si l'on ne connait pas la - * longueur de la tache il suffit d'indiquer -1 dans max, pour indiquer - * une tache en cours dont on ne connait pas la fin. - * lorsque la tache est termine, il suffit d'appeler cette methode avec max - * valant 0. - * @param category la category de la tache - * @param message le message a afficher, le message peut-etre null - * @param max l'entier qui indique la fin de la tache. La tache commence a - * 0 et fini lorsque l'on arrive a max. Si max vaut -1 cela veut dire - * que la tache debute mais qu'on ne connait pas sa longueur - * @param current la valeur courante de la tache. - */ - static public void logTask(String category, String message, int max, int current){ - log(category, USER_INFO, "task: " + message + "["+current+"/"+max+"]", null); + * Permet d'indiquer l'avancement d'une tache. Si l'on ne connait pas la + * longueur de la tache il suffit d'indiquer -1 dans max, pour indiquer + * une tache en cours dont on ne connait pas la fin. + * lorsque la tache est termine, il suffit d'appeler cette methode avec max + * valant 0. + * + * @param category la category de la tache + * @param message le message a afficher, le message peut-etre null + * @param max l'entier qui indique la fin de la tache. La tache commence a + * 0 et fini lorsque l'on arrive a max. Si max vaut -1 cela veut dire + * que la tache debute mais qu'on ne connait pas sa longueur + * @param current la valeur courante de la tache. + */ + static public void logTask(String category, String message, int max, int current) { + log(category, USER_INFO, "task: " + message + "[" + current + "/" + max + "]", null); fire(category, message, max, current); } - static public void log(String category, Level level, String message, Throwable e){ - if(e == null){ + static public void log(String category, Level level, String message, Throwable e) { + if (e == null) { Logger.getLogger(category).log(level, message); - }else{ + } else { Logger.getLogger(category).log(level, message, e); } } - static public void logDevFinest(String category, String message){ + static public void logDevFinest(String category, String message) { logDevFinest(category, message, null); } - static public void logDevFinest(String category, String message, Throwable e){ + + static public void logDevFinest(String category, String message, Throwable e) { log(category, Level.FINEST, message, e); } - static public void logDevFiner(String category, String message){ + static public void logDevFiner(String category, String message) { logDevFiner(category, message, null); } - static public void logDevFiner(String category, String message, Throwable e){ + + static public void logDevFiner(String category, String message, Throwable e) { log(category, Level.FINER, message, e); } - static public void logDevFine(String category, String message){ + static public void logDevFine(String category, String message) { logDevFine(category, message, null); } - static public void logDevFine(String category, String message, Throwable e){ + + static public void logDevFine(String category, String message, Throwable e) { log(category, Level.FINE, message, e); } - static public void logDevInfo(String category, String message){ + static public void logDevInfo(String category, String message) { logDevInfo(category, message, null); } - static public void logDevInfo(String category, String message, Throwable e){ + + static public void logDevInfo(String category, String message, Throwable e) { log(category, Level.INFO, message, e); } - static public void logDevWarn(String category, String message){ + static public void logDevWarn(String category, String message) { logDevInfo(category, message, null); } - static public void logDevWarn(String category, String message, Throwable e){ + + static public void logDevWarn(String category, String message, Throwable e) { log(category, Level.WARNING, message, e); } - static public void logDevSevere(String category, String message){ + static public void logDevSevere(String category, String message) { logDevSevere(category, message, null); } - static public void logDevSevere(String category, String message, Throwable e){ + + static public void logDevSevere(String category, String message, Throwable e) { log(category, Level.SEVERE, message, e); } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/MonthEnum.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/MonthEnum.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/MonthEnum.java 2008-08-04 19:25:34 UTC (rev 979) @@ -25,7 +25,7 @@ * * @author chemit */ -@org.codelutin.i18n.I18nable + public enum MonthEnum { JANUARY(_("lutinutil.month.january")), FEBRUARY(_("lutinutil.month.february")), Modified: trunk/lutinutil/src/main/java/org/codelutin/util/RecursiveProperties.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/RecursiveProperties.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/RecursiveProperties.java 2008-08-04 19:25:34 UTC (rev 979) @@ -34,24 +34,23 @@ import java.util.Properties; /** - * Surcharge java.util.Properties de mani�re � aller chercher dans les - * properties la valeur de la propri�t� si celle ci est encadr�e par "${...}". - * - * Exemple : - * myFirstName=Arnaud - * myName=Thimel - * org.codelutin.topia.userInfo.fullName=${fullName} - * fullName=${myFirstName} ${myName} - * namePhrase=My name is ${myName}. - * instruction=Placez votre texte comme ceci : ${monTexte} - * + * Surcharge java.util.Properties de manière à aller chercher dans les + * properties la valeur de la propriété si celle ci est encadrée par "${...}". + * <p/> + * Exemple : + * myFirstName=Arnaud + * myName=Thimel + * org.codelutin.topia.userInfo.fullName=${fullName} + * fullName=${myFirstName} ${myName} + * namePhrase=My name is ${myName}. + * instruction=Placez votre texte comme ceci : ${monTexte} + * <p/> * Dans ce cas, - * getProperty("org.codelutin.topia.userInfo.fullName") renverra "Arnaud Thimel" - * getProperty("namePhrase") renverra "My name is Thimel." - * getProperty("instruction") renverra "Placez votre texte comme ceci : ${monTexte}" - * - * @author thimel + * getProperty("org.codelutin.topia.userInfo.fullName") renverra "Arnaud Thimel" + * getProperty("namePhrase") renverra "My name is Thimel." + * getProperty("instruction") renverra "Placez votre texte comme ceci : ${monTexte}" * + * @author thimel */ public class RecursiveProperties extends Properties { @@ -74,24 +73,24 @@ int pos = result.indexOf("${", 0); //Ex : pos=11 while (pos != -1) { - int posEnd = result.indexOf("}", pos +1); + int posEnd = result.indexOf("}", pos + 1); //Ex : posEnd=19 if (posEnd != -1) { - String value = getProperty(result.substring(pos + 2 , posEnd)); + String value = getProperty(result.substring(pos + 2, posEnd)); // Ex : getProperty("myName"); if (value != null) { // Ex : value="Thimel" - result = result.substring(0, pos) + value + result.substring(posEnd +1); + result = result.substring(0, pos) + value + result.substring(posEnd + 1); // Ex : result="My name is " + "Thimel" + "." pos = result.indexOf("${", pos + value.length()); // Ex : pos=-1 } else // Ex : value=null pos = result.indexOf("${", posEnd + 1); - // Ex : pos=-1 + // Ex : pos=-1 } } return result; } - + } //RecursiveProperties Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ReflectUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ReflectUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ReflectUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -24,16 +24,16 @@ import java.util.List; /** - * Des m�thodes utiles d'introspection + * Des méthodes utiles d'introspection * * @author tony */ public class ReflectUtil { /** - * Pour d�terminer si un champ d'une classe est une constante + * Pour déterminer si un champ d'une classe est une constante * (modifiers sont static, final et public) * - * @param field le champs � tester + * @param field le champs à tester * @return <code>true</code> si les modifiers sont final, static et public */ public static boolean isConstantField(Field field) { @@ -42,15 +42,15 @@ } /** - * Recherche dans une classe donn�e <code>klazz</code>, les constantes d'un + * Recherche dans une classe donnée <code>klazz</code>, les constantes d'un * certain type <code>searchingClass</code> et les retourne. - * + * <p/> * L'algorithme parcourt aussi les superclasses. * * @param klass la classe contenant les constantes - * @param searchingClass le type des champs constants � r�cup�rer + * @param searchingClass le type des champs constants à récupérer * @return la liste des champs du type requis dans - * @throws RuntimeException si probl�me lors de la r�cup�ration + * @throws RuntimeException si problème lors de la récupération */ @SuppressWarnings({"unchecked"}) public static <T> List<T> getConstants(Class<?> klass, Class<T> searchingClass) { @@ -68,15 +68,14 @@ } } Class<?> superClass = klass.getSuperclass(); - if (superClass!=null) { - result.addAll(getConstants(superClass,searchingClass)); + if (superClass != null) { + result.addAll(getConstants(superClass, searchingClass)); } return result; } /** - * - * @param klass the required class + * @param klass the required class * @param fieldName the required constant name * @return the constant value */ @@ -98,16 +97,17 @@ } /** - * Convertit une classe non typ�e, en une classe d'enum - * @param type la classe � type - * @return la classe typ�e + * Convertit une classe non typée, en une classe d'enum + * + * @param type la classe à type + * @return la classe typée * @throws IllegalArgumentException si le type est null ou non une extension - * de la classe Enum. + * de la classe Enum. */ @SuppressWarnings({"unchecked"}) protected static <T extends Enum<T>> Class<T> getEnumClass(Class<?> type) throws IllegalArgumentException { - if (type==null|| !type.isEnum()) { - throw new IllegalArgumentException(type+" should not be null, nor a non Enum "); + if (type == null || !type.isEnum()) { + throw new IllegalArgumentException(type + " should not be null, nor a non Enum "); } return (Class<T>) type; } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /**##%% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, Benjamin Poussin + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,6 +31,10 @@ package org.codelutin.util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.ImageIcon; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -49,16 +53,11 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import javax.swing.ImageIcon; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - /** * Cette class permet de rechercher un fichier en indiquant son nom avec son - * chemin. Cette librairie ira ensuite chercher ce fichier sur le syst�me de - * fichier, et s'il n'est pas trouv� dans le classpath. Le fichier peut donc - * �tre dans un fichier .jar ou .zip. + * chemin. Cette librairie ira ensuite chercher ce fichier sur le système de + * fichier, et s'il n'est pas trouvé dans le classpath. Le fichier peut donc + * être dans un fichier .jar ou .zip. */ public class Resource { // Resource @@ -72,7 +71,7 @@ /** * Permet d'ajouter dans le classloader par defaut une nouvelle URL dans * lequel il faut rechercher les fichiers. - * + * * @param url l'url a ajouter */ static public void addDefaultClassLoader(URL url) { @@ -80,7 +79,7 @@ ClassLoader classLoader = ClassLoader.getSystemClassLoader(); Method method = URLClassLoader.class.getDeclaredMethod("addURL", - new Class[] { URL.class }); + new Class[]{URL.class}); method.setAccessible(true); method.invoke(classLoader, url); } catch (Exception eee) { @@ -91,7 +90,7 @@ /** * Recherche la ressource nom. - * + * * @param name nom de la ressource * @return l'url de la ressource * @throws ResourceNotFoundException si la resource n'a pas ete trouvee @@ -103,12 +102,12 @@ } throw new ResourceNotFoundException("La resource " + name - + " n'a pas �t� trouv�e"); + + " n'a pas été trouvée"); } /** * Recherche la ressource nom. - * + * * @param name le nom de la ressource * @return l'url de la ressource ou null */ @@ -122,7 +121,7 @@ log .warn("Le fichier '" + file - + "' a �t� trouv�, mais il n'a pas pu etre converti en URL"); + + "' a été trouvé, mais il n'a pas pu etre converti en URL"); } } @@ -146,9 +145,9 @@ /** * Retourne l'icone demandee. - * + * * @param name le nom de l'icone - * @return Retourne l'icon demande ou null s'il n'est pas trouv� + * @return Retourne l'icon demande ou null s'il n'est pas trouvé */ static public ImageIcon getIcon(String name) { try { @@ -160,12 +159,12 @@ } /** - * Recherche et retourne l'objet properties de configuration � utiliser. - * - * Les diff�rents fichiers trouv� sont chain�. L'ordre de recherche est le + * Recherche et retourne l'objet properties de configuration à utiliser. + * <p/> + * Les différents fichiers trouvé sont chainé. L'ordre de recherche est le * classpath, le fichier dans /etc et enfin le chemin sur le filesystem. - * - * @param filename le nom du fichier � rechercher + * + * @param filename le nom du fichier à rechercher * @return l'objet Properties de configuration * @throws IOException si une erreur est survenue */ @@ -177,18 +176,18 @@ } /** - * Recherche et retourne l'objet properties de configuration � utiliser. - * - * Les diff�rents fichiers trouv� sont chain�. L'ordre de recherche est le + * Recherche et retourne l'objet properties de configuration à utiliser. + * <p/> + * Les différents fichiers trouvé sont chainé. L'ordre de recherche est le * classpath, le fichier dans /etc et enfin le chemin sur le filesystem. - * - * @param filename le nom du fichier � rechercher - * @param parent les proprietes parent a surcharger + * + * @param filename le nom du fichier à rechercher + * @param parent les proprietes parent a surcharger * @return l'objet Properties de configuration * @throws IOException si une erreur est survenue */ static public Properties getConfigProperties(String filename, - Properties parent) throws IOException { + Properties parent) throws IOException { Properties result; if (parent != null) { result = new Properties(parent); @@ -230,10 +229,10 @@ /** * Retourner la liste des fichiers du classLoader. Ces fichiers doivent * correspondre au pattern donne. - * - * @param pattern le nom du fichier a extraire du fichier compress� ou - * du repertoire doit correspondre au pattern (repertoire + nom - * compris). + * + * @param pattern le nom du fichier a extraire du fichier compressé ou + * du repertoire doit correspondre au pattern (repertoire + nom + * compris). * @return la liste des urls correspondant au pattern */ static public List<URL> getURLs(String pattern) { @@ -243,7 +242,7 @@ static protected URL[] getURLs(URLClassLoader classLoader) { Method m; try { - // Essai de r�cup�ration de la m�thode getAllURLs() de + // Essai de récupération de la méthode getAllURLs() de // RepositoryClassLoader (JBoss) m = classLoader.getClass().getMethod("getAllURLs"); } catch (Exception e) { @@ -265,11 +264,11 @@ /** * Retourner la liste des fichiers du classLoader. Ces fichiers doivent * correspondre au pattern donne. - * + * * @param classLoader le classLoader - * @param pattern le nom du fichier a extraire du fichier compress� ou - * du repertoire doit correspondre au pattern (repertoire + nom - * compris). + * @param pattern le nom du fichier a extraire du fichier compressé ou + * du repertoire doit correspondre au pattern (repertoire + nom + * compris). * @return la liste des urls correspondant au pattern */ static public List<URL> getURLs(String pattern, URLClassLoader classLoader) { @@ -283,11 +282,11 @@ /** * Retourner la liste des fichiers du classLoader. Ces fichiers doivent * correspondre au pattern donne. - * + * * @param arrayURL les urls ou chercher - * @param pattern le nom du fichier a extraire du fichier compress� ou - * durepertoire doit correspondre au pattern (repertoire + nom - * compris). + * @param pattern le nom du fichier a extraire du fichier compressé ou + * durepertoire doit correspondre au pattern (repertoire + nom + * compris). * @return la liste des urls correspondant au pattern */ static public List<URL> getURLs(String pattern, URL... arrayURL) { @@ -303,7 +302,7 @@ arrayURL = getClassPathURLsFromJarManifest(jarURL); } catch (Exception e) { log.warn(e); - arrayURL = new URL[] { jarURL }; + arrayURL = new URL[]{jarURL}; } } } @@ -422,19 +421,18 @@ return result; } catch (IOException eee) { throw new ResourceException( - "Erreur lors de la lecture du fichier compress�", eee); + "Erreur lors de la lecture du fichier compressé", eee); } } /** * Retourne la liste des fichiers correspondant au pattern donne, aucun - * ordre ne doit �tre suppos� sur les fichiers. - * + * ordre ne doit être supposé sur les fichiers. + * * @param repository repertoire dans lequel on recherche les fichiers - * @param pattern le nom du fichier a extraire du fichier du repertoire doit - * correspondre au pattern (repertoire + nom compris). si le - * pattern est null, tous les fichiers trouv� sont retourn�. - * + * @param pattern le nom du fichier a extraire du fichier du repertoire doit + * correspondre au pattern (repertoire + nom compris). si le + * pattern est null, tous les fichiers trouvé sont retourné. * @return la liste des urls correspondant au pattern */ static public List<URL> getURLsFromDirectory(File repository, String pattern) { @@ -480,13 +478,13 @@ return urlList; } catch (MalformedURLException eee) { throw new ResourceException( - "Le fichier n'a pu �tre converti en URL", eee); + "Le fichier n'a pu être converti en URL", eee); } } /** * Verifie si le fichier est un fichier jar. - * + * * @param name nom du fichier a tester * @return vrai si le fichier se termine par .jar faux sinon */ @@ -500,7 +498,7 @@ /** * Verifie si le fichier est un fichier zip - * + * * @param name nom du fichier a tester * @return vrai si le fichier se termine par .zip faux sinon */ @@ -514,7 +512,7 @@ /** * Verifie si la classe est de type primitif. - * + * * @param clazz nom de la classe a tester * @return vrai si le classe est de type primitif faux sinon */ @@ -527,13 +525,13 @@ } /** - * Retourne la classe du type primitf associ� avec la classe de de l'objet - * pass� en parametre. Par exemple si la classe pass�e en param�tre est + * Retourne la classe du type primitf associé avec la classe de de l'objet + * passé en parametre. Par exemple si la classe passée en paramètre est * Integer alors le resultat sera la classe de int. - * + * * @param clazz la classe dont on souhaite le type primitf - * @return le type primitif associ� a la classe en param�tre, ou null s'il - * n'y a pas de type primitif associ�. + * @return le type primitif associé a la classe en paramètre, ou null s'il + * n'y a pas de type primitif associé. */ static public Class getPrimitiveClass(Class clazz) { if (clazz == Boolean.class) Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ResourceException.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ResourceException.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ResourceException.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or Modified: trunk/lutinutil/src/main/java/org/codelutin/util/SortedProperties.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/SortedProperties.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/SortedProperties.java 2008-08-04 19:25:34 UTC (rev 979) @@ -26,7 +26,7 @@ import java.util.Vector; /** - * Permet d'avoir les fichiers de propri�t�s tri�s. + * Permet d'avoir les fichiers de propriétés triés. * * @author julien */ Modified: trunk/lutinutil/src/main/java/org/codelutin/util/StringUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/StringUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/StringUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -64,29 +64,29 @@ static public String unaccent(String s) { String result = ""; for (char c : s.toCharArray()) { - if ("����".indexOf(c) != -1) { + if ("éèêë".indexOf(c) != -1) { result += "e"; - } else if ("���".indexOf(c) != -1) { + } else if ("àäâ".indexOf(c) != -1) { result += "a"; - } else if ("�".indexOf(c) != -1) { + } else if ("ç".indexOf(c) != -1) { result += "c"; - } else if ("��".indexOf(c) != -1) { + } else if ("îï".indexOf(c) != -1) { result += "i"; - } else if ("��".indexOf(c) != -1) { + } else if ("ôö".indexOf(c) != -1) { result += "o"; - } else if ("���".indexOf(c) != -1) { + } else if ("ùûü".indexOf(c) != -1) { result += "u"; - } else if ("����".indexOf(c) != -1) { + } else if ("ÉÈÊË".indexOf(c) != -1) { result += "E"; - } else if ("���".indexOf(c) != -1) { + } else if ("ÀÂÄ".indexOf(c) != -1) { result += "A"; - } else if ("�".indexOf(c) != -1) { + } else if ("Ç".indexOf(c) != -1) { result += "C"; - } else if ("��".indexOf(c) != -1) { + } else if ("ÎÏ".indexOf(c) != -1) { result += "I"; - } else if ("��".indexOf(c) != -1) { + } else if ("ÔÖ".indexOf(c) != -1) { result += "O"; - } else if ("���".indexOf(c) != -1) { + } else if ("ÙÛÜ".indexOf(c) != -1) { result += "U"; } else if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || ('.' == c) || ('-' == c) @@ -147,7 +147,7 @@ } /** - * Concat�ne un tableau de chaine de caracteres en une seul chaine. + * Concatène un tableau de chaine de caracteres en une seul chaine. * * @param s le tableau de chaines * @param sep le separateur a utiliser pour separer chaque chaine. @@ -373,14 +373,14 @@ * @param s la couleur sous la forme de string, par exemple "red", * "yellow" ou bien en RGB "#FFAA99", et avec un canal alpha * "#FFAA3366" - * @return la couleur demand� si possible sinon null + * @return la couleur demandé si possible sinon null * @throws IllegalArgumentException * @throws StringUtilException if any problem while conversion */ public static Color toColor(String s) throws StringUtilException { try { if (s.startsWith("#")) { - // r�cuperation des valeurs hexa + // récuperation des valeurs hexa String hr = s.substring(1, 3); String hg = s.substring(3, 5); String hb = s.substring(5, 7); @@ -463,22 +463,22 @@ } /** - * V�rifie q'une chaine de caract�re est valid pour les bloc openner closer, ie. + * Vérifie q'une chaine de caractère est valid pour les bloc openner closer, ie. * <p/> - * que les blocs d�finit par les deux caract�res s'entrechevauchent pas. + * que les blocs définit par les deux caractères s'entrechevauchent pas. * <p/> * Exemple avec '(' ')' : * <p/> * (a(b)) est valide, par contre ((aaa))) n'est pas valide * * @param txt txte a verifier - * @param opener le caract�re ouvrant - * @param closer le caract�re fermant + * @param opener le caractère ouvrant + * @param closer le caractère fermant * @return <code>true</code> is la chaine est valide */ public static boolean checkEnclosure(String txt, final char opener, char closer) { if (txt.indexOf(opener) == -1 && txt.indexOf(closer) == -1) { - // ok pas de block d�tect�s + // ok pas de block détectés return true; } List<Integer> opens = new ArrayList<Integer>(); @@ -504,11 +504,11 @@ /** * Convertir un nom en une constante Java * <p/> - * Les seuls caract�res autoris�s sont les alpha num�riques, ains - * que l'underscore. tous les autres caract�res seront ignor�s. + * Les seuls caractères autorisés sont les alpha numériques, ains + * que l'underscore. tous les autres caractères seront ignorés. * - * @param name le nom � convertir - * @return la constante g�n�r�e + * @param name le nom à convertir + * @return la constante générée */ public static String convertToConstantName(String name) { StringBuilder sb = new StringBuilder(); Modified: trunk/lutinutil/src/main/java/org/codelutin/util/TransformedList.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/TransformedList.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/TransformedList.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +20,7 @@ /* * * TransformedList.java * - * Created: 2 ao�t 2005 02:12:42 CEST + * Created: 2 août 2005 02:12:42 CEST * * @author Benjamin POUSSIN <poussin@codelutin.com> * @version $Revision$ @@ -50,8 +50,8 @@ protected Transformer<E, Object> transformer = null; protected List<Object> inner = null; - public TransformedList(Transformer<E, Object> transformer){ - if(transformer == null){ + public TransformedList(Transformer<E, Object> transformer) { + if (transformer == null) { throw new IllegalArgumentException("Transformer must not be null"); } else { this.transformer = transformer; @@ -59,29 +59,29 @@ } } - public TransformedList(Transformer<E, Object> transformer, Collection<? extends E> c){ + public TransformedList(Transformer<E, Object> transformer, Collection<? extends E> c) { this(transformer); addAll(c); } - public int size(){ + public int size() { return inner.size(); } - public E get(int index){ + public E get(int index) { Object f = inner.get(index); E result = transformer.untransform(f); return result; } - public E set(int index, E element){ + public E set(int index, E element) { Object f = transformer.transform(element); f = inner.set(index, f); E result = transformer.untransform(f); return result; } - public void add(int index, E element){ + public void add(int index, E element) { Object f = transformer.transform(element); inner.add(index, f); } @@ -101,8 +101,8 @@ @SuppressWarnings("unchecked") private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); - transformer = (Transformer<E, Object>)in.readObject(); - inner = (List<Object>)in.readObject(); + transformer = (Transformer<E, Object>) in.readObject(); + inner = (List<Object>) in.readObject(); } } // TransformedList Modified: trunk/lutinutil/src/main/java/org/codelutin/util/Transformer.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/Transformer.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/Transformer.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +20,7 @@ /* * * Transformer.java * - * Created: 2 ao�t 2005 02:55:41 CEST + * Created: 2 août 2005 02:55:41 CEST * * @author Benjamin POUSSIN <poussin@codelutin.com> * @version $Revision$ @@ -33,12 +33,11 @@ import java.io.Serializable; -/** -* Permet de transformer un objet en un autre et inversement -*/ -public interface Transformer<E,F> extends Serializable { // Transformer +/** Permet de transformer un objet en un autre et inversement */ +public interface Transformer<E, F> extends Serializable { // Transformer public F transform(E e); + public E untransform(F f); } // Transformer Modified: trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteSoftReference.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteSoftReference.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteSoftReference.java 2008-08-04 19:25:34 UTC (rev 979) @@ -28,25 +28,26 @@ * par : $Author$ */ package org.codelutin.util; + import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; /** -* Cette classe etant SoftReference et surcharge les m�thodes equals et -* hashCode pour que ces m�thodes retournes les m�mes r�sultat que les objets -* contenu. -*/ + * Cette classe etant SoftReference et surcharge les méthodes equals et + * hashCode pour que ces méthodes retournes les mêmes résultat que les objets + * contenu. + */ public class TransparenteSoftReference<T> extends SoftReference<T> { protected int hash = 0; protected String toString = null; /** - *DOCUMENTME Constructor for the TransparenteSoftReference object - * - * @param o DOCUMENTME Description of the Parameter - */ + * DOCUMENTME Constructor for the TransparenteSoftReference object + * + * @param o DOCUMENTME Description of the Parameter + */ public TransparenteSoftReference(T o) { this(o, true); } @@ -66,10 +67,10 @@ } /** - * On conserve le hash pour que la Reference puisse encore se faire - * passer pour l'objet alors que celui-ci a disparu de la memoire - */ - protected void init(T o, boolean objectToStringUsed){ + * On conserve le hash pour que la Reference puisse encore se faire + * passer pour l'objet alors que celui-ci a disparu de la memoire + */ + protected void init(T o, boolean objectToStringUsed) { if (o == null) { hash = 0; } else { @@ -77,50 +78,50 @@ if (objectToStringUsed) { toString = o.toString(); } - if(toString == null) { + if (toString == null) { toString = o.getClass().getName() + '@' + Integer.toHexString(hash); } - if(toString.length() > 100) { + if (toString.length() > 100) { toString = toString.substring(0, 100) + "..."; } } } - /** - * DOCUMENTME Method - * - * @param o DOCUMENTME Description of the Parameter - * @return DOCUMENTME Description of the Return Value - */ - public boolean equals(Object o) { - if (o == this) { - return true; - } - // on travail avec un variable local pour ne pas etre oblig� de - // synchroniser la m�thode - Object local = get(); - if (o instanceof Reference) { - o = ((Reference)o).get(); - } + /** + * DOCUMENTME Method + * + * @param o DOCUMENTME Description of the Parameter + * @return DOCUMENTME Description of the Return Value + */ + public boolean equals(Object o) { + if (o == this) { + return true; + } + // on travail avec un variable local pour ne pas etre obligé de + // synchroniser la méthode + Object local = get(); + if (o instanceof Reference) { + o = ((Reference) o).get(); + } - boolean result = - (o == null && local == null) - || (o != null && o.equals(local)); - - return result; - } + boolean result = + (o == null && local == null) + || (o != null && o.equals(local)); - /** - * DOCUMENTME Method - * - * @return DOCUMENTME Description of the Return Value - */ - public int hashCode() { - return hash; - } + return result; + } - public String toString() { - return toString; - } + /** + * DOCUMENTME Method + * + * @return DOCUMENTME Description of the Return Value + */ + public int hashCode() { + return hash; + } + public String toString() { + return toString; + } + } Modified: trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteWeakReference.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteWeakReference.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/TransparenteWeakReference.java 2008-08-04 19:25:34 UTC (rev 979) @@ -28,15 +28,16 @@ * par : $Author$ */ package org.codelutin.util; + import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; /** -* Cette classe etant WeakReference et surcharge les m�thodes equals et -* hashCode pour que ces m�thodes retournes les m�mes r�sultat que les objets -* contenu. -*/ + * Cette classe etant WeakReference et surcharge les méthodes equals et + * hashCode pour que ces méthodes retournes les mêmes résultat que les objets + * contenu. + */ public class TransparenteWeakReference<T> extends WeakReference<T> { protected int hash = 0; @@ -52,9 +53,9 @@ } /** - * @param objectToStringUsed if true, this ref used toString method of - * encapsulated object otherwize used default Object toString - */ + * @param objectToStringUsed if true, this ref used toString method of + * encapsulated object otherwize used default Object toString + */ public TransparenteWeakReference(T o, boolean objectToStringUsed) { super(o); init(o, objectToStringUsed); @@ -66,10 +67,10 @@ } /** - * On conserve le hash pour que la Reference puisse encore se faire - * passer pour l'objet alors que celui-ci a disparu de la memoire - */ - protected void init(T o, boolean objectToStringUsed){ + * On conserve le hash pour que la Reference puisse encore se faire + * passer pour l'objet alors que celui-ci a disparu de la memoire + */ + protected void init(T o, boolean objectToStringUsed) { if (o == null) { hash = 0; } else { @@ -77,28 +78,26 @@ if (objectToStringUsed) { toString = o.toString(); } - if(toString == null) { + if (toString == null) { toString = o.getClass().getName() + '@' + Integer.toHexString(hash); } - if(toString.length() > 100) { + if (toString.length() > 100) { toString = toString.substring(0, 100) + "..."; } } } - /** - * Equals si meme reference memoire on les objets references sont egauxs - */ + /** Equals si meme reference memoire on les objets references sont egauxs */ public boolean equals(Object o) { if (o == this) { return true; } - // on travail avec un variable local pour ne pas etre oblig� de - // synchroniser la m�thode - Object local = get(); + // on travail avec un variable local pour ne pas etre obligé de + // synchroniser la méthode + Object local = get(); Object other = o; if (o instanceof Reference) { - other = ((Reference)o).get(); + other = ((Reference) o).get(); if (other == null) { // on fait l'egalite sur les hash car on a perdu les objets @@ -107,7 +106,7 @@ } return (other == null && local == null) || - (other != null && other.equals(local)); + (other != null && other.equals(local)); } public int hashCode() { Modified: trunk/lutinutil/src/main/java/org/codelutin/util/URIConverter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/URIConverter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/URIConverter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -32,7 +32,7 @@ * * @author chemit */ -@org.codelutin.i18n.I18nable + public class URIConverter implements Converter { /** to use log facility, just put in your code: log.info(\"...\"); */ Modified: trunk/lutinutil/src/main/java/org/codelutin/util/URLConverter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/URLConverter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/URLConverter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -32,7 +32,7 @@ * * @author chemit */ -@org.codelutin.i18n.I18nable + public class URLConverter implements Converter { /** to use log facility, just put in your code: log.info(\"...\"); */ Modified: trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberConverter.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberConverter.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberConverter.java 2008-08-04 19:25:34 UTC (rev 979) @@ -30,7 +30,7 @@ * @author chemit * @see VersionNumber */ -@org.codelutin.i18n.I18nable + public class VersionNumberConverter implements Converter { /** to use log facility, just put in your code: log.info(\"...\"); */ Modified: trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/VersionNumberUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -19,7 +19,7 @@ /* * * NumberVersionUtil.java * - * Created: 4 d�c. 2003 + * Created: 4 déc. 2003 * * @author Benjamin Poussin <poussin@codelutin.com> * Copyright Code Lutin @@ -33,37 +33,39 @@ public class VersionNumberUtil { // VersionNumberUtil - protected static String normalize(String version){ - if (version == null){ + protected static String normalize(String version) { + if (version == null) { version = "0"; } return version; } - public static boolean greaterThan(String v1, String v2){ - String [] v1s = normalize(v1).split("\\."); - String [] v2s = normalize(v2).split("\\."); + public static boolean greaterThan(String v1, String v2) { + String[] v1s = normalize(v1).split("\\."); + String[] v2s = normalize(v2).split("\\."); int minlen = Math.min(v1s.length, v2s.length); - for(int i=0; i<minlen; i++){ - if(!v1s[i].equals(v2s[i])) + for (int i = 0; i < minlen; i++) { + if (!v1s[i].equals(v2s[i])) return Integer.parseInt(v1s[i]) > Integer.parseInt(v2s[i]); } // si on est ici c que tout les nombres sont v1[i] = v2[i] return v1s.length > v2s.length; } + /** - * Regarde l'egalit� entre 2 numeros de version - * 1.2.0 et 1.2 ne sont pas egaux - */ - public static boolean equals(String v1, String v2){ + * Regarde l'egalité entre 2 numeros de version + * 1.2.0 et 1.2 ne sont pas egaux + */ + public static boolean equals(String v1, String v2) { return normalize(v1).equals(normalize(v2)); } - public static boolean smallerThan(String v1, String v2){ - String [] v1s = normalize(v1).split("\\."); - String [] v2s = normalize(v2).split("\\."); + + public static boolean smallerThan(String v1, String v2) { + String[] v1s = normalize(v1).split("\\."); + String[] v2s = normalize(v2).split("\\."); int minlen = Math.min(v1s.length, v2s.length); - for(int i=0; i<minlen; i++){ - if(!v1s[i].equals(v2s[i])) + for (int i = 0; i < minlen; i++) { + if (!v1s[i].equals(v2s[i])) return Integer.parseInt(v1s[i]) < Integer.parseInt(v2s[i]); } // si on est ici c que tout les nombres sont v1[i] = v2[i] @@ -71,22 +73,22 @@ } /** - * Incremente le numero de version, seul le dernier constituant est - * incremente: 1.2.3.4 -> 1.2.3.5; null -> 1; 0 -> 1 - */ - public static String inc(String v){ - if(v == null){ + * Incremente le numero de version, seul le dernier constituant est + * incremente: 1.2.3.4 -> 1.2.3.5; null -> 1; 0 -> 1 + */ + public static String inc(String v) { + if (v == null) { return "1"; - }else{ + } else { v = v.trim(); } String result = null; int i = v.lastIndexOf('.'); - if(i == -1){ + if (i == -1) { int n = Integer.parseInt(v) + 1; result = "" + n; - }else{ + } else { String num = v.substring(i + 1); int n = Integer.parseInt(num) + 1; result = v.substring(0, i + 1) + n; Modified: trunk/lutinutil/src/main/java/org/codelutin/util/ZipUtil.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/ZipUtil.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/java/org/codelutin/util/ZipUtil.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +20,7 @@ /* * * ZipUtil.java * - * Created: 24 ao�t 2006 10:13:35 + * Created: 24 août 2006 10:13:35 * * @author poussin * @version $Revision$ @@ -31,6 +31,8 @@ package org.codelutin.util; +import org.apache.commons.logging.LogFactory; + import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; @@ -41,36 +43,31 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Enumeration; +import java.util.List; import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; -import java.util.zip.ZipFile; -import org.apache.commons.logging.LogFactory; +/** @author poussin */ -/** - * @author poussin - * - */ - public class ZipUtil { - + /** to use log facility, just put in your code: log.info(\"...\"); */ static private org.apache.commons.logging.Log log = LogFactory.getLog(ZipUtil.class); - /** Taille du buffer pour les lectures/�critures */ + /** Taille du buffer pour les lectures/écritures */ private static final int BUFFER_SIZE = 8 * 1024; - /** le s�parateur de fichier en local */ + /** le séparateur de fichier en local */ private static final String LOCAL_SEP = File.separator; private static final String LOCAL_SEP_PATTERN = "\\".equals(LOCAL_SEP) ? LOCAL_SEP + LOCAL_SEP : LOCAL_SEP; - /** le s�parateur zip */ + /** le séparateur zip */ private static final String ZIP_SEP = "/"; private static final String ZIP_SEP_PATTERN = "/"; @@ -79,13 +76,13 @@ public boolean accept(File pathname) { return true; } - + }; /** * uncompress zipped file in targetDir - * - * @param file the zip source file + * + * @param file the zip source file * @param targetDir the destination direcotory * @return return last entry name * @throws IOException if any problem while uncompressing @@ -99,15 +96,15 @@ /** * uncompress zipped file in targetDir, and rename uncompressed file if * necessary. If renameFrom or renameTo is null no renaming is done - * <p> + * <p/> * file in zip use / to separate directory and not begin with / * each directory ended with / - * - * @param file the zip source file - * @param targetDir the destination directory + * + * @param file the zip source file + * @param targetDir the destination directory * @param renameFrom pattern to permit rename file before uncompress it - * @param renameTo new name for file if renameFrom is applicable to it - * you can use $1, $2, ... if you have '(' ')' in renameFrom + * @param renameTo new name for file if renameFrom is applicable to it + * you can use $1, $2, ... if you have '(' ')' in renameFrom * @return return last entry name * @throws IOException if any problem while uncompressing */ @@ -139,18 +136,18 @@ } } in.close(); - return result; + return result; } - /** + /** * Compress 'includes' files in zipFile. If file in includes is directory * only the directory is put in zipFile, not the file contained in directory - * - * @param zipFile the destination zip file - * @param root for all file in includes that is in this directory, then we - * remove this directory in zip entry name (aka -C for tar), can be null; + * + * @param zipFile the destination zip file + * @param root for all file in includes that is in this directory, then we + * remove this directory in zip entry name (aka -C for tar), can be null; * @param includes the files to include in zip - * @throws java.io.IOException if any problem while compressing + * @throws java.io.IOException if any problem while compressing */ static public void compressFiles(File zipFile, File root, Collection<File> includes) throws IOException { FileOutputStream oStream = new FileOutputStream(zipFile); @@ -159,12 +156,12 @@ for (File file : includes) { String entryName = toZipEntryName(root, file); - - // Cr�ation d'une nouvelle entr�e dans le zip + + // Création d'une nouvelle entrée dans le zip ZipEntry entry = new ZipEntry(entryName); entry.setTime(file.lastModified()); zipOStream.putNextEntry(entry); - + if (file.isFile() && file.canRead()) { byte[] readBuffer = new byte[BUFFER_SIZE]; int bytesIn; @@ -182,17 +179,17 @@ oStream.close(); } } - + /** * if fileOrDirectory is directory Compress recursively all file in this * directory, else if is just file compress one file. - * - * Entry result name in zip start at fileOrDirectory. + * <p/> + * Entry result name in zip start at fileOrDirectory. * example: if we compress /etc/apache, entry will be apache/http.conf, ... - * - * @param zipFile the source zip file + * + * @param zipFile the source zip file * @param fileOrDirectory the file or directory to compress - * @param filter used to accept file, if null, all file is accepted + * @param filter used to accept file, if null, all file is accepted * @throws IOException if any problem while compressing */ static public void compress(File zipFile, File fileOrDirectory, FileFilter filter) throws IOException { @@ -202,10 +199,10 @@ List<File> files = new ArrayList<File>(); if (fileOrDirectory.isDirectory()) { files = FileUtil.getFilteredElements(fileOrDirectory, filter, true); - } else if (filter.accept(fileOrDirectory)){ + } else if (filter.accept(fileOrDirectory)) { files.add(fileOrDirectory); } - + compressFiles(zipFile, fileOrDirectory.getParentFile(), files); } @@ -214,7 +211,7 @@ * <li> Converti les '\' en '/' car les zip entry utilise des '/' * <li> ajoute un '/' a la fin pour les repertoires * <li> supprime le premier '/' si la chaine commence par un '/' - * + * * @param root the root directory * @param file the file to treate * @return the zip entry name corresponding to the given <code>file</code> @@ -229,7 +226,7 @@ result = result.substring(rootPath.length()); } } - + result = result.replace('\\', '/'); if (file.isDirectory()) { result += '/'; @@ -261,19 +258,19 @@ * (only use if <code>targetDir</code> is not * <code>null</code>) * @param excludeFilter used to exclude some files - * @param renameFrom {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} - * @param renameTo {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} + * @param renameFrom {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} + * @param renameTo {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} * @throws IOException if any exception while dealing with zipfile */ public static void scan(File zipFile, File targetDir, List<String> newFiles, - List<String> existingFiles, FileFilter excludeFilter,String renameFrom, String renameTo) + List<String> existingFiles, FileFilter excludeFilter, String renameFrom, String renameTo) throws IOException { ZipFile zip = null; try { zip = new ZipFile(zipFile); boolean findExisting = targetDir != null && targetDir.exists(); boolean filter = findExisting && excludeFilter != null; - boolean rename = renameFrom!=null && renameTo!=null; + boolean rename = renameFrom != null && renameTo != null; Enumeration<? extends ZipEntry> entries = zip.entries(); while (entries.hasMoreElements()) { String entryName = entries.nextElement().getName(); @@ -303,7 +300,7 @@ List<String> newFiles = new ArrayList<String>(); // obtain list of relative paths (to add or overwrite) - scan(source, root, newFiles, overwrittenFiles,excludeFilter,null,null); + scan(source, root, newFiles, overwrittenFiles, excludeFilter, null, null); return new List[]{newFiles, overwrittenFiles}; } @@ -316,22 +313,22 @@ * files to uncompress. * Otherwise just delegate to {@link ZipUtil#uncompress(File,File)}. * - * @param file location of zip file - * @param targetDir destination directory - * @param toTreate list of relative local path of entries to treate + * @param file location of zip file + * @param targetDir destination directory + * @param toTreate list of relative local path of entries to treate * @param renameFrom {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} - * @param renameTo {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} + * @param renameTo {@link #uncompressAndRename(java.io.File, java.io.File, String, String)} * @return return last entry name * @throws IOException if nay exception while operation */ - public static String uncompress(File file, File targetDir,List<String> toTreate,String renameFrom, String renameTo) throws IOException { + public static String uncompress(File file, File targetDir, List<String> toTreate, String renameFrom, String renameTo) throws IOException { String result = ""; ZipInputStream in = new ZipInputStream(new FileInputStream(file)); ZipEntry entry; if (toTreate == null || toTreate.isEmpty()) - return ZipUtil.uncompressAndRename(file, targetDir,renameFrom,renameTo); + return ZipUtil.uncompressAndRename(file, targetDir, renameFrom, renameTo); - boolean rename = renameFrom!=null && renameTo!=null; + boolean rename = renameFrom != null && renameTo != null; while ((entry = in.getNextEntry()) != null) { String name = entry.getName(); Modified: trunk/lutinutil/src/main/resources/i18n/lutinutil-en_GB.properties =================================================================== --- trunk/lutinutil/src/main/resources/i18n/lutinutil-en_GB.properties 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/resources/i18n/lutinutil-en_GB.properties 2008-08-04 19:25:34 UTC (rev 979) @@ -1,3 +1,5 @@ +Can't\ save\ config\ in\ file\ %s= +Invoke\ %s\ with\ %s= hello\ you\ \!=hello you \! lutin.error.convertor.noValue=No value specified for converter {0} lutin.error.no.convertor=no convertor found for type {1} and objet ''{0}'' Modified: trunk/lutinutil/src/main/resources/i18n/lutinutil-fr_FR.properties =================================================================== --- trunk/lutinutil/src/main/resources/i18n/lutinutil-fr_FR.properties 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/main/resources/i18n/lutinutil-fr_FR.properties 2008-08-04 19:25:34 UTC (rev 979) @@ -1,3 +1,5 @@ +Can't\ save\ config\ in\ file\ %s= +Invoke\ %s\ with\ %s= hello\ you\ \!=Salut toi\! lutin.error.convertor.noValue=Aucune valeur \u00E0 convertir pour le convertisseur {0} lutin.error.no.convertor=Aucun convertisseur trouv\u00E9 pour le type {1} et l''objet ''{0}'' Modified: trunk/lutinutil/src/test/java/org/codelutin/i18n/I18nLoaderTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/i18n/I18nLoaderTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/i18n/I18nLoaderTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -14,6 +14,7 @@ */ public class I18nLoaderTest extends TestCase { + String encoding; Locale locale; Language language; @@ -44,7 +45,7 @@ loader = I18n.getLoader(I18n.DEFAULT_ENCODING); bundleManager = I18n.getBundleManager(); assertNotNull(loader); - assertEquals(I18n.DEFAULT_ENCODING, loader.getEncoding()); + assertEquals(I18n.DEFAULT_ENCODING, loader.getEncoding()); assertEquals(bundleManager.getDefaultLocale(), I18n.DEFAULT_LOCALE); assertNull(loader.getLanguage()); } Modified: trunk/lutinutil/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -3,6 +3,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.commons.logging.LogFactory; import org.codelutin.i18n.I18n; import java.io.File; @@ -39,6 +40,11 @@ */ public class I18nBundleManagerTest extends TestCase { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private org.apache.commons.logging.Log log = LogFactory.getLog(I18nBundleManagerTest.class); + + Locale locale; static URLClassLoader loader; @@ -168,7 +174,22 @@ public void setUp() throws Exception { super.setUp(); if (loader == null) { - loader = (URLClassLoader) I18n.class.getClassLoader(); + loader = (URLClassLoader) I18nBundleManagerTest.class.getClassLoader(); + + URL[] urls = new URL[loader.getURLs().length + 2]; + urls[0] = new File("target" + File.separator + "test-classes" + File.separator + "i18n").toURI().toURL(); + urls[1] = new File("target" + File.separator + "classes" + File.separator + "i18n").toURI().toURL(); + + int i = 2; + for (URL url : loader.getURLs()) { + urls[i++] = url; + } + loader = new URLClassLoader(urls, loader); + + log.info("use loader " + loader + " (nb urls : " + loader.getURLs().length + ")"); + for (URL url : loader.getURLs()) { + log.info("url found in classloader : " + url); + } } } @@ -246,7 +267,7 @@ bundleManager = I18n.getBundleManager(); assertEquals(nbGene + nbLang + nbFull, bundleManager.getBundles(locale).length); //TODO make eact match with promute logic ! - assertTrue(nbEntries<= bundleManager.getBundleEntries(locale).length); + assertTrue(nbEntries <= bundleManager.getBundleEntries(locale).length); } public static Test suite() { Modified: trunk/lutinutil/src/test/java/org/codelutin/log/LutinLogTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/log/LutinLogTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/log/LutinLogTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,65 +31,72 @@ package org.codelutin.log; +import junit.framework.TestCase; +import org.apache.log4j.Layout; + import java.io.PrintWriter; import java.io.StringWriter; -import org.apache.log4j.Layout; -import junit.framework.TestCase; +/** @author poussin */ +class Toto { -/** - * @author poussin - * - */ - -class Toto { - static public void stack() throws Exception { LutinLog log = LutinLogFactory.getLutinLog(LutinLogTest.class); log.info("Titi called"); Throwable t = new Throwable(); String fqnOfCallingClass = LutinLogTest.class.getName(); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - -/* 99*/ if(t == null) -/* 100*/ return; - String s; -/* 104*/ synchronized(sw) - { -/* 105*/ t.printStackTrace(pw); -/* 106*/ s = sw.toString(); -/* 107*/ sw.getBuffer().setLength(0); - } - System.err.println(s); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); -/* 119*/ int ibegin = s.lastIndexOf(fqnOfCallingClass); -/* 120*/ if(ibegin == -1) -/* 121*/ return; -/* 124*/ ibegin = s.indexOf(Layout.LINE_SEP, ibegin); -/* 125*/ if(ibegin == -1) -/* 126*/ return; -/* 127*/ ibegin += Layout.LINE_SEP_LEN; -/* 130*/ int iend = s.indexOf(Layout.LINE_SEP, ibegin); -/* 131*/ if(iend == -1) -/* 132*/ return; - String fullInfo = s.substring(ibegin, iend); - System.out.println(fullInfo); +/* 99*/ + if (t == null) +/* 100*/ return; + String s; +/* 104*/ + synchronized (sw) { +/* 105*/ + t.printStackTrace(pw); +/* 106*/ + s = sw.toString(); +/* 107*/ + sw.getBuffer().setLength(0); + } + + System.err.println(s); + +/* 119*/ + int ibegin = s.lastIndexOf(fqnOfCallingClass); +/* 120*/ + if (ibegin == -1) +/* 121*/ return; +/* 124*/ + ibegin = s.indexOf(Layout.LINE_SEP, ibegin); +/* 125*/ + if (ibegin == -1) +/* 126*/ return; +/* 127*/ + ibegin += Layout.LINE_SEP_LEN; +/* 130*/ + int iend = s.indexOf(Layout.LINE_SEP, ibegin); +/* 131*/ + if (iend == -1) +/* 132*/ return; + String fullInfo = s.substring(ibegin, iend); + System.out.println(fullInfo); } } public class LutinLogTest extends TestCase { - - public void testStack() throws Exception { + + public void testStack() throws Exception { Toto.stack(); - } - + } + public void testMonitor() throws Exception { LutinLog log = LutinLogFactory.getLutinLog(LutinLogTest.class); @@ -103,7 +110,7 @@ log.setMax(100); log.start(); - for (int i=1; i<=100; i++) { + for (int i = 1; i <= 100; i++) { if (log.isAskStopTask()) { break; } @@ -114,7 +121,7 @@ log.user("task finished"); log.end(); } - + public void testTimeout() throws Exception { LutinLog log = LutinLogFactory.getLutinLog(LutinLogTest.class); @@ -129,7 +136,7 @@ log.setMax(100); log.start(); - for (int i=1; i<=100; i++) { + for (int i = 1; i <= 100; i++) { if (log.isAskStopTask()) { break; } @@ -140,7 +147,7 @@ log.user("task finished"); log.end(); } - + } Modified: trunk/lutinutil/src/test/java/org/codelutin/util/CallAnalyseTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/CallAnalyseTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/CallAnalyseTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +20,7 @@ /* * * CallAnalyseTest.java * - * Created: 25 ao�t 2005 21:03:50 CEST + * Created: 25 août 2005 21:03:50 CEST * * @author Benjamin POUSSIN <poussin@codelutin.com> * @version $Revision$ @@ -31,12 +31,13 @@ package org.codelutin.util; -import java.util.ArrayList; -import java.util.List; import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.ArrayList; +import java.util.List; + public class CallAnalyseTest extends TestCase { // CallAnalyseTest /** to use log facility, just put in your code: log.info(\"...\"); */ @@ -46,7 +47,7 @@ public void testCall() throws Exception { CallAnalyse.activate(); - for(int i=0; i<10; i++){ + for (int i = 0; i < 10; i++) { eatMemory(); freeMemory(); } @@ -57,24 +58,24 @@ log.debug(CallAnalyse.getThreadStatistics()); } - protected void eatMemory(){ + protected void eatMemory() { CallAnalyse.enter("eatMemory"); - try{ - for(int i=0; i<100; i++){ + try { + for (int i = 0; i < 100; i++) { memoryConsume.add(new ArrayList(100)); } - }catch(Exception eee){ + } catch (Exception eee) { // do nothing } finally { CallAnalyse.exit("eatMemory"); } } - protected void freeMemory(){ + protected void freeMemory() { CallAnalyse.enter("freeMemory"); - try{ + try { memoryConsume.clear(); - }catch(Exception eee){ + } catch (Exception eee) { // do nothing } finally { CallAnalyse.exit("freeMemory"); Modified: trunk/lutinutil/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* - * *##% Copyright (C) 2006 Code Lutin, C�dric Pineau, Benjamin Poussin + * *##% Copyright (C) 2006 Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software @@ -18,13 +18,13 @@ /******************************************************************************* * CategorisedListenerSetTest.java - * + * * Created: 3 janv. 2006 23:27:42 - * + * * @author poussin - * + * * @version $Revision$ - * + * * Last update: $Date$ by : $Author$ */ @@ -32,10 +32,7 @@ import junit.framework.TestCase; -/** - * @author poussin - * - */ +/** @author poussin */ public class CategorisedListenerSetTest extends TestCase { @@ -48,8 +45,8 @@ { CategorisedListenerSet<Object> cls = new CategorisedListenerSet<Object>(); - String[] ls = new String[] { "Double", "Long", "Number", "Object", - "LoggingException", "Throwable" }; + String[] ls = new String[]{"Double", "Long", "Number", "Object", + "LoggingException", "Throwable"}; cls.add(Double.class, ls[0]); cls.add(Long.class, ls[1]); @@ -78,14 +75,14 @@ { CategorisedListenerSet<Object> cls = new CategorisedListenerSet<Object>(null, false); - String[] ls = new String[] { "Double", "Long", "Number", "Object", - "LoggingException", "Throwable" }; + String[] ls = new String[]{"Double", "Long", "Number", "Object", + "LoggingException", "Throwable"}; cls.add(Double.class, ls[0]); cls.add(Long.class, ls[1]); cls.add(Number.class, ls[2]); cls.add(Object.class, ls[3]); - + assertEquals(1, cls.getAllListeners(Double.class).size()); assertEquals(1, cls.getAllListeners(Long.class).size()); assertEquals(1, cls.getAllListeners(Number.class).size()); Modified: trunk/lutinutil/src/test/java/org/codelutin/util/ConverterUtilTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/ConverterUtilTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/ConverterUtilTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,17 +1,13 @@ package org.codelutin.util; -import junit.framework.Test; -import junit.framework.TestSuite; import junit.framework.TestCase; -import java.util.Arrays; - /** * ConverterUtil Tester. * * @author chemit - * @since <pre>02/13/2008</pre> * @version 1.0 + * @since <pre>02/13/2008</pre> */ public class ConverterUtilTest extends TestCase { @@ -33,7 +29,7 @@ s = "]{}{}{{[#{[{#[#]{][{^#][^]#{^[]{#][#]{]@[{#][^#{][^]#{teAZEst"; assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray()))); - s = "�����]{}{}{{[#{[{#[#]{][{^#][^]#{^[]{#][#]{]@[{#][^#{][^]#{teAZEst"; + s = "ééééé]{}{}{{[#{[{#[#]{][{^#][^]#{^[]{#][#]{]@[{#][^#{][^]#{teAZEst"; assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray()))); } Modified: trunk/lutinutil/src/test/java/org/codelutin/util/FileUtilTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/FileUtilTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/FileUtilTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003, 2004 Code Lutin, Cédric Pineau, * Benjamin Poussin * * This program is free software; you can redistribute it and/or Modified: trunk/lutinutil/src/test/java/org/codelutin/util/HashMapMultiKeyTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/HashMapMultiKeyTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/HashMapMultiKeyTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2005 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,16 +31,14 @@ package org.codelutin.util; +import junit.framework.TestCase; +import org.apache.commons.collections.map.LRUMap; + +import javax.swing.JLabel; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Set; -import javax.swing.JLabel; - -import junit.framework.TestCase; - -import org.apache.commons.collections.map.LRUMap; - public class HashMapMultiKeyTest extends TestCase { // HashMapMultiKeyTest public void testPutGet() throws Exception { @@ -59,7 +57,7 @@ Object valeur = map.remove("toto"); assertEquals(ArrayList.class, valeur.getClass()); - assertEquals(2, ((ArrayList)valeur).size()); + assertEquals(2, ((ArrayList) valeur).size()); assertEquals(1, map.size()); valeur = map.remove(new HashMapMultiKey.Key().add("tata").add("titi").add("tutu")); @@ -107,8 +105,8 @@ map.put(new HashMapMultiKey.Key().add("toto").add("titi").add("tutu"), valeur); Object val = map.get(new HashMapMultiKey.Key().add("toto").add("titi").add("tutu")); assertEquals(valeur, val); - val=null; - valeur=null; + val = null; + valeur = null; System.gc(); Thread.yield(); valeur = map.get(new HashMapMultiKey.Key().add("toto").add("titi").add("tutu")); @@ -129,10 +127,10 @@ Thread.yield(); System.out.println("%%%%%%%%%% size: " + map.size()); - + valeur = map.remove("toto"); assertEquals(ArrayList.class, valeur.getClass()); - assertEquals(1, ((ArrayList)valeur).size()); + assertEquals(1, ((ArrayList) valeur).size()); assertEquals(0, map.size()); valeur = map.remove(new HashMapMultiKey.Key().add("tata").add("titi").add("tutu")); @@ -200,13 +198,13 @@ } public void testGarbage() throws Exception { - int ITER=100; - int MAX=5; + int ITER = 100; + int MAX = 5; LRUMap cache = new LRUMap(MAX); HashMapMultiKey map = new HashMapMultiKey(HashMapMultiKey.WEAK, HashMapMultiKey.WEAK); int i = 0; - while(i++ < ITER) { + while (i++ < ITER) { Object key = new HashMapMultiKey.Key().add("toto " + i); Object val = "titi" + i; @@ -222,7 +220,7 @@ assertEquals(v1, v2); assertTrue(cache.size() <= MAX); - assertTrue("Erreur iter "+i+" map.size(" + map.size() +")>"+ MAX, map.size() <= MAX); + assertTrue("Erreur iter " + i + " map.size(" + map.size() + ")>" + MAX, map.size() <= MAX); } } @@ -233,7 +231,7 @@ Object key = new HashMapMultiKey.Key().add("toto").add("titi").add("tutu"); // doit rester map.put(key, valeur); - + // doit etre retire map.put(new HashMapMultiKey.Key().add("tata").add("titi").add("tutu"), new JLabel("v2")); map.put(new HashMapMultiKey.Key().add("toto").add("titi").add("tyty"), new JLabel("v3")); @@ -242,7 +240,7 @@ System.gc(); Thread.yield(); - + System.out.println("%%%%%%%%%% size: " + map.size()); assertEquals(1, map.size()); } Modified: trunk/lutinutil/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,16 +31,13 @@ package org.codelutin.util; -import java.util.List; - import junit.framework.TestCase; +import java.util.List; -/** - * @author poussin - * - */ +/** @author poussin */ + public class LRUMapMultiKeyTest extends TestCase { @@ -48,7 +45,7 @@ * Test method for 'org.codelutin.util.LRUMapMultiKey.clear()' */ public void testClear() { -System.out.println("testClear"); + System.out.println("testClear"); LRUMapMultiKey map = new LRUMapMultiKey(10); LRUMapMultiKey.Key key1 = map.createKey("testClear", "toto", "tyty", "tutu"); LRUMapMultiKey.Key key2 = map.createKey("toto", "titi", "tutu"); @@ -59,7 +56,7 @@ map.put(key3, "value"); map.clear(); - + assertEquals(0, map.size()); assertEquals(0, map.keys.size()); } @@ -68,21 +65,21 @@ * Test method for 'java.util.WeakHashMap.get(Object)' */ public void testGet() throws Exception { -System.out.println("testGet"); + System.out.println("testGet"); LRUMapMultiKey map = new LRUMapMultiKey(1); - - LRUMapMultiKey.Key key1 = map.createKey("toto", "titi", "tutu"); + + LRUMapMultiKey.Key key1 = map.createKey("toto", "titi", "tutu"); map.put(key1, "value1"); - + assertEquals("value1", map.get(map.createKey("toto", "titi", "tutu"))); - - + + LRUMapMultiKey.Key key2 = map.createKey("tyty"); map.put(key2, "value2"); assertEquals(null, map.get(key1)); assertEquals("value2", map.get(key2)); - + assertEquals(1, map.size()); assertEquals(1, map.keys.size()); } @@ -91,7 +88,7 @@ * Test method for 'java.util.WeakHashMap.remove(Object)' */ public void testRemoveObject() { -System.out.println("testRemoveObject"); + System.out.println("testRemoveObject"); LRUMapMultiKey map = new LRUMapMultiKey(10); LRUMapMultiKey.Key key1 = map.createKey("testRemoveObject", "toto", "tyty", "tutu"); LRUMapMultiKey.Key key2 = map.createKey("toto", "titi", "tutu"); @@ -100,15 +97,15 @@ map.put(key1, "value"); map.put(key2, "value"); map.put(key3, "value"); - + Object l = map.remove("titi"); - + assertTrue(l instanceof List); - assertEquals(2, ((List)l).size()); + assertEquals(2, ((List) l).size()); assertEquals(1, map.size()); - + map.remove(key1); - + assertEquals(0, map.size()); } Modified: trunk/lutinutil/src/test/java/org/codelutin/util/ListenerSetTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/ListenerSetTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/ListenerSetTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -37,21 +37,23 @@ int callCount; - /** si la class n'est pas public fire ne retrouve pas les m�thodes :( */ + /** si la class n'est pas public fire ne retrouve pas les méthodes :( */ public class Listener { - public void event1(){ + public void event1() { callCount++; } - public void event2(Object o){ + + public void event2(Object o) { callCount++; } } class PrivateListener { - public void event1(){ + public void event1() { callCount++; } - public void event2(Object o){ + + public void event2(Object o) { callCount++; } } @@ -128,7 +130,7 @@ assertEquals(1, callCount); } ////////////////////////////////////////////////: - // avec le listener priv� + // avec le listener privé // { ListenerSet<Object> set = new ListenerSet<Object>(); Modified: trunk/lutinutil/src/test/java/org/codelutin/util/LogTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/LogTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/LogTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003 Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -20,7 +20,7 @@ /* * * LogTest.java * - * Created: 12 ao�t 2004 + * Created: 12 août 2004 * * @author Benjamin Poussin <poussin@codelutin.com> * @version $Revision$ @@ -42,14 +42,17 @@ public class LogListenerTest implements Log.LogListener { boolean all = false; - public LogListenerTest(boolean all){ + + public LogListenerTest(boolean all) { this.all = all; } - public void logMessage(Log.LogEvent e){ - if(all) callAll++; - else callTest++; + + public void logMessage(Log.LogEvent e) { + if (all) callAll++; + else callTest++; } - public void logTask(Log.LogEvent e){ + + public void logTask(Log.LogEvent e) { taskMax = e.getTaskMax(); taskValue = e.getTaskValue(); } Modified: trunk/lutinutil/src/test/java/org/codelutin/util/StringUtilTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/StringUtilTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/StringUtilTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002, 2003 Code Lutin, C�dric Pineau, + * Copyright (C) 2002, 2003 Code Lutin, C�dric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or @@ -139,7 +139,7 @@ public void testUnaccent() throws Exception { assertEquals("-aaaeeeeiioouuuc0123456789AAAEEEEIIOOUUUC._", - StringUtil.unaccent("-��������������� 0123456789 ���������������._")); + StringUtil.unaccent("-àâäéèêëîïôöùûüç 0123456789 ÀÂÄÉÈÊËÎÏÔÖÙÛÜÇ._")); } public void testConvertToConstantName() throws Exception { Modified: trunk/lutinutil/src/test/java/org/codelutin/util/TransparenteReferenceTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/TransparenteReferenceTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/TransparenteReferenceTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,39 +31,36 @@ package org.codelutin.util; +import junit.framework.TestCase; + import java.util.HashMap; import java.util.Map; -import junit.framework.TestCase; +/** @author poussin */ -/** - * @author poussin - * - */ - public class TransparenteReferenceTest extends TestCase { public void testHash() { Map<TransparenteSoftReference, TransparenteSoftReference> map = new HashMap<TransparenteSoftReference, TransparenteSoftReference>(); - + String key = "key"; TransparenteSoftReference keyRef = new TransparenteSoftReference<String>(key); - + String value = "value"; TransparenteSoftReference valueRef = new TransparenteSoftReference<String>(value); - + map.put(keyRef, valueRef); - - + + assertEquals(valueRef, map.get(keyRef)); assertEquals(valueRef.get(), map.get(keyRef).get()); key = null; value = null; - + System.gc(); Thread.yield(); - + assertEquals("value".hashCode(), map.get(keyRef).hashCode()); } } Modified: trunk/lutinutil/src/test/java/org/codelutin/util/ZipUtilTest.java =================================================================== --- trunk/lutinutil/src/test/java/org/codelutin/util/ZipUtilTest.java 2008-08-04 19:02:59 UTC (rev 978) +++ trunk/lutinutil/src/test/java/org/codelutin/util/ZipUtilTest.java 2008-08-04 19:25:34 UTC (rev 979) @@ -1,6 +1,6 @@ /* *##% * Copyright (C) 2006 - * Code Lutin, C�dric Pineau, Benjamin Poussin + * Code Lutin, Cédric Pineau, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,7 +20,7 @@ /* * * ZipUtilTest.java * - * Created: 24 ao�t 2006 10:47:21 + * Created: 24 août 2006 10:47:21 * * @author poussin * @version $Revision$ @@ -31,20 +31,16 @@ package org.codelutin.util; +import junit.framework.TestCase; +import org.apache.commons.logging.LogFactory; + import java.io.File; import java.io.FileFilter; import java.util.List; -import org.apache.commons.logging.LogFactory; -import junit.framework.TestCase; +/** @author poussin */ - -/** - * @author poussin - * - */ - public class ZipUtilTest extends TestCase { /** to use log facility, just put in your code: log.info(\"...\"); */ @@ -56,28 +52,28 @@ //File dir = new File(System.getProperty("user.dir")); File zipFile = File.createTempFile("testCompressZip", ".zip"); log.info("Compress " + dir + " in zip file = " + zipFile); - + ZipUtil.compress(zipFile, dir, null); - + File ucz = FileUtil.createTempDirectory("testUncompressZip", ""); log.info("uncompress zip " + zipFile + " in " + ucz); - - ZipUtil.uncompress(zipFile, ucz); - + + ZipUtil.uncompress(zipFile, ucz); + List<File> src = FileUtil.getFilteredElements(dir, null, true); List<File> dest = FileUtil.getFilteredElements(ucz, null, true); - + assertEquals(src.size() + 1, dest.size()); // +1 car il y a le rep lui meme dans dest } - + /* - * Test method for 'org.codelutin.util.ZipUtil.compress(File, File, FileFilter)' - */ + * Test method for 'org.codelutin.util.ZipUtil.compress(File, File, FileFilter)' + */ public void testCompress() throws Exception { //File dir = new File(System.getProperty("user.dir")); File zipFile = File.createTempFile("testCompressZip", ".zip"); log.info("Compress " + dir + " in zip file = " + zipFile); - + ZipUtil.compress(zipFile, dir, null); assertTrue(zipFile.exists()); @@ -88,16 +84,16 @@ //File dir = new File(System.getProperty("user.dir")); File zipFile = File.createTempFile("testCompressZip", ".zip"); log.info("Compress " + dir + " in zip file = " + zipFile); - + FileFilter filter = new FileFilter() { public boolean accept(File pathname) { boolean result; result = !pathname.getPath().contains("/target"); return result; } - + }; - + ZipUtil.compress(zipFile, dir, filter); assertTrue(zipFile.exists()); @@ -107,8 +103,8 @@ public void testCompressFile() throws Exception { File dir = new File(System.getProperty("java.home"), "bin" + File.separator + "java"); File zipFile = File.createTempFile("testCompressZip", ".zip"); - log.info("Compress " + dir + " in zip file = " + zipFile); - + log.info("Compress " + dir + " in zip file = " + zipFile); + ZipUtil.compress(zipFile, dir, null); assertTrue(zipFile.exists());
participants (1)
-
tchemit@users.labs.libre-entreprise.org