Index: lutinutil/doc/CommandLineArgumentApplication.rst diff -u /dev/null lutinutil/doc/CommandLineArgumentApplication.rst:1.1 --- /dev/null Thu Nov 22 14:37:10 2007 +++ lutinutil/doc/CommandLineArgumentApplication.rst Thu Nov 22 14:37:05 2007 @@ -0,0 +1,124 @@ +====================== +Argument d'application +====================== + +Il y a deux type d'argument d'application: +- les arguments permettant de modifier la configuration qui peuvent aussi + être dans un fichier de configuration ou en variable d'environnement. +- les arguments permettant d'indiquer des actions a faire a l'application + +Les options de configuration +============================ + +Les options de configuration peuvent être décrit directement par un POJO +avec des annotations:: + + @OptionConfigOrder("resource MonApp.properties", "file /etc/MonApp.properties", + "optionfile configFile", "env", "line") + public class MonAppConfig extends OptionConfig { + + @Option + @OptionSaveFile + public File configFile = new File("$HOME/.MonApp"); + + @Option(pattern [^\s]+) + public String username = "anonyous"; + + @Option(pattern ..) + public String lang = "fr"; + + @Option(pattern ..) + public String country = "FR"; + + @Option + public boolean showGui = true; + + @Option(min=10, max=10) + public List value; + + @Unparsed + public List other; + } + +La classe OptionConfig +---------------------- + +La classe OptionConfig contient plusieurs méthodes: + +- load sans argument qui permet de charger le POJO en fonction de + OptionConfigOrder +- load(File) qui permet de charger le POJO seulement en fonction d'un + fichier. Il bien sur possible d'appeler load() puis load(File). +- save qui permet de sauver les informations du POJO, le fichier ou sauver + les options est indiqué par l'annotation @OptionSaveFile + +Annotation OptionConfigOrder +---------------------------- + +OptionConfigOrder permet de déterminer l'ordre de recherche de la bonne +valeur des options. Le dernier indiqué sera le dernier lu et donc celui qui +aura raison. + +resource + indique un fichier resource a rechercher dans le classpath + +file + indique un fichier sur le systeme de fichier + +optionfile + indique un fichier dont le chemin est indiqué par une option + +env + indique les variables d'environnement du processus + +line + indique les options sur la ligne de commande + +Implantation +~~~~~~~~~~~~ + +# On charge dans un objet **Properties** chaque entre de + **OptionConfigOrder** sauf **optionfile** s'il y en a. +# On chaine tous les fichiers de proprietes pour pouvoir demander + l'information au dernier qui recherchera lui meme dans son pere s'il n'a pas + l'informaiton. +# Pour chaque **optionfile** on demande sa valeur, on crée le fichier de + propriété et on l'ajoute dans la chaine à la bonne place +# Pour chaque option trouvé dans le POJO on met a jour sa valeur avec la + valeur trouvé dans les propriétés. + +Annotation Option +----------------- + +Indique une option possible. Elle peut contenir: + +- description +- pattern +- alias +- min +- max + +Par defaut l'option sur la ligne de commande sera le nom de la variable precedé de -- + +Annotation Unparsed +------------------- + +Indique que toutes les options de la ligne de commande non reconnu finisse dans ce champs +Il est possible de type la collection autrement que par String. + +Annotation OptionSaveFile +------------------------- + +Indique le fichier a utiliser pour sauver les options + +Les actions +=========== + +TODO: comment différencier les actions des options ? comment reutiliser le travail de tony ? + +Amélioration possible +===================== + +- Générer automatiquement par un plugin maven les methodes get/set sur les options +- Gérer les options read/write et read +- un plugin maven qui verifie la coherence des options