jaxx.runtime.validator.swing
Class SwingValidator<B>

java.lang.Object
  extended by jaxx.runtime.validator.BeanValidator<B>
      extended by jaxx.runtime.validator.swing.SwingValidator<B>
Type Parameters:
B - le type de bean a valider

public class SwingValidator<B>
extends BeanValidator<B>

La surcharge de BeanValidator pour les ui swing

/**

Permet d'ajouter facilement le support de la validation des champs d'un bean et de le relier a une interface graphique. Utilise xwork pour la validation et JXLayer pour la visualisation.

Le mieux pour son integration dans Jaxx est de faire de la generation pour force la compilation du code suivant:

 myValidor.getBean().get();
 

et ceci pour chaque field ajoute a la map fieldRepresentation. De cette facon meme si le champs field est en texte on a une verification de son existance a la compilation.

La representation en tag pourrait etre

 <validator id="myValidator" beanClass="{Personne.class}"
 errorList="$list">
   <field name="name" component="$name"/>
   <field name="firstName" component="$firstName"/>
   <field name="birthDate" component="$birthDate"/>
 </validator>
 <validator beanClass="{Personne.class}" autoField="true"
 errorList="$list">
   <fieldRepresentation name="name" component="$lastName"/>
 </validator>
 

dans le premier exemple on fait un mapping explicite des champs, mais on voit que le nom du composant graphique est le meme que celui du champs. Pour eviter de longue saisie, il est possible d'utiliser le flag autoField qui pour chaque champs du ayant une methode get du bean recherche un composant avec cet Id. Il est aussi possible de surcharge un champs explicitement comme ici name, dans le cas ou le composant qui porterait ce nom serait utilise pour autre chose.

Il faut un handler particulier pour ce composant car les attributs beanClass et autoField ne sont present que dans le XML jaxx et servent a la generation. Il faut aussi prendre en compte les elements fieldRepresentation fils du tag validator.

Voici ce que pourrait etre le code genere par jaxx

 // declaration du bean
 BeanValidator $myValidator;
 // init du bean
 protected void createMyValidator() {
   $myValidator = new BeanValidator();
   // genere seulement si autoField = true
   for (Method m : beanClass.getMethod()) {
     if (m.getName().startsWith("get")) {
       String fieldName = m.getName().substring(3).toLowerCase();
       $myValidator.setFieldRepresentation(fieldName,
 $objectMap.get(fieldName));
     }
   }
   // pour chaque tag fieldRepresentation
   myValidator.setFieldRepresentation("name", $lastName);
   // si beanClass est specifie et n'est pas Object, on force l'acces au
 champs
   // pour validation a la compilation
   $myValidator.getBean().getName();
   $objectMap.put("myValidator", $myValidator);
 }
 

Version:
1.0
Author:
poussin , tchemit

Field Summary
protected  SwingValidatorMessageListModel errorListModel
          Object servant a contenir la liste des erreurs
protected  SwingValidatorMessageTableModel errorTableModel
          Object servant a contenir la liste des erreurs
protected  Map<String,JComponent> fieldRepresentation
          permet de faire le lien en un champs du bean et l'objet qui permet de l'editer
protected  Class<? extends AbstractBeanValidatorUI> uiClass
          ui renderer class
 
Fields inherited from class jaxx.runtime.validator.BeanValidator
bean, BEAN_PROERTY, beanClass, beanEventDescriptor, changed, CHANGED_PROERTY, CONTEXT_NAME_PROPERTY, contextName, conversionErrors, fields, FILTER_SCOPES_EMPTY, filterScopes, l, listenerList, parentValidator, pcs, valid, VALID_PROERTY, validators
 
Constructor Summary
SwingValidator(Class<B> beanClass, String contextName)
           
SwingValidator(Class<B> beanClass, String contextName, BeanValidatorScope... filterScopes)
           
 
Method Summary
 JComponent getFieldRepresentation(String fieldname)
           
 SwingValidator<?> getParentValidator()
           
 Class<? extends AbstractBeanValidatorUI> getUiClass()
           
 void installUIs()
          install ui on required components
 void reloadBean()
          To reload a bean in the validator.
 void setContextName(String contextName)
           
 void setErrorListModel(SwingValidatorMessageListModel errorListModel)
           
 void setErrorTableModel(SwingValidatorMessageTableModel errorTableModel)
           
 void setFieldRepresentation(Map<String,JComponent> fieldRepresentation)
           
 void setFieldRepresentation(String fieldname, JComponent c)
          Permet d'indiquer le composant graphique responsable de l'affichage d'un attribut du bean
protected  void setMessageRepresentation(String fieldname, JComponent old, JComponent c, Class<? extends AbstractBeanValidatorUI> uiClass)
           
 void setParentValidator(SwingValidator<?> parentValidator)
           
 void setUiClass(Class<? extends AbstractBeanValidatorUI> uiClass)
           
 
Methods inherited from class jaxx.runtime.validator.BeanValidator
addBeanValidatorListener, addPropertyChangeListener, addPropertyChangeListener, canValidate, containsField, convert, doValidate, fireFieldChanged, getBean, getBeanClass, getBeanEventDescriptor, getBeanValidatorListeners, getContextName, getField, getFields, getScopes, hasErrors, hasInfos, hasWarnings, initFields, isChanged, isValid, isValid, removeBeanValidatorListener, removePropertyChangeListener, removePropertyChangeListener, setBean, setChanged, setFilterScopes, setParentValidator, setValid, toString, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

fieldRepresentation

protected final Map<String,JComponent> fieldRepresentation
permet de faire le lien en un champs du bean et l'objet qui permet de l'editer


errorListModel

protected SwingValidatorMessageListModel errorListModel
Object servant a contenir la liste des erreurs


errorTableModel

protected SwingValidatorMessageTableModel errorTableModel
Object servant a contenir la liste des erreurs


uiClass

protected Class<? extends AbstractBeanValidatorUI> uiClass
ui renderer class

Constructor Detail

SwingValidator

public SwingValidator(Class<B> beanClass,
                      String contextName,
                      BeanValidatorScope... filterScopes)

SwingValidator

public SwingValidator(Class<B> beanClass,
                      String contextName)
Method Detail

reloadBean

public void reloadBean()
To reload a bean in the validator.

This method is used to reload ui, since some editors could not exist when validator is init, so some messages should not be attached to an editor.


getFieldRepresentation

public JComponent getFieldRepresentation(String fieldname)

getUiClass

public Class<? extends AbstractBeanValidatorUI> getUiClass()

setErrorListModel

public void setErrorListModel(SwingValidatorMessageListModel errorListModel)

setErrorTableModel

public void setErrorTableModel(SwingValidatorMessageTableModel errorTableModel)

setUiClass

public void setUiClass(Class<? extends AbstractBeanValidatorUI> uiClass)

setContextName

public void setContextName(String contextName)
Overrides:
setContextName in class BeanValidator<B>

setFieldRepresentation

public void setFieldRepresentation(String fieldname,
                                   JComponent c)
Permet d'indiquer le composant graphique responsable de l'affichage d'un attribut du bean

Parameters:
fieldname - the field name in the bean
c - the editor component for the field

setFieldRepresentation

public void setFieldRepresentation(Map<String,JComponent> fieldRepresentation)

getParentValidator

public SwingValidator<?> getParentValidator()
Overrides:
getParentValidator in class BeanValidator<B>

setParentValidator

public void setParentValidator(SwingValidator<?> parentValidator)

installUIs

public void installUIs()
install ui on required components


setMessageRepresentation

protected void setMessageRepresentation(String fieldname,
                                        JComponent old,
                                        JComponent c,
                                        Class<? extends AbstractBeanValidatorUI> uiClass)
                                 throws InvocationTargetException,
                                        IllegalAccessException,
                                        InstantiationException,
                                        NoSuchMethodException
Throws:
InvocationTargetException
IllegalAccessException
InstantiationException
NoSuchMethodException


Copyright © 2008-2010 CodeLutin. All Rights Reserved.