/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.importer.web; import java.io.Serializable; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.RadioGroup; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; /** * Ajax enabled radio group panel. * <p> * Taken from https://github.com/mnadeem/wicketAjaxRadio. * </p> * @param <T> */ public abstract class AjaxRadioPanel<T extends Serializable> extends Panel { private static final long serialVersionUID = 1L; protected abstract void onRadioSelect(AjaxRequestTarget target, T newSelection); public AjaxRadioPanel(String id, List<T> items) { this(id, items, null); } public AjaxRadioPanel(String id, List<T> items, T currentSelection) { super(id); add(buildContents(items, currentSelection)); } private Component buildContents(List<T> items, T currentSelection) { final RadioGroup<T> group = new RadioGroup<T>("radioGroup", new Model(currentSelection)); group.add(new ListView<T> ("radioButtons", items) { @Override protected void populateItem(ListItem<T> item) { item.add(newRadioCell(group, item)); item.add(createLabel("label", item)); } }); return group; } protected AjaxRadio<T> newRadioCell(final RadioGroup<T> group, ListItem<T> item) { return new AjaxRadio<T>("radio", item.getModel()) { private static final long serialVersionUID = 1L; @Override public void onAjaxEvent(AjaxRequestTarget target) { onRadioSelect(target, group.getModelObject()); } }; } protected Component createLabel(String id, ListItem<T> item) { return new Label("label", item.getModel()); } }