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

Java tutorial

Introduction

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

Source

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxSubmitButton;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.util.string.Strings;
import org.wicketstuff.objectautocomplete.AutoCompletionChoicesProvider;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteBuilder;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteField;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteRenderer;

import com.asptt.plongee.resa.model.Adherent;
import com.asptt.plongee.resa.model.AdherentDataProvider;
import com.asptt.plongee.resa.model.DetachableAdherentModel;
import com.asptt.plongee.resa.ui.web.wicket.page.TemplatePage;
import com.asptt.plongee.resa.util.CatalogueMessages;

public class GererAdherents extends TemplatePage {

    private ModalWindow modal2;
    private ModalWindow modalSupp;
    private ModalWindow modalPwd;
    private List<Adherent> list;

    public List<Adherent> getMatchingAdherents(String search) {
        if (Strings.isEmpty(search)) {
            List<Adherent> emptyList = Collections.emptyList();
            return emptyList;
        }

        if (list == null) {
            list = getResaSession().getAdherentService().rechercherAdherentsActifs();
        }

        ArrayList<Adherent> newList = new ArrayList<Adherent>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getNom().startsWith(search.toUpperCase())) {
                newList.add(list.get(i));
            }
        }
        return newList;
    }

    @SuppressWarnings("serial")
    public GererAdherents() {

        setPageTitle("Gerer les adherents");
        setOutputMarkupId(true);
        modal2 = new ModalWindow("modal2");
        modal2.setTitle("This is modal window with panel content.");
        modal2.setCookieName("modal-adherent");
        add(modal2);

        modalSupp = new ModalWindow("modalSupp");
        modalSupp.setTitle("Confirmation");
        modalSupp.setResizable(false);
        modalSupp.setInitialWidth(30);
        modalSupp.setInitialHeight(15);
        modalSupp.setWidthUnit("em");
        modalSupp.setHeightUnit("em");
        modalSupp.setCssClassName(ModalWindow.CSS_CLASS_BLUE);
        add(modalSupp);

        modalPwd = new ModalWindow("modalPwd");
        modalPwd.setTitle("Confirmation");
        modalPwd.setResizable(false);
        modalPwd.setInitialWidth(30);
        modalPwd.setInitialHeight(15);
        modalPwd.setWidthUnit("em");
        modalPwd.setHeightUnit("em");
        modalPwd.setCssClassName(ModalWindow.CSS_CLASS_BLUE);
        add(modalPwd);

        List<Adherent> adherents = getResaSession().getAdherentService().rechercherAdherentsTous();

        // On construit la liste des adhrents (avec pagination)
        DataView adherentsView = new DataView<Adherent>("simple", new AdherentDataProvider(adherents), 10) {
            protected void populateItem(final Item<Adherent> item) {
                final Adherent adherent = item.getModelObject();

                item.add(new IndicatingAjaxLink("select") {
                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        replaceModalWindow(target, item.getModel());
                        modal2.show(target);
                    }
                });

                item.add(new IndicatingAjaxLink("suppAdh") {
                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        replaceModalWindowSupp(target, item.getModel());
                        modalSupp.show(target);
                    }
                });

                item.add(new IndicatingAjaxLink("pwdAdh") {
                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        replaceModalWindowPwd(target, item.getModel());
                        modalPwd.show(target);
                    }
                });

                item.add(new Label("license", adherent.getNumeroLicense()));
                item.add(new Label("nom", adherent.getNom()));
                item.add(new Label("prenom", adherent.getPrenom()));

                // Ds que le plongeur est encadrant, on affiche son niveau d'encadrement
                String niveauAffiche = adherent.getPrerogative();
                item.add(new Label("niveau", niveauAffiche));
                item.add(new Label("aptitude", adherent.getAptitude()));
                item.add(new AttributeModifier("class", true, new AbstractReadOnlyModel<String>() {
                    @Override
                    public String getObject() {
                        String cssClass;
                        if (item.getIndex() % 2 == 1) {
                            cssClass = "even";
                        } else {
                            cssClass = "odd";
                        }
                        if (!adherent.isActif()) {
                            cssClass = cssClass + " inactif";
                        }
                        return cssClass;
                    }
                }));
            }
        };
        adherentsView.setOutputMarkupId(true);
        add(adherentsView);
        add(new PagingNavigator("navigator", adherentsView));

        add(new AdherentForm("form"));

    }

    private void replaceModalWindow(AjaxRequestTarget target, IModel<Adherent> adherent) {
        modal2.setContent(new AdherentPanel(modal2.getContentId(), adherent));
        modal2.setTitle("Modifiez les informations \u00e0 mettre \u00e0 jour");
        modal2.setUseInitialHeight(true);

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

    class AdherentForm extends Form {

        private static final long serialVersionUID = 5529259540931669786L;
        ObjectAutoCompleteField<Adherent, String> autocompleteField;

        public AdherentForm(String id) {
            super(id);

            AutoCompletionChoicesProvider<Adherent> provider = new AutoCompletionChoicesProvider<Adherent>() {
                private static final long serialVersionUID = 1L;

                public Iterator<Adherent> getChoices(String input) {
                    return getMatchingAdherents(input).iterator();
                }
            };

            ObjectAutoCompleteRenderer<Adherent> renderer = new ObjectAutoCompleteRenderer<Adherent>() {
                private static final long serialVersionUID = 1L;

                protected String getIdValue(Adherent adherent) {
                    return adherent.getNumeroLicense();
                }

                protected String getTextValue(Adherent adherent) {
                    String aptitudeAffiche = "";
                    if (null != adherent.getAptitude()) {
                        aptitudeAffiche = adherent.getAptitude();
                    }
                    String texteAffiche = adherent.getNom() + " " + adherent.getPrenom() + " "
                            + (adherent.getPrerogative()) + " " + (aptitudeAffiche);
                    return texteAffiche;
                }
            };

            ObjectAutoCompleteBuilder<Adherent, String> builder = new ObjectAutoCompleteBuilder<Adherent, String>(
                    provider);
            builder.autoCompleteRenderer(renderer);
            builder.searchLinkText("Autre recherche");
            builder.width(200);

            autocompleteField = builder.build("numeroLicense", new Model<String>());
            final TextField<String> adherent = autocompleteField.getSearchTextField();
            adherent.setRequired(true);

            add(autocompleteField);

            add(new IndicatingAjaxSubmitButton("valider", this) {
                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    IModel<Adherent> adh = new DetachableAdherentModel(getResaSession().getAdherentService()
                            .rechercherAdherentParIdentifiant(autocompleteField.getConvertedInput()));
                    replaceModalWindow(target, adh);
                    modal2.show(target);
                }
            });
        }
    }

    private void replaceModalWindowSupp(AjaxRequestTarget target, IModel<Adherent> adherent) {
        modalSupp.setContent(new ConfirmSuppAdherent(modalSupp.getContentId(), adherent));
        modalSupp.setTitle("Supprimez un adherent");
        modalSupp.setUseInitialHeight(true);

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

    public class ConfirmSuppAdherent extends Panel {

        private static final long serialVersionUID = 196724625616748115L;

        @SuppressWarnings("unchecked")
        public ConfirmSuppAdherent(String id, final IModel<Adherent> adherent) {
            super(id);

            // Informations (nom, prenom) du l'adherent  supprimer
            add(new Label("info", new StringResourceModel(CatalogueMessages.ADHERENT_CONFIRME_SUPP, this,
                    new Model<Adherent>(adherent.getObject()))));

            // Le lien qui va fermer la fentre de confirmation
            // et appeler la mthode de d'inscription en liste d'attente si ncessaire
            add(new IndicatingAjaxLink("yes") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    // On supprime l'adherent
                    getResaSession().getAdherentService().supprimerAdherent(adherent.getObject());
                    modalSupp.close(target);
                    setResponsePage(GererAdherents.class);
                }
            });

            // Le lien qui va juste fermer la fentre de confirmation
            add(new IndicatingAjaxLink("no") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    modalSupp.close(target);
                }
            });

        }
    }

    private void replaceModalWindowPwd(AjaxRequestTarget target, IModel<Adherent> adherent) {
        modalPwd.setContent(new ConfirmReInitPwdAdherent(modalPwd.getContentId(), adherent));
        modalPwd.setTitle("Rinitialisation du mot de passe d'un adhrent");
        modalPwd.setUseInitialHeight(true);

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

    public class ConfirmReInitPwdAdherent extends Panel {

        private static final long serialVersionUID = 196724625616748115L;

        @SuppressWarnings("unchecked")
        public ConfirmReInitPwdAdherent(String id, final IModel<Adherent> adherent) {
            super(id);

            // Informations (nom, prenom) du l'adherent  supprimer
            add(new Label("info", new StringResourceModel(CatalogueMessages.ADHERENT_CONFIRME_RINIT_PWD, this,
                    new Model<Adherent>(adherent.getObject()))));

            // Le lien qui va fermer la fentre de confirmation
            // et appeler la mthode de d'inscription en liste d'attente si ncessaire
            add(new IndicatingAjaxLink("yes") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    // On supprime l'adherent
                    getResaSession().getAdherentService().reinitPwdAdherent(adherent.getObject());
                    modalPwd.close(target);
                    setResponsePage(GererAdherents.class);
                }
            });

            // Le lien qui va juste fermer la fentre de confirmation
            add(new IndicatingAjaxLink("no") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    modalPwd.close(target);
                }
            });

        }
    }
}