Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
April 2009
- 3 participants
- 92 discussions
[Buix-commits] r1344 - in jaxx/trunk: . jaxx-example
by tchemit@users.labs.libre-entreprise.org 20 Apr '09
by tchemit@users.labs.libre-entreprise.org 20 Apr '09
20 Apr '09
Author: tchemit
Date: 2009-04-20 15:54:22 +0000 (Mon, 20 Apr 2009)
New Revision: 1344
Added:
jaxx/trunk/release.properties
Modified:
jaxx/trunk/jaxx-example/pom.xml
Log:
bumps versions
use doxia-module-jrst
Modified: jaxx/trunk/jaxx-example/pom.xml
===================================================================
--- jaxx/trunk/jaxx-example/pom.xml 2009-04-20 15:49:30 UTC (rev 1343)
+++ jaxx/trunk/jaxx-example/pom.xml 2009-04-20 15:54:22 UTC (rev 1344)
@@ -24,11 +24,11 @@
<artifactId>jaxx-runtime-swing</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
+ <!--dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jaxx-runtime-swing-widget</artifactId>
<version>${project.version}</version>
- </dependency>
+ </dependency-->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>jaxx-runtime-validator-swing</artifactId>
Added: jaxx/trunk/release.properties
===================================================================
--- jaxx/trunk/release.properties (rev 0)
+++ jaxx/trunk/release.properties 2009-04-20 15:54:22 UTC (rev 1344)
@@ -0,0 +1,8 @@
+#release configuration
+#Mon Apr 20 17:49:54 CEST 2009
+preparationGoals=clean verify
+scm.commentPrefix=[maven-release-plugin]
+scm.username=tchemit
+exec.additionalArguments=-P codelutin-properties,codelutin-properties
+completedPhase=scm-check-modifications
+scm.url=scm\:svn\:svn+ssh\://tchemit@labs.libre-entreprise.org/svnroot/buix/jaxx/trunk
1
0
[Buix-commits] r1343 - in jaxx/trunk: . jaxx-compiler-api/src/site jaxx-compiler-api/src/site/rst jaxx-compiler-swing/src/site jaxx-compiler-validator/src/site jaxx-example jaxx-example/src/site jaxx-example/src/site/rst jaxx-example/src/site/rst/images jaxx-runtime-api/src/site jaxx-runtime-swing/src/site jaxx-runtime-validator/src/site jaxx-swing-action/src/site jaxx-swing-action/src/site/rst maven-jaxx-plugin/src/site maven-jaxx-plugin/src/site/rst src/site src/site/rst
by tchemit@users.labs.libre-entreprise.org 20 Apr '09
by tchemit@users.labs.libre-entreprise.org 20 Apr '09
20 Apr '09
Author: tchemit
Date: 2009-04-20 15:49:30 +0000 (Mon, 20 Apr 2009)
New Revision: 1343
Added:
jaxx/trunk/jaxx-compiler-api/src/site/rst/
jaxx/trunk/jaxx-compiler-api/src/site/rst/BeanValidator.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/I18n.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/Interface.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/JAXXContext.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/JavaBean.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/NavigationTreeModel.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/Todo.rst
jaxx/trunk/jaxx-compiler-api/src/site/rst/index.rst
jaxx/trunk/jaxx-compiler-swing/src/site/rst/
jaxx/trunk/jaxx-compiler-validator/src/site/rst/
jaxx/trunk/jaxx-example/catalog.xml
jaxx/trunk/jaxx-example/src/site/rst/
jaxx/trunk/jaxx-example/src/site/rst/images/
jaxx/trunk/jaxx-example/src/site/rst/images/Components-screenshot.gif
jaxx/trunk/jaxx-example/src/site/rst/images/webstart.gif
jaxx/trunk/jaxx-example/src/site/rst/index.rst
jaxx/trunk/jaxx-runtime-api/src/site/rst/
jaxx/trunk/jaxx-runtime-swing/src/site/rst/
jaxx/trunk/jaxx-runtime-validator/src/site/rst/
jaxx/trunk/jaxx-swing-action/src/site/rst/
jaxx/trunk/jaxx-swing-action/src/site/rst/Todo.rst
jaxx/trunk/jaxx-swing-action/src/site/rst/index.rst
jaxx/trunk/maven-jaxx-plugin/src/site/rst/
jaxx/trunk/maven-jaxx-plugin/src/site/rst/Todo.rst
jaxx/trunk/maven-jaxx-plugin/src/site/rst/index.rst
jaxx/trunk/src/site/rst/
jaxx/trunk/src/site/rst/BeanValidator.rst
jaxx/trunk/src/site/rst/Core.rst
jaxx/trunk/src/site/rst/I18n.rst
jaxx/trunk/src/site/rst/JAXXContext.rst
jaxx/trunk/src/site/rst/NavigationTreeModel.rst
jaxx/trunk/src/site/rst/Todo.rst
jaxx/trunk/src/site/rst/index.rst
Modified:
jaxx/trunk/
jaxx/trunk/changelog.txt
jaxx/trunk/jaxx-example/pom.xml
jaxx/trunk/pom.xml
jaxx/trunk/src/site/site.xml
Log:
bumps versions
use doxia-module-jrst
Property changes on: jaxx/trunk
___________________________________________________________________
Name: svn:ignore
- *.ipr
*.iws
*.iml
target
*.log
+ *.ipr
*.iws
*.iml
target
catalog.xml
*.log
Modified: jaxx/trunk/changelog.txt
===================================================================
--- jaxx/trunk/changelog.txt 2009-04-20 15:48:49 UTC (rev 1342)
+++ jaxx/trunk/changelog.txt 2009-04-20 15:49:30 UTC (rev 1343)
@@ -1,3 +1,9 @@
+1.4
+ * 20090402 [chemit] - use lutinproject 3.5.3
+ - use doxia-module-jrst 1.0.0 (instead of maven-jrst-plugin)
+ - use maven-i18n-plugin 0.11
+ - use maven-license-switcher 0.7
+
1.3 chemit 20090409
* 20090329 [chemit] - add java help mojo
* 20090313 [chemit] - use i18n 0.10
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/BeanValidator.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/BeanValidator.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/BeanValidator.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/BeanValidator.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,181 @@
+-------------
+BeanValidator
+-------------
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout du support de validation dans JAXX.
+
+La techonologie utilisée est celle de Struts 2 (XWorks 2).
+
+
+Configuration
+=============
+
+La configuration des validateurs se fait via des fichier xml (on peut aussi utiliser des annotations,...).
+
+Ajout d'un validateur
+*********************
+
+Pour enregister un nouveau validateur sur un bean, il suffit de placer dans le même paquetage que le bean un fichier *XXX-validation.xml* où XXX est le nom non qualifié du bean.
+
+On peut de plus affecter un context de validation, dans ce cas le fichier doit s'appeler *XXX-YYY-validation.xml*, où YYY est le nom du context de validation.
+
+Ainsi on peut valider de différentes manières un bean (par exemple selon son cycle de vie :création, modification, ...).
+
+Ajout d'un nouveau type de validateur
+*************************************
+
+Il est aussi possible de définir de nouveau type de validateurs :
+
+ * créer une classe qui étend FieldValidator
+ * ajouter un fichier validators.xml (ou ajouter dans un tel fichier la définition du nouveau validator) à la racine du class-path.
+
+I18n
+****
+
+Afin de rendre le mécanisme multi-langue, on propose dans les fichiers de validations d'utiliser des clef i18n pour les messages.
+
+Un nouveau parseur dans notre plugin i18n a été ajouté pour détecter ces clefs. (*maven-i18n-plugin:0.7:parserValidation*)
+
+
+Intégration dans JAXX
+=====================
+
+Deux nouveaux tags ont été conçus pour pouvoir décrire un validateur dans les fichiers JAXX.
+
+Ce développement est dans le paquetage *jaxx.tags.validator*.
+
+tag BeanValidator
+*****************
+
+Permet de définir un nouveau validateur dans une classe JAXX.
+
+TODO Refaire cette doc qui n'est plas à jour suite au refactoring de la validation (20090202)
+
+Les attributs autorisés sont les suivants :
+
+ * *id* : le nom du validateur
+
+ * *bean* : l'id d'un bean connu par la classe JAXX. On ne peut pas utiliser ici une expression car on n'est pas sûr de pouvoir déterminer le type de cette expression pendant le parsing ? (a verifier).
+
+ * *beanClass* : le FQN de classe du bean à valider. Peut-être non présent si l'attribut *bean* est renseigné.
+
+ * *beanInitializer* : une expression pour initialiser le bean à valider. TODO a revoir : on devrait utiliser uniquement un seul attribut *bean*...
+
+ * *contextName* : le nom du contexte de validation.
+
+ * *autoField* : flag pour indiquer l'inscription implicite des validateurs de champs du bean. Pour ce faire on parcourt l'ensemble des champs du bean et on ne considère uniquement ceux dont on connait dans la classe JAXX un composent d'édition du champ (id=nom du champ). Il est possible de surcharger ce configuration implicite en rajoutant explicitement des champs (voir le tag *field*).
+
+ * *errorList* : le composant graphique pour afficher la liste des erreurs, doit étendre *javax.swing.JList*. Si non présent, on essayera le component d'id *errorList*.
+
+ * *errorListModel* : le modèle qui contient la liste des erreurs (et est liée au composant *errorList*), doit étendre *jaxx.runtime.validator.swing.SwingValidatorErrorListModel*. Si non présent on essayera le composent d'id *errorListModel*.
+
+ * *uiClass* : le FQN de la classe utilisé pour le rendu des erreurs sur les wigets d'édition. La classe doit étendre *jaxx.runtime.validator.swing.ui.AbstractBeanValidatorUI*. Si non présent, on utilise par défaut le render *jaxx.runtime.validator.swing.ui.IconValidationUI*.
+
+
+Le tag supporte aussi l'ajout de tag *field* comme fils pour définir explicitement des champs à validater.
+
+tag field
+*********
+
+Le tag *field* définit une entrée dans le validateur, on définit une correspondance entre le champ à valider et le composant d'édition de ce champ.
+
+Le tag supporte les attributs suivants :
+
+ * *name* : le nom de la propriété du bean associée.
+ Cet attribut est obligatoire.
+
+ * *component* : l'id du composant graphique d'édition associé à la propriété du bean.
+ Cet attribut peut être omis si le nom de la propriété du bean est identique à celui du composent graphique d'édition.
+
+
+Les classes du runtime
+======================
+
+Ce développement est dans le paquetage *jaxx.runtime.validator* (sauf pour l'interface *jaxx.runtime.JAXXValidator*).
+
+Il s'agit de l'ensemble des classes ajoutées dans le module *jaxx-core* pour encapsuler la validation dans les fichiers java générés à partir des fichiers JAXX.
+
+
+interface jaxx.runtime.JAXXValidator
+************************************
+
+Ce contrat a été ajouté à tous les objets JAXX générés (donc l'interface JAXXObject étend JAXXValidator).
+
+On définit ici uniquement des méthodes d'accès aux validateurs enregistrés dans le JAXXObject.
+
+TODO on pourrait ajouter des méthodes pour savoir l'état de validation d'un validateur ?
+
+
+classe jaxx.runtime.validator.swin.SwingValidator
+*************************************************
+
+Il s'agit de la classe principale d'encapsulation d'un validateur XWorks 2.
+
+Le principe est simple : le validateur écoute les modifications sur le bean associé et revalide le bean à chaque modification. La validation met à jour la liste des erreurs asociées.
+
+On se base sur les PropertyChangeListener pour écouter les modification des beans. Il faut donc que les beans supporte ces listeners.
+
+Pour les entités de ToPIA, il suffit de positionner un contexte (topia) au bean pour profiter des listeners liés.
+
+Pour les DTO de ToPIA, les générateurs ont été modifiés pour gérer ce support.
+
+Les méthodes à retenir sont :
+
+ * *setBean* pour affecter un bean au validateur (pour déasactiver passer null). Lors de la désactivation d'un bean, les erreurs associés sont retirées de la liste des erreurs.
+
+ * *setContextName* pour affecter un nouveau nom de context de validation (par défaut on utilise pas de context de validation).
+
+ * *validate* pour lancer une validation sur le bean liée (ne sera opérant uniquement si un bean est liée et qu'une liste d'erreur est liée).
+
+ * *isValid* pour connaitre l'état du validateur à un moment donné.
+
+Normalement la méthode *validate* ne devrait pas être appelée directement. : elle est automatiquement invoquée lorsqu'une propriété du bean est modifiée.
+
+classe jaxx.runtime.validator.swing.SwingValidatorErrorModel
+************************************************************
+
+Modélisation d'une erreur renvoyé par le validateur, on conserve ici :
+
+ * le validateur qui a provoqué l'erreur
+
+ * la propriété du bean en faute
+
+ * le composent graphique d'édtion de la propriété
+
+classe jaxx.runtime.validator.swing.SwingValidatorErrorListModel
+****************************************************************
+
+Le modèle de la liste des erreurs renvoyées par le validateur. Il s'agit d'une extension d'un *javax.swing.DefaultListModel* qui permet de gérer une liste d'erreurs provenant de plusieurs validateurs en même temps.
+
+classe jaxx.runtime.validator.swing.SwingValidatorErrorListMouseListener
+************************************************************************
+
+Un listener écoutant les double clics sur une liste d'erreurs et qui donne le focus au composent graphique d'édition associée à la propriété dont l'erreur est sélectionné.
+
+
+Les conversions
+===============
+
+Pour l'édition de proriétés qui ne sont pas des chaines de caractères, des erreurs de conversions peuvent survenir (conversion de la valeur de l'édtieur graphique vers le bean), avant que l'on utilise
+réellement la mécanique de la validation.
+
+Pour palier à ce problème on a intégré la gestion des erreurs de conversion dans le validateur.
+Pour ce faire, il suffit de faire appel à la méthode suivante pour injecter dans un bean une propriété :
+
+ ::
+
+ jaxx.runtime.Util.convert(validator,"nomDeLaPropriété",widget.getText(),TypeDeLaProriete.class);
+
+
+On obtiendra si une erreur de conversion intervient, une erreur dont le libellé est de la forme *error.convertor.XXX*
+où XXX est nom simple en minuscule du type de la propruité. (par exemple : *error.convertor.integer*).
+
+
+
+
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/BeanValidator.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/I18n.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/I18n.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/I18n.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/I18n.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,56 @@
+----
+I18n
+----
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout du support i18n dans JAXX.
+
+On utilise la système i18n développé dans la librairie des lutins (*lutinlib*).
+
+Configuration
+=============
+
+Une option a été ajoutée dans le plugin maven de JAXX : *i18nable* pour permettre ou non l'utilisation de ce système.
+
+Par défaut, l'option est active (donc aucune configuration supplémentaire n'est nécessaire pour utiliser i18n dans JAXX).
+
+
+Fonctionnement
+==============
+
+Le fonctionnement est simple : lors de la compilation JAXX, lorsque l'on rencontre certains attributs on encapsule la
+valeur de l'attribution par un appel à la méthode
+
+::
+
+ org.codelutin.i18n.I18n._(String)
+
+
+La liste des attributs en question sont les suivants :
+
+ - title
+ - text
+ - toolTipText
+
+
+Ensuite l'utilisation du *parserJava* du plugin i18n permet la détection des clefs i18n.
+
+
+Pourquoi ne plus utiliser l'ancien parserJaxx du plugin i18n
+============================================================
+
+Un parseur avait été développé initialement pour détecter dans les fichiers JAXX (*parserJaxx*), les appels à la méthode de traduction
+i18n dans les attributs.
+
+Ce parseur n'est plus d'actualité car on ne doit plus avoir d'appel explicite à cette méthode dans les fichiers JAXX.
+
+De plus, même sans avoir mis en place le mécanisme i18n dans JAXX, ce parseur n'était plus d'actualité : il se base
+sur une liste prédéfinie d'attributs xml à scanner pour détecter des appels i18n; ce qui n'était pas acceptable à terme
+car si on ajoute un nouveau composent dans JAXX, le plugin i18n n'est pas capable de détecter les nouvelles clefs.
+
+Donc on préconise l'utilisation du *parserJava* du plugin i18n qui lui est capable de détecter tous les appels i18n.
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/I18n.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/Interface.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/Interface.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/Interface.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/Interface.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,38 @@
+---------
+Interface
+---------
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout de contrats sur le code généré dans JAXX.
+
+Mécanisme
+=========
+
+Le compilateur JAXX génère des classes à partir de fichiers JAXX mais n'est pas capable d'ajouter des contrats sur
+les objets générés, donc interdit en quelque sorte la programmation par contrat.
+
+Pour palier à cette limitation, on a ajouté un attribut spécial *implements*.
+
+Cette attribut ne doit être placé que sur le tag racine d'un fichier JAXX et son contenu est le nom qualifié d'un ou
+plusieurs contrats séparaés par des virgules.
+
+::
+
+ <JPanel implements='java.lang.Comparable'>
+
+ <script>public int compareTo(JPanel o) { return getName().compareTo(o.getName()); }</script>
+
+ </JPanel>
+
+La classe générée aura bien le contrat *java.lang.Comparable*.
+
+TODO
+====
+
+Il serait intéressant lors de l'injection de contrats sur un objet jaxx de pouvoir vérifier si toutes les méthodes du
+contrat sont bien implantées dans la classe, et si ce n'est pas le cas de rendre la classe abstraite.
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/Interface.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/JAXXContext.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/JAXXContext.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/JAXXContext.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/JAXXContext.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,161 @@
+-----------
+JAXXContext
+-----------
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout d'un context applicatif dans JAXX.
+
+Le besoin initial de ce développement est de pouvoir facilement intégrer un context applicatif dans JAXX et de pouvoir
+l'utiliser dans les fichiers JAXX pour injecter par exemple des données dans les widgets.
+
+jaxx.runtime.JAXXContext
+========================
+
+Il s'agit du contrat de base du context applicatif.
+
+Les entrées dans le context
+***************************
+
+Chaque donnée utilisable dans le context est caractérisée par deux propriétés :
+
+ * la type de l'objet
+
+ * un nom (facultatif) associé à la donnée
+
+Le type de l'objet correspondant en fait à la classe de la donnée.
+
+Le nom qui est facultatif permet de pouvoir distinguer plusieurs données d'un même type dans le context. Si le nom
+n'est pas utilisé pour caractériser une données on fixera alors sa valeur à *null*.
+
+Afin de pouvoir caractériser les entrées dans le context, une classe a été définie *jaxx.runtime.JAXXContextEntryDef*.
+
+Les méthodes de lecture
+***********************
+
+On a définit deux méthodes de lecture de données dans le context :
+
+ * *getContextValue(Class)* récupère la donnée *non nommée* dont le type correspond à celui passé.
+
+ * *getContextValue(Class,String)* récupère la donnée nommé dont le type correspond à celui passé.
+
+Les méthodes d'écriture
+***********************
+
+On a définit quatre méthodes d'écriture de données dans le context :
+
+ * *setContextValue(Object)* enregistre dans le context la donnée *non nommée*.
+
+ * *setContextValue(Object,String)* enregistre dans le context la donnée *nommée*.
+
+ * *removeContextValue(Class)* supprime du context, la donnée *non nommée* dont le type est passé.
+
+ * *removeContextValue(Class, String)* supprime du context, la donnée *nommée* dont le type est passé.
+
+Afin de pouvoir assurer une cohérence dans le context, chaque injection de donnée, sera toujours précédée par une
+suppression d'un éventuellement ancienne valeur qui aurait la même définition d'entrée.
+
+L'héritage
+**********
+
+Il est possible d'avoir une hériarchie de context qui s'enchaînent. Ce mécanisme a été mis en place pour répondre à un
+besion précis : chaque fichier JAXX donne lieu à une nouvelle classe qui possède son propre context.
+
+On peut avoir des fichiers JAXX qui utilisent d'autres fichiers JAXX, il faut donc être capable de lier le context du
+composent parent avec ses fils.
+
+La mise en place de l'héritage est transparente pour l'utilisateur : aucune méthode supplémentaire n'est requise.
+
+Les implantations de context
+============================
+
+jaxx.runtime.DefaultJAXXContext
+*******************************
+
+Il s'agit de l'implantation par défaut utilisée par les objects *JAXXObject* (objets générés).
+
+A noter que pour les opérations d'injection ou de suppression, on effectuera les opérations sur le context qui contient
+réellement la donnée, ce qui est important pour conserver la cohérence des contexts dans les contexts chaînés.
+
+Pour traiter le context parent, aucune méthode publique supplémentaire n'a été rajoutée, il suffit d'injecter un objet
+de type *JAXXContext* *non nommé* qui le context courant qui sera détecté comme une entrée de type context.
+
+Cette entrée spéciale ne sera pas stockée avec les autres entrées afin d'optimiser les algorithmes d'injection et de
+restitution.
+
+jaxx.runtime.JAXXInitialContext
+*******************************
+
+On a implanté un second type de context qui lui peut servir à l'initialisation des JAXXObject.
+
+Ce second type de context ajoute des méthodes pour préparer le context avant l'instanciation des JAXXObject.
+
+Ce context admet certaine limitation (pas de suppression dans le context), et apporte trois nouvelles méthodes :
+
+ * add(Object) : injecte dans le context une entrée non nommée et retourne l'instance du context.
+
+ * add(String,Object) : injecte dans le context une entrée nommé et retourne l'instance du context.
+
+ * to(JAXXContext) : injecte dans le context passé toutes les entrée du context.
+
+Les méthodes *add* peuvent être chaînées comme dans l'exemple suivant :
+
+::
+
+ JAXXInitialContext context = new JAXXInitialContext().add("string").add(0).add("currentDate",new Date());
+
+
+Intégration dans les JAXXObject
+===============================
+
+Le traitement d'un fichier JAXX donne lieu à une classe qui possède le contrat *jaxx.runtime.JAXXObject*.
+
+Ce contrat hérite donc du contrat *JAXXContext* (afin de pouvoir l'utiliser de manière transparente dans les fichiers JAXX).
+
+Afin de simplifier la génération et les évolutions du context indépendemment des évolutions des JAXXObject, on utilise
+un pattern de délégation au sein des object générés.
+
+Paramétrage de l'implantation du context
+****************************************
+
+Une propriété a été rajoutée sur le plugin JAXX, afin de pouvoir préciser l'implantation de context à utiliser :
+
+::
+
+ jaxx.jaxxContextImplementorClass
+
+Il s'agit du nom qualifié de la classe d'implantation à utiliser.
+
+Par défaut, si rien n'est renseigné, on utilisera un *jaxx.runtime.DefaultJAXXContext*.
+
+
+Initialisation d'un JAXXObject
+******************************
+
+Un nouveau constructeur a été ajouté dans les JAXXObjet générés afin de pouvoir facilement initialisé un tel objet à
+partir d'un context parent, son unique paramètre est le context parent. Ce constructeur est capable de différencer le
+type de context passé :
+
+ * s'il s'agit d'un *JAXXInitialContext*, on recopie alors dans le context réel de l'objet toutes les entrées du context passé.
+
+ * sinon le context passé est simplement injecté dans le context de l'objet (et donc sera utilisé comme le context parent de celui de l'objet).
+
+Voici un exemple d'initialisation d'un JAXXObject :
+
+::
+
+ java.util.Date currentDate = new java.util.Date();
+ JAXXInitialContext context = new JAXXInitialContext().add("string").add(0).add("currentDate",currentDate);
+ JAXXObject ui = new MyUI(context);
+
+ assert "string".equals(myUI.getContextValue(String.class));
+ assert 0 == myUI.getContextValue(Integer.class);
+ assert currentDate.equals(myUI.getContextValue(java.util.Date.class,"currentDate"));
+
+A noter, que l'initialisation du context d'un *JAXXObject* sera toujours effectuée avant la méthode *$initialize* générée
+par le compilateur JAXX, ce qui permet de pouvoir utiliser le context pour l'initialisation des widgets dans les fichiers JAXX.
+
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/JAXXContext.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/JavaBean.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/JavaBean.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/JavaBean.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/JavaBean.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,50 @@
+--------
+JavaBean
+--------
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout du support complêt des javaBean dans JAXX.
+
+Mécanisme
+=========
+
+Il est possible dans JAXX de rajouter des objets quelconques via leur nom qualifié de classe :
+
+::
+
+ <JPanel>
+ <java.lang.Boolean id='myState' constructorParams='true'/>
+ <JLabel text='text' visible='{isMySate()}'/>
+ </JPanel>
+
+Avant l'ajout de la fonctionnalité, le code généré possèdait :
+
+ * une propriété en lecture seul nommé *myState*.
+
+Aucun support javaBean n'était présent et le databinding sur la propriété *visible* du label n'est pas créé. Cela veut
+dire que le label sera initialisé avec la valeur initiale du boolean et c'est tout...
+
+Avec l'ajout du support javaBean, on peut maintenant faire ces bindings, pour ce faire il suffit d'ajouter un attribut
+*javaBean* sur l'objet :
+
+::
+
+ <JPanel>
+ <java.lang.Boolean id='myState' constructorParams='true' javaBean='anyValue'/>
+ <JLabel text='text' visible='{isMySate()}'/>
+ </JPanel>
+
+On aura donc en plus :
+
+ * un mutateur sur la propriété *myState* qui déclanchera l'envoie d'un *PropertyChange* sur la propriété lors de modification de valeur.
+
+Ainsi le compilateur JAXX sera capable d'enregistrer un novueau dataBindig sur la propriété *visible* du label et la
+modification de l'état *myState* sera automatiquement répercuté sur la propriété.
+
+
+
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/JavaBean.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/NavigationTreeModel.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/NavigationTreeModel.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/NavigationTreeModel.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/NavigationTreeModel.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,168 @@
+-------------------
+NavigationTreeModel
+-------------------
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout d'un modèle d'arbre de navigation.
+
+Le but de cette fonctionnalité est de pouvoir créer un arbre de navigation lié au context de JAXX, de définir des UI
+rattachés à chaque noeud.
+
+Le développement est effectué dans le paquetage *jaxx.runtime.swing.navigation*.
+
+jaxx.runtime.swing.navigation.NavigationTreeModel
+=================================================
+
+Il s'agit du modèle de l'arbre utilisé, c'est une extension d'un *javax.swing.tree.DefaultTreeModel*.
+
+Les noeuds présents dans ce modèle sont aussi typés en *jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode*.
+
+L'idée principale est de pouvoir associé à un noeud précis un chemin depuis la racine, ce que l'on appele *chemin de navigation*.
+
+Pour obtenir le chemin de navigation d'un noeud donné, on récupère l'enmseble des neoud depuis la racine vers ce noeud
+et les concatène en suffixant par le caractère séparateur défini.
+
+Définition d'un noeud
+=====================
+
+Le noeud (*jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode*) est une extension d'un *javax.swing.tree.DefaultMutableTreeNode*.
+
+Il apporte les nouvelles propriétés suivantes :
+
+ * *navigationPAth* : nom de chemin de navigation de ce noeud.
+
+ * *jaxxClass* : nom qualifié de la classe d'ui associé à ce noeud (doit être obligatoirement un *JAXXObject*)
+
+ * *jaxxActionClass* : nom qualifié de la classe d'handler d'ui associé à ce noeud (doit être obligatoirement un *JAXXAction*).
+
+ * *jaxxContextEntryDef* : définition de l'entrée dans le context JAXX associé à ce noeud.
+
+ * *jaxxContextEntryJXPath* : définition d'une expression JXPath à appliquer sur le bean associé au noeud.
+
+
+Retrouver un noeud à partir du chemin de navigation
+***************************************************
+
+Il est possible en connaissant le chemin de navigation d'un noued de récupérer le noeud dans l'arbre via la méthode
+
+::
+
+ model.findNode("chemin.de.navigation")
+
+Trouver la valeur associée dans le context JAXX à partir du chemin de navigation
+********************************************************************************
+
+Il est possible en connaissant le chemin de navigation d'un noued de récupérer la valeur associée dans le context JAXX.
+
+::
+
+ model.getJAXXContextValue(myJAXXContext, "chemin.de.navigation")* .
+
+L'algrotihme est le suivant :
+
+ * récupération du noeud associé au chemin de navigation
+
+ * recherche du premier noeud (dans les noeuds qui remontent vers la racine de l'arbre) dont la propriété *jaxxContextEntry* est non nulle, il s'agit du point d'entré dans le context JAXX.
+
+ * redescendre à partir de ce noeud vers le noeud d'origine (si ce noeud était différent) et en descendant conjointement dans l'objet du context JAXX :
+
+ - on utilise l'expression JXPath pour obtenir l'objet associé au noeud
+
+Exemple :
+
+::
+
+ "$root" + <-- la racine de l'abre
+ |
+ + "string" <-- attaché au context JAXX <java.lang.String,"string">
+ |
+ + "liste" + <-- attaché au context JAXX <java.util.List.class,"liste">
+ | |
+ | + "0" <-- le premier élément de la liste
+ | |
+ | + "1" <-- le second élément de la liste
+ | |
+ | + "2" <-- le troisième élément de la liste
+ |
+ + "locale" + <-- attaché au context JAXX <java.util.Locale>
+ |
+ + country
+ |
+ + language
+
+ // preparation du context
+ java.util.List myList = java.util.Arrays.asList("one","two","three");
+ java.util.Locale myLocale = java.util.Locale.FRENCH;
+ context.setContextValue(myList, "liste");
+ context.setContextValue("stringValue","string");
+ context.setContextValue(myLocale);
+
+
+ // récupération des valeurs dans le context à partir de chemin de navigation
+ assert model.getJAXXContextValue(context, "$root") == null;
+ assert model.getJAXXContextValue(context, "$root.string") == "stringValue";
+ assert model.getJAXXContextValue(context, "$root.liste") == myList;
+ assert model.getJAXXContextValue(context, "$root.liste.0") == "one";
+ assert model.getJAXXContextValue(context, "$root.liste.1") == "two";
+ assert model.getJAXXContextValue(context, "$root.liste.2") == "three";
+ assert model.getJAXXContextValue(context, "$root.locale") == myLocale;
+ assert model.getJAXXContextValue(context, "$root.locale.country") == myLocale.getCountry();
+ assert model.getJAXXContextValue(context, "$root.locale.language") == myLocale.getLanguage();
+
+TODO mettre à jour cet exemple suite à l'utilisation de JXPath pour naviguer dans les objets.
+
+A noter qu'une seconde méthode de récupération de valeur du context JAXX est disponible pour pouvoir récupérer cette
+valeur en connaissant le noeud :
+
+::
+
+ model.getJAXXContextValue(context, myNode);
+
+jaxx.runtime.swing.navigation.NavigationTreeSelectionAdapter
+============================================================
+
+Il s'agit d'un listener sur la sélection d'un noeud dans l'arbre de navigation basé sur notre modèle de navigation. Il
+étend *javax.swing.event.TreeSelectionListener*.
+
+Ce listener contient la gestion de passage d'un noeud à un autre avec interaction avec le context JAXX et affichage automatique de l'ui associé au noeud sélectionné.
+
+**Attention : la mécanique ne fonctionne que pour un arbre à selection unique.**
+
+Algorithme
+**********
+
+Voici l'algorithme utilisé lors de la sélection d'un nouveau noeud :
+
+ * *closeUI* : tentative de fermeture de l'ui lié au noeud précédemment selectionné, si cela n'aboutit pas on retourne sur le noeud précédent.
+
+ * *attachBeanFromNodeToContext* : injection dans le context JAXX de la valeur associée au nouveau noeud
+
+ * *createUI* : création de la nouvelle ui (si elle n'existe pas)
+
+ * *openUI* : ouverture de la nouvelle ui
+
+Si une erreur survient lors de ces opérations, on entre dans la méthode *goBackToPreviousNode* qui est abstraite et permet de notifier les erreur de retourner au noeud précdent.
+
+jaxx.runtime.swing.navigation.NavigationTreeSelectionAdapterWithCardLayout
+**************************************************************************
+
+Il s'agit d'une implantation du listener précédent qui suppose que les uis associées aux noeuds sont affichées dans un
+unique container en utilisant le layout *jaxx.runtime.swing.CardLayout2*.
+
+La contrainte de chaque ui sera extactement le chemin de navigation du noeud associé.
+
+Il possède deux méthodes abstraites :
+
+ * *getContentContainer* : qui indique le container d'ui.
+
+ * *getContentLayout* : qui indique le layout utilisé.
+
+Pour pouvoir utilisé cet *adapter*, il vous suffit de définir la méthode suivante (en plus des deux méthodes abstraites) :
+
+ * *goBackToPreviousNode* : comment gérer les erreurs et retourner au noeud précedent.
+
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/NavigationTreeModel.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/Todo.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/Todo.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/Todo.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/Todo.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,15 @@
+====
+TODO
+====
+
+ - réorganiser ce module maven en deux modules :
+
+ * un premier module de runtime
+
+ * un second module contenant uniquement le compilateur et non nécessaire au runtime.
+
+ Le second module pourrait être facultatif et le code pourrait directement être placé dans le module du plugin.
+
+ Cependant cela n'est pas possible actuelement car certains objets du runtime contiennent aussi du code utilisé
+ par le compilateur JAXX (par exemple StyleSheet). Il faut avant tout cloisonner le code non runtime.
+
\ No newline at end of file
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/Todo.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-compiler-api/src/site/rst/index.rst (from rev 1307, jaxx/trunk/jaxx-compiler-api/src/site/fr/rst/index.rst)
===================================================================
--- jaxx/trunk/jaxx-compiler-api/src/site/rst/index.rst (rev 0)
+++ jaxx/trunk/jaxx-compiler-api/src/site/rst/index.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,41 @@
+jaxx-core
+=========
+
+.. contents::
+
+
+Présentation
+------------
+
+Le compilateur Jaxx TODO
+
+**Veuillez consulter la JavaDoc pour de plus ample détails sur les différentes
+librairies.**
+
+Nouvelles fonctionnalités
+-------------------------
+
+ * I18n_
+
+ * JAXXContext_
+
+ * BeanValidator_
+
+ * NavigationTreeModel_
+
+ * JavaBean_
+
+ * Interface_
+
+
+.. _I18n: I18n.html
+
+.. _JAXXContext: JAXXContext.html
+
+.. _BeanValidator: BeanValidator.html
+
+.. _NavigationTreeModel: NavigationTreeModel.html
+
+.. _Javabean: JavaBean.html
+
+.. _Interface: Interface.html
\ No newline at end of file
Property changes on: jaxx/trunk/jaxx-compiler-api/src/site/rst/index.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Added: jaxx/trunk/jaxx-example/catalog.xml
===================================================================
--- jaxx/trunk/jaxx-example/catalog.xml (rev 0)
+++ jaxx/trunk/jaxx-example/catalog.xml 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
+ <nextCatalog catalog="file:/home/chemit/.netbeans/6.5/var/cache/mavencachedirs/87431320//retriever/catalog.xml"/>
+</catalog>
\ No newline at end of file
Modified: jaxx/trunk/jaxx-example/pom.xml
===================================================================
--- jaxx/trunk/jaxx-example/pom.xml 2009-04-20 15:48:49 UTC (rev 1342)
+++ jaxx/trunk/jaxx-example/pom.xml 2009-04-20 15:49:30 UTC (rev 1343)
@@ -26,6 +26,11 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>jaxx-runtime-swing-widget</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>jaxx-runtime-validator-swing</artifactId>
<version>${project.version}</version>
</dependency>
Copied: jaxx/trunk/jaxx-example/src/site/rst/images/Components-screenshot.gif (from rev 1307, jaxx/trunk/jaxx-example/src/site/fr/rst/images/Components-screenshot.gif)
===================================================================
(Binary files differ)
Property changes on: jaxx/trunk/jaxx-example/src/site/rst/images/Components-screenshot.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-example/src/site/rst/images/webstart.gif (from rev 1307, jaxx/trunk/jaxx-example/src/site/fr/rst/images/webstart.gif)
===================================================================
(Binary files differ)
Copied: jaxx/trunk/jaxx-example/src/site/rst/index.rst (from rev 1307, jaxx/trunk/jaxx-example/src/site/fr/rst/index.rst)
===================================================================
--- jaxx/trunk/jaxx-example/src/site/rst/index.rst (rev 0)
+++ jaxx/trunk/jaxx-example/src/site/rst/index.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,40 @@
+===================
+Examples/Components
+===================
+
+The Components demo displays many different Swing components being used in a variety of ways; it is JAXX's equivalent
+of the SwingSet demo. Various pages use advanced features such as data binding, scripting, event handling, and
+CSS stylesheets.
+
+Examples/Calculator
+===================
+
+This is an implementation of Challenge #2 from the `XUL Grand Coding Challenge 2004`_ . Because this example program
+has been implemented in so many different languages, you can easily compare JAXX's
+syntax against the competition and decide for yourself which you prefer.
+
+Screen shot
+-----------
+
+.. image:: images/Components-screenshot.gif
+
+Set it in action
+----------------
+
+|webstart|
+
+To run this example in `Java Web Start`_, click the `following link`_.
+
+
+Source code
+-----------
+
+Unlike the other examples, the source code for Components is too big to display here. You can view it yourself by
+downloading JAXX, and you can also view the source code for the individual demos by clicking the "Source" tabs.
+
+
+.. _Java Web Start: http://java.sun.com/products/javawebstart/
+
+.. |webstart| image:: images/webstart.gif
+
+.. _following link: ./launch-demo.jnlp
Copied: jaxx/trunk/jaxx-swing-action/src/site/rst/Todo.rst (from rev 1307, jaxx/trunk/jaxx-swing-action/src/site/fr/rst/Todo.rst)
===================================================================
--- jaxx/trunk/jaxx-swing-action/src/site/rst/Todo.rst (rev 0)
+++ jaxx/trunk/jaxx-swing-action/src/site/rst/Todo.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,4 @@
+TODO
+====
+
+a faire
\ No newline at end of file
Property changes on: jaxx/trunk/jaxx-swing-action/src/site/rst/Todo.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/jaxx-swing-action/src/site/rst/index.rst (from rev 1307, jaxx/trunk/jaxx-swing-action/src/site/fr/rst/index.rst)
===================================================================
--- jaxx/trunk/jaxx-swing-action/src/site/rst/index.rst (rev 0)
+++ jaxx/trunk/jaxx-swing-action/src/site/rst/index.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,13 @@
+jaxx-swing-action
+=================
+
+.. contents::
+
+
+Présentation
+------------
+
+Framework de gestion des actions et onglets TODO
+
+**Veuillez consulter la JavaDoc pour de plus ample détails sur les différentes
+librairies.**
Property changes on: jaxx/trunk/jaxx-swing-action/src/site/rst/index.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/maven-jaxx-plugin/src/site/rst/Todo.rst (from rev 1307, jaxx/trunk/maven-jaxx-plugin/src/site/fr/rst/Todo.rst)
===================================================================
--- jaxx/trunk/maven-jaxx-plugin/src/site/rst/Todo.rst (rev 0)
+++ jaxx/trunk/maven-jaxx-plugin/src/site/rst/Todo.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,4 @@
+TODO
+====
+
+a faire
\ No newline at end of file
Property changes on: jaxx/trunk/maven-jaxx-plugin/src/site/rst/Todo.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/maven-jaxx-plugin/src/site/rst/index.rst (from rev 1307, jaxx/trunk/maven-jaxx-plugin/src/site/fr/rst/index.rst)
===================================================================
--- jaxx/trunk/maven-jaxx-plugin/src/site/rst/index.rst (rev 0)
+++ jaxx/trunk/maven-jaxx-plugin/src/site/rst/index.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,13 @@
+maven-jaxx-plugin
+=================
+
+.. contents::
+
+
+Présentation
+------------
+
+Le plugin maven pour lancer le compilateur jaxx dans un projet maven TODO
+
+**Veuillez consulter la JavaDoc pour de plus ample détails sur les différentes
+librairies.**
Property changes on: jaxx/trunk/maven-jaxx-plugin/src/site/rst/index.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: jaxx/trunk/pom.xml
===================================================================
--- jaxx/trunk/pom.xml 2009-04-20 15:48:49 UTC (rev 1342)
+++ jaxx/trunk/pom.xml 2009-04-20 15:49:30 UTC (rev 1343)
@@ -9,7 +9,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>lutinproject</artifactId>
- <version>3.4</version>
+ <version>3.5.3</version>
</parent>
<groupId>org.codelutin</groupId>
@@ -92,14 +92,14 @@
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
- <version>2.0.4</version>
+ <version>${maven.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
- <version>2.0.4</version>
+ <version>${maven.version}</version>
<scope>compile</scope>
</dependency>
@@ -109,8 +109,6 @@
<groupId>com.opensymphony</groupId>
<artifactId>xwork</artifactId>
<version>2.1.1-cl_20081015</version>
- <!--version>2.1.1-cl_20090130</version-->
- <!--version>2.1.1</version-->
</dependency>
<!-- swinglabs dependencies -->
@@ -149,8 +147,9 @@
<!-- libs version -->
<lutinutil.version>1.0.3</lutinutil.version>
<jaxx.version>${project.version}</jaxx.version>
- <i18n.version>0.10</i18n.version>
- <lutinpluginutil.version>0.3</lutinpluginutil.version>
+ <i18n.version>0.11</i18n.version>
+ <lutinpluginutil.version>0.4</lutinpluginutil.version>
+ <maven.version>2.0.10</maven.version>
</properties>
<build>
@@ -170,31 +169,26 @@
<version>2.4.3</version>
</plugin>
+ <plugin>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <locales>fr</locales>
+ <siteDirectory>src/site</siteDirectory>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.codelutin</groupId>
+ <artifactId>doxia-module-jrst</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+
</plugins>
</pluginManagement>
<plugins>
- <!-- Always process jrst files, but only called on pre-site phase -->
- <plugin>
- <groupId>org.codelutin</groupId>
- <artifactId>maven-jrst-plugin</artifactId>
- <version>0.8.4</version>
- <configuration>
- <directoryIn>${maven.src.dir}/site</directoryIn>
- <directoryOut>${maven.site.gen.dir}</directoryOut>
- <defaultLocale>fr</defaultLocale>
- <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
- <outputEncoding>${project.build.sourceEncoding}</outputEncoding>
- </configuration>
- <executions>
- <execution>
- <phase>pre-site</phase>
- <goals>
- <goal>jrst</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
+
</plugins>
</build>
@@ -244,7 +238,7 @@
<plugin>
<groupId>org.codelutin</groupId>
<artifactId>maven-license-switcher-plugin</artifactId>
- <version>0.6</version>
+ <version>0.7</version>
<configuration>
<licenseName>${license-switcher.licenseName}</licenseName>
</configuration>
Copied: jaxx/trunk/src/site/rst/BeanValidator.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/BeanValidator.rst)
===================================================================
--- jaxx/trunk/src/site/rst/BeanValidator.rst (rev 0)
+++ jaxx/trunk/src/site/rst/BeanValidator.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,181 @@
+-------------
+BeanValidator
+-------------
+
+.. contents::
+
+
+**WARNING : documentation non à jour...**
+
+Présentation
+============
+
+Ajout du support de validation dans JAXX.
+
+La techonologie utilisée est celle de Struts 2 (XWorks 2).
+
+
+Configuration
+=============
+
+La configuration des validateurs se font via des fichier xml (on peut aussi utiliser des annotations,...).
+
+Ajout d'un validateur
+*********************
+
+Pour enregister un nouveau validateur sur un bean, il suffit de placer dans le même paquetage que le bean un fichier *XXX-validation.xml* où XXX est le nom non qualifié du bean.
+
+On peut de plus affecter un context de validation, dans ce cas le fichier doit s'appeler *XXX-YYY-validation.xml*, où YYY est le nom du context de validation.
+
+Ainsi on peut valider de différentes manières un bean (par exemple selon son cycle de vie :création, modification, ...).
+
+Ajout d'un nouveau type de validateur
+*************************************
+
+Il est aussi possible de définir de nouveau type de validateurs :
+
+ * créer une classe qui étend FieldValidator
+ * ajouter un fichier validators.xml (ou ajouter dans un tel fichier la définition du nouveau validator) à la racine du class-path.
+
+I18n
+****
+
+Afin de rendre le mécanisme multi-langue, on propose dans les fichiers de validations d'utiliser des clef i18n pour les messages.
+
+Un nouveau parseur dans notre plugin i18n a été ajouté pour détecter ces clefs. (*maven-i18n-plugin:0.7:parserValidation*)
+
+
+Intégration dans JAXX
+=====================
+
+Deux nouveaux tags ont été conçus pour pouvoir décrire un validateur dans les fichiers JAXX.
+
+Ce développement est dans le paquetage *jaxx.tags.validator*.
+
+tag BeanValidator
+*****************
+
+Permet de définir un nouveau validateur dans une classe JAXX.
+
+Les attributs autorisés sont les suivants :
+
+ * *id* : le nom du validateur
+
+ * *bean* : l'id d'un bean connu par la classe JAXX. On ne peut pas utiliser ici une expression car on n'est pas sûr de pouvoir déterminer le type de cette expression pendant le parsing ? (a verifier).
+
+ * *beanClass* : le FQN de classe du bean à valider. Peut-être non présent si l'attribut *bean* est renseigné.
+
+ * *beanInitializer* : une expression pour initialiser le bean à valider. TODO a revoir : on devrait utiliser uniquement un seul attribut *bean*...
+
+ * *contextName* : le nom du contexte de validation.
+
+ * *autoField* : flag pour indiquer l'inscription implicite des validateurs de champs du bean. Pour ce faire on parcourt l'ensemble des champs du bean et on ne considère uniquement ceux dont on connait dans la classe JAXX un composent d'édition du champ (id=nom du champ). Il est possible de surcharger ce configuration implicite en rajoutant explicitement des champs (voir le tag *field*).
+
+ * *errorList* : le composant graphique pour afficher la liste des erreurs, doit étendre *javax.swing.JList*. Si non présent, on essayera le component d'id *errorList*.
+
+ * *errorListModel* : le modèle qui contient la liste des erreurs (et est liée au composant *errorList*), doit étendre *jaxx.runtime.validator.swing.SwingValidatorErrorListModel*. Si non présent on essayera le composent d'id *errorListModel*.
+
+ * *uiClass* : le FQN de la classe utilisé pour le rendu des erreurs sur les wigets d'édition. La classe doit étendre *jaxx.runtime.validator.swing.ui.AbstractBeanValidatorUI*. Si non présent, on utilise par défaut le render *jaxx.runtime.validator.swing.ui.IconValidationUI*.
+
+
+Le tag supporte aussi l'ajout de tag *field* comme fils pour définir explicitement des champs à validater.
+
+tag field
+*********
+
+Le tag *field* définit une entrée dans le validateur, on définit une correspondance entre le champ à valider et le composant d'édition de ce champ.
+
+Le tag supporte les attributs suivants :
+
+ * *name* : le nom de la propriété du bean associée.
+ Cet attribut est obligatoire.
+
+ * *component* : l'id du composant graphique d'édition associé à la propriété du bean.
+ Cet attribut peut être omis si le nom de la propriété du bean est identique à celui du composent graphique d'édition.
+
+
+Les classes du runtime
+======================
+
+Ce développement est dans le paquetage *jaxx.runtime.validator* (sauf pour l'interface *jaxx.runtime.JAXXValidator*).
+
+Il s'agit de l'ensemble des classes ajoutées dans le module *jaxx-core* pour encapsuler la validation dans les fichiers java générés à partir des fichiers JAXX.
+
+
+interface jaxx.runtime.JAXXValidator
+************************************
+
+Ce contrat a été ajouté à tous les objets JAXX générés (donc l'interface JAXXObject étend JAXXValidator).
+
+On définit ici uniquement des méthodes d'accès aux validateurs enregistrés dans le JAXXObject.
+
+TODO on pourrait ajouter des méthodes pour savoir l'état de validation d'un validateur ?
+
+
+classe jaxx.runtime.validator.swing.SwingValidator
+**************************************************
+
+Il s'agit de la classe principale d'encapsulation d'un validateur XWorks 2.
+
+Le principe est simple : le validateur écoute les modifications sur le bean associé et revalide le bean à chaque modification. La validation met à jour la liste des erreurs asociées.
+
+On se base sur les PropertyChangeListener pour écouter les modification des beans. Il faut donc que les beans supporte ces listeners.
+
+Pour les entités de ToPIA, il suffit de positionner un contexte (topia) au bean pour profiter des listeners liés.
+
+Pour les DTO de ToPIA, les générateurs ont été modifiés pour gérer ce support.
+
+Les méthodes à retenir sont :
+
+ * *setBean* pour affecter un bean au validateur (pour déasactiver passer null). Lors de la désactivation d'un bean, les erreurs associés sont retirées de la liste des erreurs.
+
+ * *setContextName* pour affecter un nouveau nom de context de validation (par défaut on utilise pas de context de validation).
+
+ * *validate* pour lancer une validation sur le bean liée (ne sera opérant uniquement si un bean est liée et qu'une liste d'erreur est liée).
+
+ * *isValid* pour connaitre l'état du validateur à un moment donné.
+
+Normalement la méthode *validate* ne devrait pas être appelée directement. : elle est automatiquement invoquée lorsqu'une propriété du bean est modifiée.
+
+classe jaxx.runtime.validator.swing.SwingValidatorErrorModel
+************************************************************
+
+Modélisation d'une erreur renvoyé par le validateur, on conserve ici :
+
+ * le validateur qui a provoqué l'erreur
+
+ * la propriété du bean en faute
+
+ * le composent graphique d'édtion de la propriété
+
+classe jaxx.runtime.validator.swing.SwingValidatorErrorListModel
+****************************************************************
+
+Le modèle de la liste des erreurs renvoyées par le validateur. Il s'agit d'une extension d'un *javax.swing.DefaultListModel* qui permet de gérer une liste d'erreurs provenant de plusieurs validateurs en même temps.
+
+classe jaxx.runtime.validator.swing.SwingValidatorErrorListMouseListener
+************************************************************************
+
+Un listener écoutant les double clics sur une liste d'erreurs et qui donne le focus au composent graphique d'édition associée à la propriété dont l'erreur est sélectionné.
+
+
+Les conversions
+===============
+
+Pour l'édition de proriétés qui ne sont pas des chaines de caractères, des erreurs de conversions peuvent survenir (conversion de la valeur de l'édtieur graphique vers le bean), avant que l'on utilise
+réellement la mécanique de la validation.
+
+Pour palier à ce problème on a intégré la gestion des erreurs de conversion dans le validateur.
+Pour ce faire, il suffit de faire appel à la méthode suivante pour injecter dans un bean une propriété :
+
+ ::
+
+ jaxx.runtime.Util.convert(validator,"nomDeLaPropriété",widget.getText(),TypeDeLaProriete.class);
+
+
+On obtiendra si une erreur de conversion intervient, une erreur dont le libellé est de la forme *error.convertor.XXX*
+où XXX est nom simple en minuscule du type de la propruité. (par exemple : *error.convertor.integer*).
+
+
+
+
Property changes on: jaxx/trunk/src/site/rst/BeanValidator.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/src/site/rst/Core.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/Core.rst)
===================================================================
--- jaxx/trunk/src/site/rst/Core.rst (rev 0)
+++ jaxx/trunk/src/site/rst/Core.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,154 @@
+++++
+Core
+++++
+
+.. contents::
+
+Nouvelles fonctionnalités apportées sur les classes générées.
+
+---------
+Interface
+---------
+
+Présentation
+============
+
+Ajout de contrats sur le code généré dans JAXX.
+
+Mécanisme
+=========
+
+Le compilateur JAXX génère des classes à partir de fichiers JAXX mais n'est pas capable d'ajouter des contrats sur
+les objets générés, donc interdit en quelque sorte la programmation par contrat.
+
+Pour palier à cette limitation, on a ajouté un attribut spécial *implements*.
+
+Cette attribut ne doit être placé que sur le tag racine d'un fichier JAXX et son contenu est le nom qualifié d'un ou
+plusieurs contrats séparaés par des virgules.
+
+::
+
+ <JPanel implements='java.lang.Comparable'>
+
+ <script>public int compareTo(JPanel o) { return getName().compareTo(o.getName()); }</script>
+
+ </JPanel>
+
+La classe générée aura bien le contrat *java.lang.Comparable*.
+
+--------
+Abstract
+--------
+
+Présentation
+============
+
+Ajout de la possibilité de générer des classes abstraites.
+
+Mécanisme
+=========
+
+Ajout d'un attribut *abstract*.
+
+::
+
+ <JPanel abstract='true'/>
+
+La classe générée sera abstraite.
+
+--------
+Generics
+--------
+
+Présentation
+============
+
+Ajout de possible de type generique sur les inferfaces et superclass.
+
+Mécanisme
+=========
+
+Ajout d'un attribut genericType et superGenericType.
+
+Exemple : (fichier Parent.jaxx)
+::
+
+ <JPanel genericType='E'
+ implements='java.lang.Comparable<E>'
+ abstract='true' />
+
+La classe générée sera de la forme :
+
+::
+
+ public abstract Parent<E> implements java.lang.Comparable<E> {
+ ...
+ }
+
+Pour surcharger une telle classe (fichier Son.jaxx) :
+
+::
+
+ <Parent superGenericType='String'
+ abstract='true'/>
+
+La classe générée sera de la forme :
+
+::
+
+ public Son extends Parent<String> {
+ ...
+ }
+
+
+TODO
+====
+
+Permettre l'utilisation des types génériques dans les scripts.
+
+--------
+JavaBean
+--------
+
+Présentation
+============
+
+Ajout du support complêt des javaBean dans JAXX.
+
+Mécanisme
+=========
+
+Il est possible dans JAXX de rajouter des objets quelconques via leur nom qualifié de classe :
+
+::
+
+ <JPanel>
+ <java.lang.Boolean id='myState' constructorParams='true'/>
+ <JLabel text='text' visible='{isMySate()}'/>
+ </JPanel>
+
+Avant l'ajout de la fonctionnalité, le code généré possèdait :
+
+ * une propriété en lecture seul nommé *myState*.
+
+Aucun support javaBean n'était présent et le databinding sur la propriété *visible* du label n'est pas créé. Cela veut
+dire que le label sera initialisé avec la valeur initiale du boolean et c'est tout...
+
+Avec l'ajout du support javaBean, on peut maintenant faire ces bindings, pour ce faire il suffit d'ajouter un attribut
+*javaBean* sur l'objet :
+
+::
+
+ <JPanel>
+ <java.lang.Boolean id='myState' javaBean='true'/>
+ <JLabel text='text' visible='{isMySate()}'/>
+ </JPanel>
+
+On aura donc en plus :
+
+ * un mutateur sur la propriété *myState* qui déclanchera l'envoie d'un *PropertyChange* sur la propriété lors de modification de valeur.
+
+Ainsi le compilateur JAXX sera capable d'enregistrer un novueau dataBindig sur la propriété *visible* du label et la
+modification de l'état *myState* sera automatiquement répercuté sur la propriété.
+
+Note: le contenu de l'attribut *javaBean* est l'initialiteur de la propriété.
\ No newline at end of file
Property changes on: jaxx/trunk/src/site/rst/Core.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/src/site/rst/I18n.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/I18n.rst)
===================================================================
--- jaxx/trunk/src/site/rst/I18n.rst (rev 0)
+++ jaxx/trunk/src/site/rst/I18n.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,56 @@
+----
+I18n
+----
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout du support i18n dans JAXX.
+
+On utilise la système i18n développé dans la librairie des lutins (*lutinlib*).
+
+Configuration
+=============
+
+Une option a été ajoutée dans le plugin maven de JAXX : *i18nable* pour permettre ou non l'utilisation de ce système.
+
+Par défaut, l'option est active (donc aucune configuration supplémentaire n'est nécessaire pour utiliser i18n dans JAXX).
+
+
+Fonctionnement
+==============
+
+Le fonctionnement est simple : lors de la compilation JAXX, lorsque l'on rencontre certains attributs on encapsule la
+valeur de l'attribution par un appel à la méthode
+
+::
+
+ org.codelutin.i18n.I18n._(String)
+
+
+La liste des attributs en question sont les suivants :
+
+ - title
+ - text
+ - toolTipText
+
+
+Ensuite l'utilisation du *parserJava* du plugin i18n permet la détection des clefs i18n.
+
+
+Pourquoi ne plus utiliser l'ancien parserJaxx du plugin i18n
+============================================================
+
+Un parseur avait été développé initialement pour détecter dans les fichiers JAXX (*parserJaxx*), les appels à la méthode de traduction
+i18n dans les attributs.
+
+Ce parseur n'est plus d'actualité car on ne doit plus avoir d'appel explicite à cette méthode dans les fichiers JAXX.
+
+De plus, même sans avoir mis en place le mécanisme i18n dans JAXX, ce parseur n'était plus d'actualité : il se base
+sur une liste prédéfinie d'attributs xml à scanner pour détecter des appels i18n; ce qui n'était pas acceptable à terme
+car si on ajoute un nouveau composent dans JAXX, le plugin i18n n'est pas capable de détecter les nouvelles clefs.
+
+Donc on préconise l'utilisation du *parserJava* du plugin i18n qui lui est capable de détecter tous les appels i18n.
Copied: jaxx/trunk/src/site/rst/JAXXContext.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/JAXXContext.rst)
===================================================================
--- jaxx/trunk/src/site/rst/JAXXContext.rst (rev 0)
+++ jaxx/trunk/src/site/rst/JAXXContext.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,161 @@
+-----------
+JAXXContext
+-----------
+
+.. contents::
+
+
+Présentation
+============
+
+Ajout d'un context applicatif dans JAXX.
+
+Le besoin initial de ce développement est de pouvoir facilement intégrer un context applicatif dans JAXX et de pouvoir
+l'utiliser dans les fichiers JAXX pour injecter par exemple des données dans les widgets.
+
+jaxx.runtime.JAXXContext
+========================
+
+Il s'agit du contrat de base du context applicatif.
+
+Les entrées dans le context
+***************************
+
+Chaque donnée utilisable dans le context est caractérisée par deux propriétés :
+
+ * la type de l'objet
+
+ * un nom (facultatif) associé à la donnée
+
+Le type de l'objet correspondant en fait à la classe de la donnée.
+
+Le nom qui est facultatif permet de pouvoir distinguer plusieurs données d'un même type dans le context. Si le nom
+n'est pas utilisé pour caractériser une données on fixera alors sa valeur à *null*.
+
+Afin de pouvoir caractériser les entrées dans le context, une classe a été définie *jaxx.runtime.JAXXContextEntryDef*.
+
+Les méthodes de lecture
+***********************
+
+On a définit deux méthodes de lecture de données dans le context :
+
+ * *getContextValue(Class)* récupère la donnée *non nommée* dont le type correspond à celui passé.
+
+ * *getContextValue(Class,String)* récupère la donnée nommé dont le type correspond à celui passé.
+
+Les méthodes d'écriture
+***********************
+
+On a définit quatre méthodes d'écriture de données dans le context :
+
+ * *setContextValue(Object)* enregistre dans le context la donnée *non nommée*.
+
+ * *setContextValue(Object,String)* enregistre dans le context la donnée *nommée*.
+
+ * *removeContextValue(Class)* supprime du context, la donnée *non nommée* dont le type est passé.
+
+ * *removeContextValue(Class, String)* supprime du context, la donnée *nommée* dont le type est passé.
+
+Afin de pouvoir assurer une cohérence dans le context, chaque injection de donnée, sera toujours précédée par une
+suppression d'un éventuellement ancienne valeur qui aurait la même définition d'entrée.
+
+L'héritage
+**********
+
+Il est possible d'avoir une hériarchie de context qui s'enchaînent. Ce mécanisme a été mis en place pour répondre à un
+besion précis : chaque fichier JAXX donne lieu à une nouvelle classe qui possède son propre context.
+
+On peut avoir des fichiers JAXX qui utilisent d'autres fichiers JAXX, il faut donc être capable de lier le context du
+composent parent avec ses fils.
+
+La mise en place de l'héritage est transparente pour l'utilisateur : aucune méthode supplémentaire n'est requise.
+
+Les implantations de context
+============================
+
+jaxx.runtime.DefaultJAXXContext
+*******************************
+
+Il s'agit de l'implantation par défaut utilisée par les objects *JAXXObject* (objets générés).
+
+A noter que pour les opérations d'injection ou de suppression, on effectuera les opérations sur le context qui contient
+réellement la donnée, ce qui est important pour conserver la cohérence des contexts dans les contexts chaînés.
+
+Pour traiter le context parent, aucune méthode publique supplémentaire n'a été rajoutée, il suffit d'injecter un objet
+de type *JAXXContext* *non nommé* qui le context courant qui sera détecté comme une entrée de type context.
+
+Cette entrée spéciale ne sera pas stockée avec les autres entrées afin d'optimiser les algorithmes d'injection et de
+restitution.
+
+jaxx.runtime.JAXXInitialContext
+*******************************
+
+On a implanté un second type de context qui lui peut servir à l'initialisation des JAXXObject.
+
+Ce second type de context ajoute des méthodes pour préparer le context avant l'instanciation des JAXXObject.
+
+Ce context admet certaine limitation (pas de suppression dans le context), et apporte trois nouvelles méthodes :
+
+ * add(Object) : injecte dans le context une entrée non nommée et retourne l'instance du context.
+
+ * add(String,Object) : injecte dans le context une entrée nommé et retourne l'instance du context.
+
+ * to(JAXXContext) : injecte dans le context passé toutes les entrée du context.
+
+Les méthodes *add* peuvent être chaînées comme dans l'exemple suivant :
+
+::
+
+ JAXXInitialContext context = new JAXXInitialContext().add("string").add(0).add("currentDate",new Date());
+
+
+Intégration dans les JAXXObject
+===============================
+
+Le traitement d'un fichier JAXX donne lieu à une classe qui possède le contrat *jaxx.runtime.JAXXObject*.
+
+Ce contrat hérite donc du contrat *JAXXContext* (afin de pouvoir l'utiliser de manière transparente dans les fichiers JAXX).
+
+Afin de simplifier la génération et les évolutions du context indépendemment des évolutions des JAXXObject, on utilise
+un pattern de délégation au sein des object générés.
+
+Paramétrage de l'implantation du context
+****************************************
+
+Une propriété a été rajoutée sur le plugin JAXX, afin de pouvoir préciser l'implantation de context à utiliser :
+
+::
+
+ jaxx.jaxxContextImplementorClass
+
+Il s'agit du nom qualifié de la classe d'implantation à utiliser.
+
+Par défaut, si rien n'est renseigné, on utilisera un *jaxx.runtime.DefaultJAXXContext*.
+
+
+Initialisation d'un JAXXObject
+******************************
+
+Un nouveau constructeur a été ajouté dans les JAXXObjet générés afin de pouvoir facilement initialisé un tel objet à
+partir d'un context parent, son unique paramètre est le context parent. Ce constructeur est capable de différencer le
+type de context passé :
+
+ * s'il s'agit d'un *JAXXInitialContext*, on recopie alors dans le context réel de l'objet toutes les entrées du context passé.
+
+ * sinon le context passé est simplement injecté dans le context de l'objet (et donc sera utilisé comme le context parent de celui de l'objet).
+
+Voici un exemple d'initialisation d'un JAXXObject :
+
+::
+
+ java.util.Date currentDate = new java.util.Date();
+ JAXXInitialContext context = new JAXXInitialContext().add("string").add(0).add("currentDate",currentDate);
+ JAXXObject ui = new MyUI(context);
+
+ assert "string".equals(myUI.getContextValue(String.class));
+ assert 0 == myUI.getContextValue(Integer.class);
+ assert currentDate.equals(myUI.getContextValue(java.util.Date.class,"currentDate"));
+
+A noter, que l'initialisation du context d'un *JAXXObject* sera toujours effectuée avant la méthode *$initialize* générée
+par le compilateur JAXX, ce qui permet de pouvoir utiliser le context pour l'initialisation des widgets dans les fichiers JAXX.
+
Property changes on: jaxx/trunk/src/site/rst/JAXXContext.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/src/site/rst/NavigationTreeModel.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/NavigationTreeModel.rst)
===================================================================
--- jaxx/trunk/src/site/rst/NavigationTreeModel.rst (rev 0)
+++ jaxx/trunk/src/site/rst/NavigationTreeModel.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,169 @@
+-------------------
+NavigationTreeModel
+-------------------
+
+.. contents::
+
+**WARNING : documentation non à jour...**
+
+Présentation
+============
+
+Ajout d'un modèle d'arbre de navigation.
+
+Le but de cette fonctionnalité est de pouvoir créer un arbre de navigation lié au context de JAXX, de définir des UI
+rattachés à chaque noeud.
+
+Le développement est effectué dans le paquetage *jaxx.runtime.swing.navigation*.
+
+jaxx.runtime.swing.navigation.NavigationTreeModel
+=================================================
+
+Il s'agit du modèle de l'arbre utilisé, c'est une extension d'un *javax.swing.tree.DefaultTreeModel*.
+
+Les noeuds présents dans ce modèle sont aussi typés en *jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode*.
+
+L'idée principale est de pouvoir associer à un noeud précis un chemin depuis la racine, ce que l'on appele *chemin de navigation*.
+
+Pour obtenir le chemin de navigation d'un noeud donné, on récupère l'enmseble des neoud depuis la racine vers ce noeud
+et les concatène en suffixant par le caractère séparateur défini.
+
+Définition d'un noeud
+=====================
+
+Le noeud (*jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode*) est une extension d'un *javax.swing.tree.DefaultMutableTreeNode*.
+
+Il apporte les nouvelles propriétés suivantes :
+
+ * *navigationPAth* : nom de chemin de navigation de ce noeud.
+
+ * *jaxxClass* : nom qualifié de la classe d'ui associé à ce noeud (doit être obligatoirement un *JAXXObject*)
+
+ * *jaxxActionClass* : nom qualifié de la classe d'handler d'ui associé à ce noeud (doit être obligatoirement un *JAXXAction*).
+
+ * *jaxxContextEntryDef* : définition de l'entrée dans le context JAXX associé à ce noeud.
+
+ * *jaxxContextEntryJXPath* : définition d'une expression JXPath à appliquer sur le bean associé au noeud.
+
+
+Retrouver un noeud à partir du chemin de navigation
+***************************************************
+
+Il est possible en connaissant le chemin de navigation d'un noued de récupérer le noeud dans l'arbre via la méthode
+
+::
+
+ model.findNode("chemin.de.navigation")
+
+Trouver la valeur associée dans le context JAXX à partir du chemin de navigation
+********************************************************************************
+
+Il est possible en connaissant le chemin de navigation d'un noued de récupérer la valeur associée dans le context JAXX.
+
+::
+
+ model.getJAXXContextValue(myJAXXContext, "chemin.de.navigation")* .
+
+L'algrotihme est le suivant :
+
+ * récupération du noeud associé au chemin de navigation
+
+ * recherche du premier noeud (dans les noeuds qui remontent vers la racine de l'arbre) dont la propriété *jaxxContextEntry* est non nulle, il s'agit du point d'entré dans le context JAXX.
+
+ * redescendre à partir de ce noeud vers le noeud d'origine (si ce noeud était différent) et en descendant conjointement dans l'objet du context JAXX :
+
+ - on utilise l'expression JXPath pour obtenir l'objet associé au noeud
+
+Exemple :
+
+::
+
+ "$root" + <-- la racine de l'abre
+ |
+ + "string" <-- attaché au context JAXX <java.lang.String,"string">
+ |
+ + "liste" + <-- attaché au context JAXX <java.util.List.class,"liste">
+ | |
+ | + "0" <-- le premier élément de la liste
+ | |
+ | + "1" <-- le second élément de la liste
+ | |
+ | + "2" <-- le troisième élément de la liste
+ |
+ + "locale" + <-- attaché au context JAXX <java.util.Locale>
+ |
+ + country
+ |
+ + language
+
+ // preparation du context
+ java.util.List myList = java.util.Arrays.asList("one","two","three");
+ java.util.Locale myLocale = java.util.Locale.FRENCH;
+ context.setContextValue(myList, "liste");
+ context.setContextValue("stringValue","string");
+ context.setContextValue(myLocale);
+
+
+ // récupération des valeurs dans le context à partir de chemin de navigation
+ assert model.getJAXXContextValue(context, "$root") == null;
+ assert model.getJAXXContextValue(context, "$root.string") == "stringValue";
+ assert model.getJAXXContextValue(context, "$root.liste") == myList;
+ assert model.getJAXXContextValue(context, "$root.liste.0") == "one";
+ assert model.getJAXXContextValue(context, "$root.liste.1") == "two";
+ assert model.getJAXXContextValue(context, "$root.liste.2") == "three";
+ assert model.getJAXXContextValue(context, "$root.locale") == myLocale;
+ assert model.getJAXXContextValue(context, "$root.locale.country") == myLocale.getCountry();
+ assert model.getJAXXContextValue(context, "$root.locale.language") == myLocale.getLanguage();
+
+TODO mettre à jour cet exemple suite à l'utilisation de JXPath pour naviguer dans les objets.
+
+A noter qu'une seconde méthode de récupération de valeur du context JAXX est disponible pour pouvoir récupérer cette
+valeur en connaissant le noeud :
+
+::
+
+ model.getJAXXContextValue(context, myNode);
+
+jaxx.runtime.swing.navigation.NavigationTreeSelectionAdapter
+============================================================
+
+Il s'agit d'un listener sur la sélection d'un noeud dans l'arbre de navigation basé sur notre modèle de navigation. Il
+étend *javax.swing.event.TreeSelectionListener*.
+
+Ce listener contient la gestion de passage d'un noeud à un autre avec interaction avec le context JAXX et affichage automatique de l'ui associé au noeud sélectionné.
+
+**Attention : la mécanique ne fonctionne que pour un arbre à selection unique.**
+
+Algorithme
+**********
+
+Voici l'algorithme utilisé lors de la sélection d'un nouveau noeud :
+
+ * *closeUI* : tentative de fermeture de l'ui lié au noeud précédemment selectionné, si cela n'aboutit pas on retourne sur le noeud précédent.
+
+ * *attachBeanFromNodeToContext* : injection dans le context JAXX de la valeur associée au nouveau noeud
+
+ * *createUI* : création de la nouvelle ui (si elle n'existe pas)
+
+ * *openUI* : ouverture de la nouvelle ui
+
+Si une erreur survient lors de ces opérations, on entre dans la méthode *goBackToPreviousNode* qui est abstraite et permet de notifier les erreur de retourner au noeud précdent.
+
+jaxx.runtime.swing.navigation.NavigationTreeSelectionAdapterWithCardLayout
+**************************************************************************
+
+Il s'agit d'une implantation du listener précédent qui suppose que les uis associées aux noeuds sont affichées dans un
+unique container en utilisant le layout *jaxx.runtime.swing.CardLayout2*.
+
+La contrainte de chaque ui sera extactement le chemin de navigation du noeud associé.
+
+Il possède deux méthodes abstraites :
+
+ * *getContentContainer* : qui indique le container d'ui.
+
+ * *getContentLayout* : qui indique le layout utilisé.
+
+Pour pouvoir utilisé cet *adapter*, il vous suffit de définir la méthode suivante (en plus des deux méthodes abstraites) :
+
+ * *goBackToPreviousNode* : comment gérer les erreurs et retourner au noeud précedent.
+
Property changes on: jaxx/trunk/src/site/rst/NavigationTreeModel.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/src/site/rst/Todo.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/Todo.rst)
===================================================================
--- jaxx/trunk/src/site/rst/Todo.rst (rev 0)
+++ jaxx/trunk/src/site/rst/Todo.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,8 @@
+====
+TODO
+====
+
+ - mettre à jour les documentations techniques et utilisateur.
+
+ - enrichir les démos.
+
\ No newline at end of file
Property changes on: jaxx/trunk/src/site/rst/Todo.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: jaxx/trunk/src/site/rst/index.rst (from rev 1307, jaxx/trunk/src/site/fr/rst/index.rst)
===================================================================
--- jaxx/trunk/src/site/rst/index.rst (rev 0)
+++ jaxx/trunk/src/site/rst/index.rst 2009-04-20 15:49:30 UTC (rev 1343)
@@ -0,0 +1,46 @@
+jaxx-core
+=========
+
+.. contents::
+
+
+Présentation
+------------
+
+Le projet Jaxx.
+
+Depuis la version 1.0, et en prévision de nouveaux générateurs s'appuyant sur Jaxx,on a revu l'architecture du projet.
+
+Désormais, une séparation a été effectuée entre le code de compilation et le code d'exécution.
+
+Tout le code de compilation est en dépendance du plugin maven et vous ne devriez pas à avoir à vous en servir.
+
+Ce dont vous avez besoin dans vos dépendances sont uniquement les modules jaxx-runtime-xxx.
+
+TODO A finir la présentation de la nouvelle architecture (dans la version 1.2).
+
+**Veuillez consulter la JavaDoc pour de plus ample détails sur les différentes
+librairies.**
+
+Nouvelles fonctionnalités
+-------------------------
+
+ * Core_
+
+ * I18n_
+
+ * JAXXContext_
+
+ * BeanValidator_
+
+ * NavigationTreeModel_
+
+.. _Core: Core.html
+
+.. _I18n: I18n.html
+
+.. _JAXXContext: JAXXContext.html
+
+.. _BeanValidator: BeanValidator.html
+
+.. _NavigationTreeModel: NavigationTreeModel.html
Property changes on: jaxx/trunk/src/site/rst/index.rst
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: jaxx/trunk/src/site/site.xml
===================================================================
--- jaxx/trunk/src/site/site.xml 2009-04-20 15:48:49 UTC (rev 1342)
+++ jaxx/trunk/src/site/site.xml 2009-04-20 15:49:30 UTC (rev 1343)
@@ -34,6 +34,7 @@
<item name="maven-jaxx-plugin" href="http://buix.labs.libre-entreprise.org/jaxx/maven-jaxx-plugin"/>
<item name="Labs" href="http://labs.libre-entreprise.org/"/>
<item name="${project.organization.name}" href="${project.organization.url}"/>
+ <item name="original JAXX" href="http://buix.labs.libre-entreprise.org/original-jaxx"/>
</links>
<menu ref="parent"/>
1
0
[Buix-commits] r1342 - in jaxx/trunk: jaxx-compiler-api/src/site jaxx-compiler-swing/src/site jaxx-compiler-validator/src/site jaxx-example/src/site jaxx-runtime-api/src/site jaxx-runtime-swing/src/site jaxx-runtime-validator/src/site jaxx-swing-action/src/site maven-jaxx-plugin/src/site src/site
by tchemit@users.labs.libre-entreprise.org 20 Apr '09
by tchemit@users.labs.libre-entreprise.org 20 Apr '09
20 Apr '09
Author: tchemit
Date: 2009-04-20 15:48:49 +0000 (Mon, 20 Apr 2009)
New Revision: 1342
Removed:
jaxx/trunk/jaxx-compiler-api/src/site/fr/
jaxx/trunk/jaxx-compiler-swing/src/site/fr/
jaxx/trunk/jaxx-compiler-validator/src/site/fr/
jaxx/trunk/jaxx-example/src/site/fr/
jaxx/trunk/jaxx-runtime-api/src/site/fr/
jaxx/trunk/jaxx-runtime-swing/src/site/fr/
jaxx/trunk/jaxx-runtime-validator/src/site/fr/
jaxx/trunk/jaxx-swing-action/src/site/fr/
jaxx/trunk/maven-jaxx-plugin/src/site/fr/
jaxx/trunk/src/site/fr/
Log:
bumps versions
use doxia-module-jrst
1
0
[Buix-commits] r1341 - in guix/trunk: . guix-compiler/src/main/java/org guix-compiler/src/test/java/org guix-maven-plugin/src/main/java/org guix-maven-plugin/src/test/java/org guix-test/src/main/java/org guix-test/src/test/java/org src/main/java/org
by kmorin@users.labs.libre-entreprise.org 20 Apr '09
by kmorin@users.labs.libre-entreprise.org 20 Apr '09
20 Apr '09
Author: kmorin
Date: 2009-04-20 12:49:24 +0000 (Mon, 20 Apr 2009)
New Revision: 1341
Removed:
guix/trunk/guik-parser/
guix/trunk/guix-compiler/src/main/java/org/codelutin/
guix/trunk/guix-compiler/src/test/java/org/codelutin/
guix/trunk/guix-maven-plugin/src/main/java/org/codelutin/
guix/trunk/guix-maven-plugin/src/test/java/org/codelutin/
guix/trunk/guix-test/src/main/java/org/codelutin/
guix/trunk/guix-test/src/test/java/org/codelutin/
guix/trunk/src/main/java/org/codelutin/
Log:
Suppression des dossiers vides et inutiles.
1
0
20 Apr '09
Author: kmorin
Date: 2009-04-20 12:36:50 +0000 (Mon, 20 Apr 2009)
New Revision: 1340
Modified:
guix/trunk/doc/guix.zargo
Log:
Modification du nom ModelObject en GuixModelObject
Ajout du champ javadoc dans le GuixModelObject
Modified: guix/trunk/doc/guix.zargo
===================================================================
(Binary files differ)
1
0
20 Apr '09
Author: kmorin
Date: 2009-04-20 12:33:41 +0000 (Mon, 20 Apr 2009)
New Revision: 1339
Modified:
guix/trunk/guix-test/pom.xml
Log:
Corrections dans le pom
Modified: guix/trunk/guix-test/pom.xml
===================================================================
--- guix/trunk/guix-test/pom.xml 2009-04-20 12:33:09 UTC (rev 1338)
+++ guix/trunk/guix-test/pom.xml 2009-04-20 12:33:41 UTC (rev 1339)
@@ -14,14 +14,6 @@
<artifactId>guix-test</artifactId>
- <dependencies>
- <dependency>
- <groupId>xpp3</groupId>
- <artifactId>xpp3</artifactId>
- <version>1.1.3.3</version>
- </dependency>
- </dependencies>
-
<!-- ************************************************************* -->
<!-- *** Project Information ************************************* -->
<!-- ************************************************************* -->
@@ -48,7 +40,7 @@
<plugins>
<plugin>
- <groupId>org.codelutin.guix</groupId>
+ <groupId>org.nuiton.guix</groupId>
<artifactId>guix-maven-plugin</artifactId>
<version>${project.version}</version>
<executions>
1
0
[Buix-commits] r1338 - in guix/trunk/guix-compiler: . src/main/java/org/nuiton/guix src/main/java/org/nuiton/guix/compiler src/main/java/org/nuiton/guix/model src/main/java/org/nuiton/guix/tags
by kmorin@users.labs.libre-entreprise.org 20 Apr '09
by kmorin@users.labs.libre-entreprise.org 20 Apr '09
20 Apr '09
Author: kmorin
Date: 2009-04-20 12:33:09 +0000 (Mon, 20 Apr 2009)
New Revision: 1338
Added:
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java
Modified:
guix/trunk/guix-compiler/pom.xml
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java
Log:
Mise a jour de la version de XPP
Corrections du parcours des fichiers guix
Modified: guix/trunk/guix-compiler/pom.xml
===================================================================
--- guix/trunk/guix-compiler/pom.xml 2009-04-18 08:45:28 UTC (rev 1337)
+++ guix/trunk/guix-compiler/pom.xml 2009-04-20 12:33:09 UTC (rev 1338)
@@ -18,7 +18,7 @@
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3</artifactId>
- <version>1.1.3.3</version>
+ <version>1.1.4c</version>
</dependency>
</dependencies>
Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-04-18 08:45:28 UTC (rev 1337)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-04-20 12:33:09 UTC (rev 1338)
@@ -4,9 +4,10 @@
*/
package org.nuiton.guix;
+import java.io.IOException;
import org.nuiton.guix.compiler.GuixCompiler;
-import org.codelutin.guix.compiler.*;
import java.io.File;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -16,7 +17,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.guix.model.ClassDescriptor;
-import org.codelutin.guix.model.GuixModelObject;
+import org.nuiton.guix.model.GuixModelObject;
+import org.xmlpull.v1.XmlPullParserFactory;
+import org.xmlpull.v1.XmlSerializer;
/**
* Launch Guix files compilation
@@ -26,8 +29,8 @@
public class GuixLauncher {
/** log */
- /* protected static final Log log =
- LogFactory.getLog(GuixLauncher.class);*/
+ /* protected static final Log log =
+ LogFactory.getLog(GuixLauncher.class);*/
/** original list of files to compile */
protected final File[] files;
/** original list of classes to compile */
@@ -88,56 +91,65 @@
File file = filesIterator.next();
String className = classNamesIterator.next();
/*if (log.isDebugEnabled()) {
- log.debug("compile first pass for " + className);
+ log.debug("compile first pass for " + className);
}*/
if (!compiledFiles.contains(file)) {
compiled = true;
compiledFiles.add(file);
- }
- if (compilers.containsKey(className)) {
- //throw new CompilerException("Internal error: " + className + " is already being compiled, attempting to compile it again");
- }
- File destDir = targetDirectory;
- if (destDir != null) {
- int dotPos = className.lastIndexOf(".");
- if (dotPos != -1) {
- destDir = new File(destDir, className.substring(0, dotPos).replace('.', File.separatorChar));
+ File destDir = targetDirectory;
+ if (destDir != null) {
+ int dotPos = className.lastIndexOf(".");
+ if (dotPos != -1) {
+ destDir = new File(destDir, className.substring(0, dotPos).replace('.', File.separatorChar));
+ }
+ if (!destDir.exists() && !destDir.mkdirs()) {
+ //log.warn("couldn't create directory " + destDir);
+ System.out.println("couldn't create directory " + destDir);
+ continue;
+ }
+ } else {
+ //destDir = file.getParentFile();
}
- if (!destDir.exists() && !destDir.mkdirs()) {
- //log.warn("couldn't create directory " + destDir);
- System.out.println("couldn't create directory " + destDir);
- continue;
+ GuixCompiler compiler = new GuixCompiler(
+ file.getParentFile(), file, className, this);
+ //addProfileTime(compiler, currentPass.name() + "_start");
+ compilers.put(className, compiler);
+ GuixModelObject rootModelObject = compiler.compile();
+ rootModelObjects.add(rootModelObject);
+ //addProfileTime(compiler, currentPass.name() + "_end");
+ //assert !symbolTables.values().contains(compiler.getSymbolTable()) : "symbolTable is already registered";
+ //symbolTables.put(file, compiler.getSymbolTable());
+ if (compiler.isFailed()) {
+ success = false;
}
- } else {
- //destDir = file.getParentFile();
- }
- GuixCompiler compiler = new GuixCompiler(
- file.getParentFile(), file, className,this);
- //addProfileTime(compiler, currentPass.name() + "_start");
- compilers.put(className, compiler);
- GuixModelObject rootModelObject = compiler.compile();
- rootModelObjects.add(rootModelObject);
- //addProfileTime(compiler, currentPass.name() + "_end");
- //assert !symbolTables.values().contains(compiler.getSymbolTable()) : "symbolTable is already registered";
- //symbolTables.put(file, compiler.getSymbolTable());
- if (compiler.isFailed()) {
- success = false;
}
- //}
}
} while (compiled);
- for(GuixModelObject mo : rootModelObjects) {
- //log.trace("class : "
- System.out.println("class : "
- + mo.getClassDescriptor().getPackageName()+ "."
- + mo.getClassDescriptor().getName()
- + " extends "
- + mo.getClassDescriptor().getSuperClass().getPackageName()
- + "." + mo.getClassDescriptor().getSuperClass().getName());
-
+ XmlPullParserFactory factory =
+ XmlPullParserFactory.newInstance(
+ System.getProperty(XmlPullParserFactory.PROPERTY_NAME),
+ null);
+
+ for (GuixModelObject mo : rootModelObjects) {
+
+ File f = new File(mo.getClassDescriptor().getName() + "ModelTree.xml");
+ if (!f.exists()) {
+ f.createNewFile();
+ }
+ System.out.println(f.getAbsolutePath());
+
+ XmlSerializer serializer = factory.newSerializer();
+
+ serializer.setOutput(new PrintWriter(f));
+ serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");
+ serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "\t");
+
+ writeModelTree(serializer, mo);
+
+ serializer.endDocument();
}
/*// pass 2
@@ -237,11 +249,45 @@
}
}
+ private void writeModelTree(XmlSerializer serializer, GuixModelObject mo) throws IOException {
+ serializer.startTag("", "Object");
+ if (mo.getId() != null && !mo.getId().equals("")) {
+ serializer.attribute("", "id", mo.getId());
+ }
+ serializer.text(mo.getJavadoc());
+ serializer.startTag("", "class");
+ serializer.startTag("", "name");
+ serializer.text(mo.getClassDescriptor().getName());
+ serializer.endTag("", "name");
+ serializer.startTag("", "package");
+ if (mo.getClassDescriptor().getPackageName() != null && !mo.getClassDescriptor().getPackageName().equals("")) {
+ serializer.text(mo.getClassDescriptor().getPackageName());
+ }
+ serializer.endTag("", "package");
+ serializer.startTag("", "script");
+ if (mo.getClassDescriptor().getScript() != null && !mo.getClassDescriptor().getScript().equals("")) {
+ serializer.text(mo.getClassDescriptor().getScript());
+ }
+ serializer.endTag("", "script");
+ serializer.startTag("", "superclass");
+ if (mo.getClassDescriptor().getSuperClass() != null) {
+ serializer.text(mo.getClassDescriptor().getSuperClass().getPackageName() + "." + mo.getClassDescriptor().getSuperClass().getName());
+ }
+ serializer.endTag("", "superclass");
+ serializer.endTag("", "class");
+
+ for (GuixModelObject child : mo.getChildren()) {
+ writeModelTree(serializer, child);
+ }
+
+
+ serializer.endTag("", "Object");
+
+ }
+
public boolean registerClassDescriptor(ClassDescriptor classDescriptor) {
int i = 0;
- while ((i < classDescriptors.size())
- && (!classDescriptors.get(i).getName().equals(classDescriptor.getName()))
- && (!classDescriptors.get(i).getPackageName().equals(classDescriptor.getPackageName()))) {
+ while ((i < classDescriptors.size()) && (!classDescriptors.get(i).getName().equals(classDescriptor.getName())) && ((classDescriptors.get(i).getPackageName() == null) || (classDescriptor.getPackageName() == null) || (!classDescriptors.get(i).getPackageName().equals(classDescriptor.getPackageName())))) {
i++;
}
//if the ClassDescriptor does not exist
@@ -250,16 +296,18 @@
return true;
}
if (classDescriptor.getScript() != null) {
- if(classDescriptors.get(i).getScript() == null)
+ if (classDescriptors.get(i).getScript() == null) {
classDescriptors.get(i).setScript(classDescriptor.getScript());
- else if (!classDescriptors.get(i).getScript().equals(classDescriptor.getScript()))
+ } else if (!classDescriptors.get(i).getScript().equals(classDescriptor.getScript())) {
return false;
+ }
}
- if(classDescriptor.getSuperClass() != null) {
- if (classDescriptors.get(i).getSuperClass() == null)
+ if (classDescriptor.getSuperClass() != null) {
+ if (classDescriptors.get(i).getSuperClass() == null) {
classDescriptors.get(i).setSuperClass(classDescriptor.getSuperClass());
- else if (!classDescriptors.get(i).getSuperClass().equals(classDescriptor.getSuperClass()))
+ } else if (!classDescriptors.get(i).getSuperClass().equals(classDescriptor.getSuperClass())) {
return false;
+ }
}
return true;
}
Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java 2009-04-18 08:45:28 UTC (rev 1337)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java 2009-04-20 12:33:09 UTC (rev 1338)
@@ -19,7 +19,6 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
-import org.xmlpull.v1.builder.XmlPullElement;
/**
* Compiles Guix files into Java classes
@@ -31,10 +30,6 @@
/** flag to detec if an error occurs while compiling jaxx file */
protected boolean failed;
/** Used for error reporting purposes,
- * so we can report the right line number. */
- protected Stack<XmlPullElement> tagsBeingCompiled =
- new Stack<XmlPullElement>();
- /** Used for error reporting purposes,
* so we can report the right source file. */
protected Stack<File> sourceFiles = new Stack<File>();
/** XML parser of src file. */
@@ -42,7 +37,7 @@
private File src;
private String outputClassName;
private GuixLauncher launchor;
-
+
/*------------------------------------------------------------------------*/
/*-- Constructor methods -------------------------------------------------*/
/*------------------------------------------------------------------------*/
@@ -82,7 +77,7 @@
String nameSpace = xpp.getNamespace();
String localName = xpp.getName();
String packageName =
- getPackageName(nameSpace, localName);
+ resolvePackageName(nameSpace, localName);
GuixModelObject root = new GuixModelObject(
xpp.getAttributeValue("", "id"), doc.toString());
@@ -94,21 +89,29 @@
root.getClassDescriptor().setSuperClass(new ClassDescriptor(
localName, packageName));
root.setAttributeDescriptors(getAttributes(xpp));
+ root.setChildren(new ArrayList<GuixModelObject>());
- while(xpp.getEventType() != XmlPullParser.START_TAG)
+ do {
xpp.nextToken();
+ } while(xpp.getEventType() != XmlPullParser.START_TAG);
+
if(xpp.getName().equals("script")) {
xpp.nextToken();
- if(xpp.getEventType() == XmlPullParser.CDSECT)
+ if(xpp.getEventType() == XmlPullParser.CDSECT) {
root.getClassDescriptor().setScript(xpp.getText());
+ }
while((xpp.getEventType() != XmlPullParser.END_TAG)
- || (!xpp.getName().equals("script")))
+ || (!xpp.getName().equals("script"))) {
xpp.nextToken();
+ }
+ do {
+ xpp.nextToken();
+ } while(xpp.getEventType() != XmlPullParser.START_TAG
+ && xpp.getEventType() != XmlPullParser.END_DOCUMENT);
}
failed = launchor.registerClassDescriptor(root.getClassDescriptor());
- xpp.nextToken();
if (xpp.getEventType() == XmlPullParser.START_TAG) {
compile(xpp,root,doc.toString());
}
@@ -123,25 +126,28 @@
/*------------------------------------------------------------------------*/
/*-- Compile methods -----------------------------------------------------*/
/*------------------------------------------------------------------------*/
- public void compile(final XmlPullParser xpp, GuixModelObject previousMO,
+ private void compile(final XmlPullParser xpp, GuixModelObject previousMO,
String javaDoc) throws IOException, XmlPullParserException {
String nameSpace = xpp.getNamespace();
String localName = xpp.getName();
- String packageName = getPackageName(nameSpace, localName);
+ String packageName = resolvePackageName(nameSpace, localName);
nameSpace = packageName + ".*";
GuixModelObject mo = new GuixModelObject(xpp.getAttributeValue("","id"),javaDoc);
mo.setParent(previousMO);
mo.setClassDescriptor(new ClassDescriptor(localName, packageName));
previousMO.getChildren().add(mo);
+ mo.setChildren(new ArrayList<GuixModelObject>());
- failed = launchor.registerClassDescriptor(mo.getClassDescriptor());
+ failed = !launchor.registerClassDescriptor(mo.getClassDescriptor());
+
if(!failed) {
GuixModelObject prev = mo;
StringBuffer doc = new StringBuffer();
do {
- xpp.next();
+ xpp.nextToken();
+
if (xpp.getEventType() == XmlPullParser.END_TAG) {
prev = prev.getParent();
}
@@ -156,7 +162,7 @@
}
}
- private String getPackageName(String nameSpace, String localName) {
+ private String resolvePackageName(String nameSpace, String localName) {
// resolve class tags into fully-qualified class name
String packageName;
if (nameSpace != null && nameSpace.endsWith("*")) {
Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java (rev 0)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/model/GuixModelObject.java 2009-04-20 12:33:09 UTC (rev 1338)
@@ -0,0 +1,75 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.guix.model;
+
+import java.util.List;
+
+/**
+ *
+ * @author morin
+ */
+public class GuixModelObject {
+
+ private String id;
+ private GuixModelObject parent;
+ private List<GuixModelObject> children;
+ private ClassDescriptor classDescriptor;
+ private List<AttributeDescriptor> attributeDescriptors;
+ private String javadoc;
+
+ public GuixModelObject(String id, String javadoc) {
+ this.id = id;
+ this.javadoc = javadoc;
+ }
+
+ public List<AttributeDescriptor> getAttributeDescriptors() {
+ return attributeDescriptors;
+ }
+
+ public void setAttributeDescriptors(List<AttributeDescriptor> attributeDescriptors) {
+ this.attributeDescriptors = attributeDescriptors;
+ }
+
+ public List<GuixModelObject> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<GuixModelObject> children) {
+ this.children = children;
+ }
+
+ public ClassDescriptor getClassDescriptor() {
+ return classDescriptor;
+ }
+
+ public void setClassDescriptor(ClassDescriptor classDescriptor) {
+ this.classDescriptor = classDescriptor;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public GuixModelObject getParent() {
+ return parent;
+ }
+
+ public void setParent(GuixModelObject parent) {
+ this.parent = parent;
+ }
+
+ public String getJavadoc() {
+ return javadoc;
+ }
+
+ public void setJavadoc(String javadoc) {
+ this.javadoc = javadoc;
+ }
+}
Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java 2009-04-18 08:45:28 UTC (rev 1337)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/tags/TagManager.java 2009-04-20 12:33:09 UTC (rev 1338)
@@ -4,6 +4,8 @@
*/
package org.nuiton.guix.tags;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -381,9 +383,17 @@
}
}*/
- if (result != null && !result.equals(originalName))
- result = resolveClassName(result); // check for aliases against the new name as well
+ //if (result != null && !result.equals(originalName))
+ //result = resolveClassName(result); // check for aliases against the new name as well
+ Class clazz;
+ try {
+ clazz = Class.forName(name);
+ result = clazz.getCanonicalName();
+ } catch (ClassNotFoundException ex) {
+ result = null;
+ }
+
return result;
}
1
0
[Buix-commits] r1337 - jaxx/trunk/jaxx-runtime-validator-swing/src/site
by tchemit@users.labs.libre-entreprise.org 18 Apr '09
by tchemit@users.labs.libre-entreprise.org 18 Apr '09
18 Apr '09
Author: tchemit
Date: 2009-04-18 08:45:28 +0000 (Sat, 18 Apr 2009)
New Revision: 1337
Removed:
jaxx/trunk/jaxx-runtime-validator-swing/src/site/fr/
Log:
pas de site dans les modules
1
0
[Buix-commits] r1336 - in guix/trunk: . src/main/java/org src/main/java/org/nuiton src/test/java/org src/test/java/org/nuiton
by kmorin@users.labs.libre-entreprise.org 17 Apr '09
by kmorin@users.labs.libre-entreprise.org 17 Apr '09
17 Apr '09
Author: kmorin
Date: 2009-04-17 15:45:46 +0000 (Fri, 17 Apr 2009)
New Revision: 1336
Added:
guix/trunk/src/main/java/org/nuiton/
guix/trunk/src/main/java/org/nuiton/guix/
guix/trunk/src/test/java/org/nuiton/
guix/trunk/src/test/java/org/nuiton/guix/
Modified:
guix/trunk/pom.xml
Log:
Modification des packages en org.nuiton au lieu de org.codelutin
Modified: guix/trunk/pom.xml
===================================================================
--- guix/trunk/pom.xml 2009-04-17 15:45:31 UTC (rev 1335)
+++ guix/trunk/pom.xml 2009-04-17 15:45:46 UTC (rev 1336)
@@ -13,14 +13,14 @@
<version>3.4</version>
</parent>
- <groupId>org.codelutin.guix</groupId>
+ <groupId>org.nuiton.guix</groupId>
<artifactId>guix</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>guix-compiler</module>
<module>guix-maven-plugin</module>
- <module>guix-test</module>
+ <module>guix-test</module>
</modules>
<dependencies>
1
0
[Buix-commits] r1335 - in guix/trunk/guix-test: . src/main/java/org src/main/java/org/codelutin/guix src/main/java/org/nuiton src/main/java/org/nuiton/guix src/test/java/org src/test/java/org/nuiton
by kmorin@users.labs.libre-entreprise.org 17 Apr '09
by kmorin@users.labs.libre-entreprise.org 17 Apr '09
17 Apr '09
Author: kmorin
Date: 2009-04-17 15:45:31 +0000 (Fri, 17 Apr 2009)
New Revision: 1335
Added:
guix/trunk/guix-test/src/main/java/org/nuiton/
guix/trunk/guix-test/src/main/java/org/nuiton/guix/
guix/trunk/guix-test/src/main/java/org/nuiton/guix/App.java
guix/trunk/guix-test/src/test/java/org/nuiton/
guix/trunk/guix-test/src/test/java/org/nuiton/guix/
Removed:
guix/trunk/guix-test/src/main/java/org/codelutin/guix/App.java
Modified:
guix/trunk/guix-test/pom.xml
Log:
Modification des packages en org.nuiton au lieu de org.codelutin
Modified: guix/trunk/guix-test/pom.xml
===================================================================
--- guix/trunk/guix-test/pom.xml 2009-04-17 15:44:37 UTC (rev 1334)
+++ guix/trunk/guix-test/pom.xml 2009-04-17 15:45:31 UTC (rev 1335)
@@ -7,7 +7,7 @@
<!-- *** POM Relationships *************************************** -->
<!-- ************************************************************* -->
<parent>
- <groupId>org.codelutin.guix</groupId>
+ <groupId>org.nuiton.guix</groupId>
<artifactId>guix</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
Deleted: guix/trunk/guix-test/src/main/java/org/codelutin/guix/App.java
===================================================================
--- guix/trunk/guix-test/src/main/java/org/codelutin/guix/App.java 2009-04-17 15:44:37 UTC (rev 1334)
+++ guix/trunk/guix-test/src/main/java/org/codelutin/guix/App.java 2009-04-17 15:45:31 UTC (rev 1335)
@@ -1,13 +0,0 @@
-package org.codelutin.guix;
-
-/**
- * Hello world!
- *
- */
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
- }
-}
Copied: guix/trunk/guix-test/src/main/java/org/nuiton/guix/App.java (from rev 1332, guix/trunk/guix-test/src/main/java/org/codelutin/guix/App.java)
===================================================================
--- guix/trunk/guix-test/src/main/java/org/nuiton/guix/App.java (rev 0)
+++ guix/trunk/guix-test/src/main/java/org/nuiton/guix/App.java 2009-04-17 15:45:31 UTC (rev 1335)
@@ -0,0 +1,13 @@
+package org.nuiton.guix;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
1
0