Java tutorial
package com.asptt.plongee.resa.wicket.page.inscription; import java.util.List; import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.FeedbackPanel; 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.PropertyModel; import org.apache.wicket.model.StringResourceModel; 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.InscriptionFilleul; import com.asptt.plongee.resa.model.Plongee; import com.asptt.plongee.resa.model.PlongeeFilleulDataProvider; import com.asptt.plongee.resa.wicket.component.ConfirmAjaxLink; import com.asptt.plongee.resa.wicket.page.ErreurTechniquePage; import com.asptt.plongee.resa.wicket.page.TemplatePage; import com.asptt.plongee.resa.util.CatalogueMessages; import com.asptt.plongee.resa.util.Parameters; import com.asptt.plongee.resa.util.ResaUtil; import com.asptt.plongee.resa.wicket.ResaSession; import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink; import org.apache.wicket.markup.html.panel.Panel; public class DesinscriptionFilleulPage extends TemplatePage { private List<InscriptionFilleul> plongeesDesFilleuls = null; private Adherent parrain = null; private final Adherent filleul = null; private List<Plongee> plongees; private final FeedbackPanel feedback; public DesinscriptionFilleulPage() { this.parrain = ResaSession.get().getAdherent(); setPageTitle("Desinscription Externe plongee"); add(new Label("message", new StringResourceModel(CatalogueMessages.DESINSCRIPTION_FILLEUL_MSG_ADHERENT, this, new Model<Adherent>(parrain)))); feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); init(); } private void init() { try { plongeesDesFilleuls = ResaSession.get().getPlongeeService().rechercherPlongeesFilleulInscrit(parrain, Parameters.getInt("desincription.nb.heure")); } catch (TechnicalException e) { e.printStackTrace(); ErreurTechniquePage etp = new ErreurTechniquePage(e); setResponsePage(etp); } PlongeeFilleulDataProvider pDataProvider = new PlongeeFilleulDataProvider(plongeesDesFilleuls); add(new DataView<InscriptionFilleul>("simple", pDataProvider) { private static final long serialVersionUID = 2877768852318892774L; @Override protected void populateItem(final Item<InscriptionFilleul> item) { final InscriptionFilleul inscription = item.getModelObject(); final Plongee plongee = inscription.getPlongeeInscrit(); final Adherent filleul = inscription.getFilleul(); String nomDP = "Aucun"; if (null != plongee.getDp()) { nomDP = plongee.getDp().getNom(); } //preparation du message de confirmation IModel<Plongee> model = new Model<Plongee>(plongee); StringResourceModel srm = new StringResourceModel( CatalogueMessages.DESINSCRIPTION_FILLEUL_CONFIRMATION, this, model, new Object[] { ResaUtil.getHeurePlongee(plongee.getDatePlongee()), ResaUtil.getDateString(plongee.getDatePlongee()), filleul.getNom(), filleul.getPrenom() }); item.add(new ConfirmAjaxLink("select", srm.getString()) { private static final long serialVersionUID = 1771547719792642196L; @Override public void onClick(AjaxRequestTarget target) { desinscrire(target, plongee, filleul); } }); String nomFilleul = filleul.getNom(); String prenomFilleul = filleul.getPrenom(); item.add(new Label("nom", nomFilleul)); item.add(new Label("prenom", prenomFilleul)); item.add(new Label("date", ResaUtil.getJourDatePlongee(plongee.getDatePlongee()))); item.add(new Label("heure", ResaUtil.getHeurePlongee(plongee.getDatePlongee()))); item.add(new Label("typePlongee", plongee.getTypePlongee().getText())); 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"; } boolean isInscrit = false; for (Adherent adherent : plongee.getParticipants()) { if (adherent.getNumeroLicense().equals(parrain.getNumeroLicense())) { cssClass = cssClass + " inscrit"; isInscrit = true; } } if (!plongee.isNbMiniAtteint(Parameters.getInt("nb.plongeur.mini"))) { if (isInscrit) { cssClass = cssClass + "MinimumPlongeur"; } else { cssClass = cssClass + " minimumPlongeur"; } } return cssClass; } })); } }); } public void desinscrire(AjaxRequestTarget target, Plongee plongee, Adherent filleul) { //final Plongee plongee = iModel.getObject(); try { //On considere que les Filleuls etants des externes //ne sont donc pas des encadrants //Donc pas de test sur l'apppartenance l'encadrement //S'il y a des personnes en liste d'attente => mail aux ADMIN if (ResaSession.get().getPlongeeService().rechercherListeAttente(plongee).size() > 0) { ResaSession.get().getPlongeeService().deInscrireAdherent(plongee, filleul, PlongeeMail.MAIL_PLACES_LIBRES); } else { ResaSession.get().getPlongeeService().deInscrireAdherent(plongee, filleul, PlongeeMail.PAS_DE_MAIL); } setResponsePage(new ListeInscritsPlongeePage(plongee)); } catch (TechnicalException e) { e.printStackTrace(); error(e.getKey()); } catch (ResaException e) { String libRetour = ""; if (e.getKey().startsWith(CatalogueMessages.DESINSCRIPTION_IMPOSSIBLE)) { String nbHeure = e.getKey().substring(23); IModel<Adherent> model = new Model<Adherent>(parrain); StringResourceModel srm = new StringResourceModel(CatalogueMessages.DESINSCRIPTION_IMPOSSIBLE, this, model, new Object[] { new PropertyModel<Adherent>(model, "prenom"), nbHeure }); libRetour = srm.getString(); } error(libRetour); } finally { target.addComponent(feedback); } } }