package wicket.contrib.gmap3.overlay; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.request.Request; import org.apache.wicket.request.cycle.RequestCycle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import wicket.contrib.gmap3.GMap; import wicket.contrib.gmap3.ReviewPending; @ReviewPending // remove when class is tested public class OverlayListener extends AbstractDefaultAjaxBehavior { private static final Logger LOG = LoggerFactory.getLogger(OverlayListener.class); @Override protected void onBind() { if ( !( getComponent() instanceof GMap ) ) { throw new IllegalArgumentException( "must be bound to GMap" ); } } private static final long serialVersionUID = 1L; /** * This method is called by event listeners that are registered with WicketMap.addOverlayListener. * Look at this method if you need to add more parameters. */ @Override protected void respond(final AjaxRequestTarget target) { final Request request = RequestCycle.get().getRequest(); final String overlayId = request.getRequestParameters().getParameterValue("overlay.overlayId").toString(); final String event = request.getRequestParameters().getParameterValue("overlay.event").toString(); LOG.debug("OverlayListener.respond(event [{}], overlayId [{}]", event, overlayId); getGMap().update(); // final String latLng = request.getRequestParameters().getParameterValue("overlay.latLng").toString(); // TODO (oliverb - ?): this is ugly // the id's of the Overlays are unique within the ArrayList // maybe we should change that collection for (final GOverlay overlay : getGMap().getOverlays()) { if (overlay.getId().equals(overlayId)) { overlay.onEvent(target, GOverlayEvent.from(event)); break; } } } public String getJSinit() { return getGMap().getJSinvoke("overlayListenerCallbackUrl = '" + getCallbackUrl() + "'"); } protected final GMap getGMap() { return (GMap) getComponent(); } }