com.asptt.plongee.resa.wicket.page.admin.adherent.CreerAdherent.java Source code

Java tutorial

Introduction

Here is the source code for com.asptt.plongee.resa.wicket.page.admin.adherent.CreerAdherent.java

Source

package com.asptt.plongee.resa.wicket.page.admin.adherent;

import com.asptt.plongee.resa.exception.TechnicalException;
import com.asptt.plongee.resa.model.Adherent;
import com.asptt.plongee.resa.model.Aptitude;
import com.asptt.plongee.resa.model.DetachableAdherentModel;
import com.asptt.plongee.resa.model.Encadrement;
import com.asptt.plongee.resa.model.NiveauAutonomie;
import com.asptt.plongee.resa.util.FocusOnLoadBehavior;
import com.asptt.plongee.resa.wicket.ResaSession;
import com.asptt.plongee.resa.wicket.page.AccueilPage;
import com.asptt.plongee.resa.wicket.page.TemplatePage;
import com.asptt.plongee.resa.wicket.page.admin.adherent.contact.ContactPanel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.datetime.StyleDateConverter;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.validator.EmailAddressValidator;
import org.apache.wicket.validation.validator.PatternValidator;
import org.apache.wicket.validation.validator.StringValidator;

@AuthorizeInstantiation("ADMIN")
public class CreerAdherent extends TemplatePage {

    static FeedbackPanel feedback = new FeedbackPanel("feedback");
    private static ModalWindow modalDuplicateLicense;

    public CreerAdherent() {
        setPageTitle("Creer adherent");
        // Constructeur du formulaire et du feedback panel pour renvoyer des messages sur la page
        feedback.setOutputMarkupId(true);
        add(feedback);

        modalDuplicateLicense = new ModalWindow("modalDuplicateLicense");
        modalDuplicateLicense.setTitle("Reinitialisation adherent inactif");
        modalDuplicateLicense.setResizable(false);
        modalDuplicateLicense.setInitialWidth(30);
        modalDuplicateLicense.setInitialHeight(15);
        modalDuplicateLicense.setWidthUnit("em");
        modalDuplicateLicense.setHeightUnit("em");
        modalDuplicateLicense.setCssClassName(ModalWindow.CSS_CLASS_BLUE);
        add(modalDuplicateLicense);

        add(new CreerAdherentForm("creerAdherentForm"));

    }

    public static ModalWindow getModalDuplicateLicense() {
        return modalDuplicateLicense;
    }

    private static class CreerAdherentForm extends Form {

        public CreerAdherentForm(String creerAdherentForm) {
            super(creerAdherentForm);

            CompoundPropertyModel model = new CompoundPropertyModel(new Adherent());
            setModel(model);

            add(new RequiredTextField<String>("nom").add(new FocusOnLoadBehavior()));
            add(new RequiredTextField<String>("prenom"));
            add(new RequiredTextField<String>("numeroLicense", String.class).add(new PatternValidator("\\d{6}")));

            // numro de tlphone au bon format (10 caractres numriques)
            RequiredTextField<String> telephone = new RequiredTextField<String>("telephone", String.class);
            telephone.add(StringValidator.ExactLengthValidator.exactLength(10));
            telephone.add(new PatternValidator("\\d{10}"));
            add(telephone);

            add(new RequiredTextField<String>("mail").add(EmailAddressValidator.getInstance()));

            // Ajout de la liste des niveaux
            List<NiveauAutonomie> niveaux = new ArrayList<NiveauAutonomie>();
            niveaux.addAll(Arrays.asList(NiveauAutonomie.values()));
            add(new DropDownChoice("niveau", niveaux).setNullValid(true));

            // Ajout de la liste des aptitudes
            List<Aptitude> aptitudes = new ArrayList<Aptitude>();
            aptitudes.addAll(Arrays.asList(Aptitude.values()));
            add(new DropDownChoice("aptitude", aptitudes));

            // Ajout de la liste des niveaux d'encadrement
            List<Encadrement> encadrement = new ArrayList<Encadrement>();
            encadrement.addAll(Arrays.asList(Encadrement.values()));
            add(new DropDownChoice("encadrement", encadrement));

            // Ajout de la checkbox pilote
            add(new CheckBox("pilote", model.bind("pilote")));

            //Ajout des roles
            List<String> roles = Arrays.asList(new String[] { "ADMIN", "USER", "SECRETARIAT", "DP", "ENCADRANT" });
            add(new ListMultipleChoice<String>("roles", roles));

            //Ajout du champs date du certificat medical
            DateTextField dateCMTextFiled = new DateTextField("dateCM", new PropertyModel<Date>(model, "dateCM"),
                    new StyleDateConverter("S-", true));
            dateCMTextFiled.setRequired(true);
            add(dateCMTextFiled);
            dateCMTextFiled.add(new DatePicker());

            Date dateDuJour = new Date();
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(dateDuJour);
            int anneeCourante = gc.get(Calendar.YEAR);
            int nextAnnee = anneeCourante + 1;

            List<Integer> annees = new ArrayList<Integer>();
            annees.add(anneeCourante);
            annees.add(nextAnnee);

            DropDownChoice<Integer> listAnnee = new DropDownChoice<Integer>("anneeCotisation", annees);
            listAnnee.setRequired(true);
            add(listAnnee);

            // Ajout de la checkbox TIV
            add(new CheckBox("tiv", model.bind("tiv")));
            //commentaire
            TextArea<String> textareaInput = new TextArea<String>("commentaire");
            textareaInput.add(StringValidator.ExactLengthValidator.maximumLength(45));
            add(textareaInput);

            ContactPanel cuPanel = new ContactPanel("cuPanel", model);
            add(cuPanel);

            add(new AjaxButton("validAdherent") {
                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    Adherent adherent = (Adherent) form.getModelObject();
                    try {

                        ResaSession.get().getAdherentService().creerAdherent(adherent);

                        setResponsePage(AccueilPage.class);
                    } catch (TechnicalException e) {
                        StringBuilder bufMsg = new StringBuilder(e.getMessage());
                        bufMsg.indexOf("Duplicate");
                        if (bufMsg.indexOf("Duplicate") >= 0) {
                            Adherent dupliAdh = ResaSession.get().getAdherentService()
                                    .rechercherAdherentParIdentifiant(adherent.getNumeroLicense());
                            if (!dupliAdh.isActif()) {
                                IModel<Adherent> adh = new DetachableAdherentModel(dupliAdh);
                                replaceModalWindowDuplicateLicense(target, adh);
                            }
                        } else {
                            e.printStackTrace();
                            error(e.getKey());
                        }
                    }

                }
                // L'implmentation de cette mthode est ncessaire pour voir
                // les messages d'erreur dans le feedBackPanel

                @Override
                protected void onError(AjaxRequestTarget target, Form<?> form) {
                    target.addComponent(feedback);
                }
            });

            add(new Link("cancel") {
                @Override
                public void onClick() {
                    setResponsePage(AccueilPage.class);
                }
            });

        }
    }

    public static void replaceModalWindowDuplicateLicense(AjaxRequestTarget target, IModel<Adherent> adherent) {
        modalDuplicateLicense
                .setContent(new GererDuplicateLicensePanel(modalDuplicateLicense.getContentId(), adherent));
        modalDuplicateLicense.setTitle("Reinitialisation adherent inactif");
        modalDuplicateLicense.setUseInitialHeight(true);

        // Pour viter le message de disparition de la fenetre lors de la validation
        target.appendJavascript("Wicket.Window.unloadConfirmation  = false;");
    }
}