21 nov. 2023, 14:23:20 Flora Hayat

Développer avec le Plugin Forms

Table des matières

Création d’un validateur (technique)

Pour revenir sur la gestion de validation, qui consiste à contrôler la/les réponse(s) à une question, il est possible d’implémenter des « validateurs » pour s’adapter aux besoins spécifiques d’un formulaire.

Pour implémenter un validateur, il faut :

  • Créer une classe qui étend AbstractValidator (fr.paris.lutece.plugins.forms.validation.AbstractValidator)
  • Implémenter en Override la méthode validate

Dans la méthode validate, il faudra retourner un booléen qui exprimera la validation ou la non-validation de l’entrée testée, selon les critères qu’elle doit respecter.

Exemple d’implémentation

Nous prendrons ici l’exemple d’implémentation du IBANComutitresValidator qui contrôle le format d’un IBAN. La méthode validate() crée d’abord le format à respecter avec validatorIbanFrFormats, en lui assignant une expression régulière qui traduit la structure que doit respecter l’IBAN, à savoir :

  • 27 caractères pour les comptes tenus en France
  • commençant par FR suivi de 2 caractères
  • puis des 23 chiffres du RIB composé : du code de l’établissement bancaire, du code du guichet, du numéro de compte et de la clé RIB.

La méthode validate() applique ensuite le contrôle validatorIbanFrFormats à l’entrée (si elle est non vide). Le contrôle est appliqué sur l’entrée délestée des espaces superflus avec : validatorIbanFr.isValid( response.getResponseValue( ).replaceAll( "\\s", "" ) )

Code complet :

public class IBANComutitresValidator extends AbstractValidator
{
    public static final String BEAN_NAME = "forms-comutitres.IBANValidator";

    public IBANComutitresValidator(String strValidatorName, String strValidatorDisplayName, List<String> listAvailableEntryType )
    {
        super(strValidatorName, strValidatorDisplayName, listAvailableEntryType);
    }

    @Override
    public boolean validate(FormQuestionResponse questionResponse, Control control)
    {
        IBANValidator.Validator[] validatorIbanFrFormats = new IBANValidator.Validator[] {
            new IBANValidator.Validator("FR", 27, "FR\\d{12}[A-Z0-9]{11}\\d{2}")
        };
        IBANValidator validatorIbanFr = new IBANValidator(validatorIbanFrFormats);
        for (Response response : questionResponse.getEntryResponse())
        {
            if (StringUtils.isNoneEmpty(response.getResponseValue()))
            {
                return validatorIbanFr.isValid(response.getResponseValue().replaceAll("\\s", ""));
            }
        }
        return false;
    }
}

Principaux objets et services du plugin

Pour faire le lien entre les formulaires présentés jusqu’ici fonctionnellement parlant, voici les principaux objets et services associés :

MéthodeFonctionCode source
FormServiceService relatif aux formulaires. Plusieurs méthodes de gestion sont exposées comme : saveForm, processFormAction, filterFinalSteps, removeFormfr.paris.lutece.plugins.forms.service.FormService.java
FormResponseServiceService relatif aux réponses aux formulaires. Plusieurs méthodes de gestion sont exposées comme : saveFormResponse, deleteFormResponse, getFormResponseListForUserfr.paris.lutece.plugins.forms.service.FormResponseService.java
FormObjet java représentant les formulairesfr.paris.lutece.plugins.forms.business.Form.java
StepObjet java représentant les étapes dans les formulairesfr.paris.lutece.plugins.forms.business.Step.java
QuestionObjet java représentant les questions dans un formulairefr.paris.lutece.plugins.forms.business.Question.java
FormResponseObjet java représentant les réponses aux formulaires, c’est le pendant de Formfr.paris.lutece.plugins.forms.business.FormResponse.java
FormResponseStepObjet java représentant les étapes dans les réponses aux formulaires, c’est le pendant de Stepfr.paris.lutece.plugins.forms.business.FormResponseStep.java
FormQuestionResponseObjet java représentant les réponses aux questions des formulaires, c’est le pendant de Questionfr.paris.lutece.plugins.forms.business.FormQuestionResponse.java