com.asptt.plongee.resa.ui.web.wicket.page.admin.GererPlongeeAOuvrirTwo.java Source code

Java tutorial

Introduction

Here is the source code for com.asptt.plongee.resa.ui.web.wicket.page.admin.GererPlongeeAOuvrirTwo.java

Source

package com.asptt.plongee.resa.ui.web.wicket.page.admin;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.wicket.PageParameters;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.datetime.StyleDateConverter;
import org.apache.wicket.datetime.markup.html.form.DateTextField;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.ValidationErrorFeedback;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.util.CollectionModel;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.validation.validator.MinimumValidator;

import com.asptt.plongee.resa.exception.ResaException;
import com.asptt.plongee.resa.exception.TechnicalException;
import com.asptt.plongee.resa.mail.PlongeeMail;
import com.asptt.plongee.resa.model.Adherent;
import com.asptt.plongee.resa.model.NiveauAutonomie;
import com.asptt.plongee.resa.model.Plongee;
import com.asptt.plongee.resa.ui.web.wicket.page.ErreurTechniquePage;
import com.asptt.plongee.resa.ui.web.wicket.page.ErrorPage;
import com.asptt.plongee.resa.ui.web.wicket.page.TemplatePage;
import com.asptt.plongee.resa.ui.web.wicket.page.inscription.InscriptionConfirmationPlongeePage;

public class GererPlongeeAOuvrirTwo extends TemplatePage {

    private ModalWindow modalPlongee;
    TextField<Integer> maxPlaces;
    TextField<Integer> niveauMinimum;
    TextField<Date> dateVisible;

