Java tutorial
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); } } }