Why make donate
google analytics

Validation

author : Tony Chemit <chemit@codelutin.com>

1 Présentation

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 :

2 Mise en oeuvre

Comme indiqué dans le document d'architecture logicielle, on utilise le moteur de validation XWorks customisé sur 3 niveaux (erreur - warning - info).

2.1 Nomenclature des fichiers

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.

2.2 Mise en place du niveau de validité

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.

2.3 Contenu d'un fichier de validation

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.

Exemple de fichier de validation
 <!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>

Message d'un validateur

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

2.4 Validateurs disponibles

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 .

3 Validation niveau 1

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 :

Voir l'ensemble des regles de niveau 1 .

4 Validation niveau 2

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 .

5 Validation réferentiel

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 .

Maven JRst ReStructuredText JAXX ToPIA ArgoUML