    public GererPlongeeAOuvrirTwo(final Plongee plongee) {
        setPageTitle("Ouvrir plongee");
        modalPlongee = new ModalWindow("modalPlongee");
        modalPlongee.setTitle("This is modal window with panel content.");
        modalPlongee.setCookieName("modal-plongee");
        add(modalPlongee);

        CompoundPropertyModel<Plongee> modelPlongee = new CompoundPropertyModel<Plongee>(plongee);

        List<Adherent> dps;
        dps = getResaSession().getAdherentService().rechercherDPsNonInscrits(
                getResaSession().getAdherentService().rechercherAdherentsActifs(), plongee);

        dps.removeAll(plongee.getParticipants());

        IChoiceRenderer<Adherent> rendDp = new ChoiceRenderer<Adherent>("nom", "nom");

        final Palette<Adherent> palDp = new Palette<Adherent>("paletteDps",
                new ListModel<Adherent>(new ArrayList<Adherent>()), new CollectionModel<Adherent>(dps), rendDp, 10,
                false) {
        };

        List<Adherent> pilotes = getResaSession().getAdherentService().rechercherPilotesNonInscrits(
                getResaSession().getAdherentService().rechercherAdherentsActifs(), plongee);

        pilotes.removeAll(plongee.getParticipants());

        IChoiceRenderer<Adherent> rendPilote = new ChoiceRenderer<Adherent>("nom", "nom");

        final Palette<Adherent> palPilote = new Palette<Adherent>("palettePilotes",
                new ListModel<Adherent>(new ArrayList<Adherent>()), new CollectionModel<Adherent>(pilotes),
                rendPilote, 10, false) {
        };

        final Form<Plongee> form = new Form<Plongee>("form") {

            private static final long serialVersionUID = 4611593854191923422L;

            @Override
            protected void onSubmit() {

                IModel<?> modelDps = palDp.getDefaultModel();
                List<Adherent> dps = (List<Adherent>) modelDps.getObject();

                IModel<?> modelPilotes = palPilote.getDefaultModel();
                List<Adherent> pilotes = (List<Adherent>) modelPilotes.getObject();
                /*
                 * Impossible de gerer les doublons avec un HashSet Alors on le
                 * fait ' la main'
                 */
                List<String> idInscrits = new ArrayList<String>();
                for (Adherent adherent : dps) {
                    if (!idInscrits.contains(adherent.getNumeroLicense())) {
                        idInscrits.add(adherent.getNumeroLicense());
                    }
                }
                for (Adherent adherent : pilotes) {
                    if (!idInscrits.contains(adherent.getNumeroLicense())) {
                        idInscrits.add(adherent.getNumeroLicense());
                    }
                }
                /*
                 * Maintenant qu'on  la liste des id on reconstitue une liste
                 * d'adherent
                 */
                List<Adherent> adhInscrits = new ArrayList<Adherent>();
                for (String id : idInscrits) {
                    adhInscrits.add(getResaSession().getAdherentService().rechercherAdherentParIdentifiant(id));
                }
                /*
                 * Reste plus qu'a inscrire...
                 */
                for (Adherent adh : adhInscrits) {
                    try {
                        getResaSession().getPlongeeService().inscrireAdherent(plongee, adh,
                                PlongeeMail.PAS_DE_MAIL);
                    } catch (ResaException e) {
                        e.printStackTrace();
                        ErrorPage ep = new ErrorPage(e);
                        setResponsePage(ep);
                    }
                }
                PageParameters param = new PageParameters();
                param.put("plongeeAOuvrir", plongee);
                param.put("inscrits", adhInscrits);
                //setResponsePage(new GererPlongeeAOuvrirThree(plongee));
                setResponsePage(new InscriptionConfirmationPlongeePage(plongee));
            }//fin du onSubmit()
        };

        form.setModel(modelPlongee);
        // Le nombre max. de places, pour info
        maxPlaces = new TextField<Integer>("nbMaxPlaces");
        maxPlaces.setOutputMarkupId(true);
        form.add(maxPlaces.setEnabled(false));
        // Le niveau mini. des plongeurs, pour info
        niveauMinimum = new TextField<Integer>("niveauMinimum");
        niveauMinimum.setOutputMarkupId(true);
        form.add(niveauMinimum.setEnabled(false));

        // La Date de visibilite de la plonge, pour info
        dateVisible = new TextField<Date>("dateVisible");
        dateVisible.setOutputMarkupId(true);
        form.add(dateVisible.setEnabled(false));

        // Ajout des palettes
        form.add(palDp);
        form.add(palPilote);

        add(form);

        form.add(new IndicatingAjaxLink("change") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                replaceModalWindow(target, form.getModel());
                modalPlongee.show(target);
            }
        });

    }

    private void replaceModalWindow(AjaxRequestTarget target, IModel<Plongee> plongee) {
        modalPlongee.setContent(new PlongeePanel(modalPlongee.getContentId(), plongee));
        modalPlongee.setTitle("Caractristiques de la plonge");

        // La hauteur de la fenetre s'adapte  son contenu
        modalPlongee.setUseInitialHeight(false);

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

    private void onSubmitPlongeePanel(AjaxRequestTarget target) {
        target.addComponent(maxPlaces);
        target.addComponent(niveauMinimum);
        target.addComponent(dateVisible);
        modalPlongee.close(target);
    }

    public class PlongeePanel extends Panel {

        private static final long serialVersionUID = -5814508281132946597L;

        public PlongeePanel(String id, IModel<Plongee> plongee) {
            super(id, plongee);
            setOutputMarkupId(true);
            setDefaultModel(plongee);

            // feedback panel pour renvoyer des messages sur la page
            final FeedbackPanel feedback = new FeedbackPanel("feedback");
            feedback.setOutputMarkupId(true);

            Form formPlongee = new Form("formPlongee");
            formPlongee.setModel(plongee);

            // Ajout du feedBack au formulaire
            formPlongee.add(feedback);

            // Nombre de places max
            formPlongee.add(new RequiredTextField<Integer>("nbMaxPlaces", Integer.class)
                    .add(new MinimumValidator<Integer>(4)));

            // Ajout de la liste des niveaux
            List<String> niveaux = new ArrayList<String>();
            for (NiveauAutonomie n : NiveauAutonomie.values()) {
                niveaux.add(n.toString());
            }
            formPlongee.add(new DropDownChoice("niveauMinimum", niveaux));

            // Date Visibilite de la plongee
            DateTextField dateVisi = new DateTextField("dateVisible",
                    new PropertyModel<Date>(plongee, "dateVisible"), new StyleDateConverter("S-", true));
            dateVisi.setRequired(true);
            dateVisi.add(new DatePicker());

            formPlongee.add(dateVisi);

            formPlongee.add(new AjaxButton("validPlongee") {
                @Override
                // La validation doit se faire en Ajax car le formulaire de la
                // fentre principal n'y a pas accs
                // http://yeswicket.com/index.php?post/2010/04/26/G%C3%A9rer-facilement-les-fen%C3%AAtres-modales-avec-Wicket
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    Plongee plongee = (Plongee) form.getModelObject();

                    // Mise  jour de la plongee (nombre de places max et niveau mini)
                    getResaSession().getPlongeeService().modifierPlongee(plongee);
                    onSubmitPlongeePanel(target);

                }

                // L'implmentation de cette mthode est ncessaire pour voir
                // les messages d'erreur dans le feedBackPanel
                protected void onError(AjaxRequestTarget target, Form<?> form) {
                    target.addComponent(feedback);
                }

            });

            // Ajout du formulaire  la page
            add(formPlongee);

        }

    }

}