package de.flower.rmt.ui.page.venues.manager.geocode; import de.flower.common.ui.ajax.event.AjaxEventListener; import de.flower.common.ui.ajax.markup.html.AjaxLink; import de.flower.common.ui.panel.BasePanel; import de.flower.rmt.service.geocoding.GeocodingResult; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.model.IModel; import java.util.List; /** * @author flowerrrr */ public abstract class GeocodeResultsPanel extends BasePanel<List<GeocodingResult>> { public GeocodeResultsPanel(final IModel<List<GeocodingResult>> listModel) { super(listModel); add(new AjaxEventListener(GeocodingResult.class)); add(new WebMarkupContainer("noResult") { @Override public boolean isVisible() { return listModel.getObject().isEmpty(); } }); add(new AjaxLink("closeButton") { @Override public void onClick(final AjaxRequestTarget target) { onClose(target); } }); final ListView<GeocodingResult> resultList = new ListView<GeocodingResult>("resultList", listModel) { @Override protected void populateItem(ListItem<GeocodingResult> item) { item.add(new AjaxLink<GeocodingResult>("chooseLink", item.getModel()) { { add(new Label("address", getModelObject().getAddress())); } @Override public void onClick(AjaxRequestTarget target) { onSelect(target, getModelObject()); } }); } /** * To allow usage of wicket:enclosure for containing table. * * @return */ @Override public boolean isVisible() { return !listModel.getObject().isEmpty(); } }; add(resultList); } protected abstract void onSelect(final AjaxRequestTarget target, final GeocodingResult modelObject); }