| author : | Tony Chemit <chemit@codelutin.com> |
|---|
Le module observe-validation regroupe la partie validation des données observateurs de l'application.
Dans ce document, on décrit la mise en oeuvre de la validation et des règles prédéfinis de niveau 1 (contrôle de surface) et 2 (consolidation des données).
Pour rappel :
un objet doit être valide au niveau 1 pour pouvoir être sauvé en base locale
un objet doit être valide au niveau 2 pour pouvoir être sauvé en base centrale.
Comme indiqué dans le document d'architecture logicielle, on utilise le moteur de validation XWorks customisé sur 3 niveaux (erreur - warning - info).
Les fichiers de validation sont sous forme xml et décrivent l'ensemble des règles à appliquer à un type d'objet.
Le paquetage et le nom d'un fichier de validation détermine :
le type d'objet à valider (le nom simple de l'objet)
le niveau de validation (n1 | n2)
le scope de validation (error | warning | info)
le context de validation (permet d'effectuer différentes validations sur un même type d'objet dans un état différent)
Le fichier se termine toujours par -validation.xml.
Par exemple, le fichier suivant :
fr/ird/observe/entites/n1-Maree-create-error-validation.xml
représente le fichier de validation :
de l'objet de type fr.ird.observe.entities.Maree
dans le niveau n1 (validation niveau 1)
dans le context create (lors de la création d'une marée)
avec un scope error.
Les objets métiers Maree et Route possède une propriété entière niveauVerification qui reflète l'état de validation de l'objet et de ses sous-objets :
*0* lorsque l'objet est en mode création (non encore enregistré en base locale)
*1* lorsque l'objet existe dans une base locale (donc valide au niveau 1)
*2* lorsque l'objet a été consolidé
Toute modification d'un objet en niveau 2 le rétrogade en niveau 1 pour reforcer la phase de consolidation. Cette règle s'applique aussi à la grappe des sous-objets.
Par exemple l'ajout ou la modification d'une activité dans une route rétrograge la route en n1 , sa marée en n1 et donc aussi toutes les routes de la marée.
Un fichier de validation contient l'ensemble des règles à appliquer sur un type d'objet donné.
On utilise uniquement les règles de type Field, i.e des règles basées sur une propriété de l'objet afin de pouvoir plus facilement faire le lien ensuite dans les interfaces graphiques.
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- pas de bateau sélectionné -->
<field name="bateau">
<field-validator type="required" short-circuit="true">
<message>validator.maree.required.bateau</message>
</field-validator>
</field>
<!-- nomSupply de taille inferieure à 32 -->
<field name="nomSupply">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[nomSupply.length() < 32 ]]></param>
<message>validator.objetFlottant.size.nomSupply##32</message>
</field-validator>
</field>
</validators>
Chaque validateur possède une balise message qui contient la clef de traduction de son message.
Il est possible de passer des paramètres au message en ajoutant après la clef un ## suivit de la valeur du paramètre.
Exemple :
validator.objetFlottant.size.nomSupply##32##12
contient deux paramètres 32 et 12.
Les paramètres peuvent être statiques ou dynamiques.
Exemple :
<field name="profondeurMaximumEngin">
<field-validator type="int" short-circuit="true">
<param name="min">0</param>
<param name="max">500</param>
<message>message##${min}##${max}</message>
</field-validator>
</field>
L'ensemble des traductions est regroupé dans le fichier :
src/main/resources/i18n/observe-validation-fr_FR.properties
L'ensemble des validateurs disponibles est renseignés dans le fichier de definition des validateurs .
Dans les sources du module, on retrouve ce fichier ici :
src/main/resources/validators.xml
Voir le détail des validateurs disponibles .
La validation de niveau 1 comprend les contrôles dit de surfaces, i.e les contrôles lors de la saisie ou modification des données observateurs via les interfaces de saisie.
Dans les sources du module, on retrouve ces règles ici src/main/validation/n1.
Pour la validation niveau 1, on autorise l'utilisation de tous les scopes disponibles : error - warning - info.
Pour les objets de type Maree - Route - Activite - ObjetFlottant - Calee on utilise deux contextes différents :
create pour des objets en mode création (non encore sauvegardé en base).
update pour des objets en mode mise àjours (modification d'objets existants en base).
Voir l'ensemble des regles de niveau 1 .
La validation de niveau 2 comprend les contrôles de consolidation des données, à appliquer avant de pouvoir intégrer les données observateurs dans une base centrale Obstuna.
Dans les sources du module, on retrouve ces règles ici src/main/validation/n2.
Pour la validation niveau 2, on autorise uniquement l'utilisation du scope error et on ne distinguera pas différents contexts pour un type d'objet.
Voir l'ensemble des regles de niveau 2 .
La validation référentiel comprend les contrôles de surface lors de l'édition des objets du référentiel.
Dans les sources du module, on retrouve ces règles ici src/main/validation/referentiel.
TODO a faire dans une version ultérieure, pour le moment on autorise pas l'édition du référentiel.
Voir l'ensemble des regles de referentiel .