/* (c) 2014 - 2016 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.web.wicket; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; import org.apache.wicket.ajax.attributes.IAjaxCallListener; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; /** * A simple ajax link with a label inside. This is a utility component, * avoid some boilerplate code in case the link is really just * @author Andrea Aime - OpenGeo */ @SuppressWarnings("serial") public abstract class SimpleAjaxLink<T> extends Panel { AjaxLink<T> link; Label label; public SimpleAjaxLink(String id) { this(id, null); } public SimpleAjaxLink(String id, IModel<T> model) { this(id, model, model); } public SimpleAjaxLink(String id, IModel<T> linkModel, IModel<?> labelModel) { super(id, linkModel); add(link = buildAjaxLink(linkModel)); link.add(label = new Label("label", labelModel)); } protected AjaxLink<T> buildAjaxLink(IModel<T> linkModel) { return new AjaxLink<T>("link", linkModel) { @Override public void onClick(AjaxRequestTarget target) { SimpleAjaxLink.this.onClick(target); } @Override protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { super.updateAjaxAttributes(attributes); attributes.getAjaxCallListeners().add(SimpleAjaxLink.this.getAjaxListener()); } }; } protected IAjaxCallListener getAjaxListener() { return null; } public AjaxLink<T> getLink() { return link; } public Label getLabel() { return label; } public T getModelObject() { return link.getModelObject(); } public IModel<T> getModel() { return link.getModel(); } /** * Subclasses should override and provide the behaviour for * * @param target */ protected abstract void onClick(AjaxRequestTarget target); }