/* (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.image.Image; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.request.resource.PackageResourceReference; /** * A panel which encapsulates a link containing a image and an optional label. * * @author Justin Deoliveira, OpenGeo * */ @SuppressWarnings("serial") public abstract class ImageAjaxLink<T> extends Panel { protected Image image; protected AjaxLink<T> link; /** * Constructs the panel with a link containing an image. */ public ImageAjaxLink( String id, PackageResourceReference imageRef ) { this( id, imageRef, "" ); } /** * Constructs the panel with a link containing an image and a label. */ public ImageAjaxLink( String id, PackageResourceReference imageRef, String label ) { super( id ); link = new AjaxLink<T>( "link" ) { @Override public void onClick(AjaxRequestTarget target) { ImageAjaxLink.this.onClick(target); } @Override protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { super.updateAjaxAttributes(attributes); attributes.getAjaxCallListeners().add(ImageAjaxLink.this.getAjaxCallListener()); } }; add(link); link.add(image = new Image( "image", imageRef ) ); link.add( new Label( "label", label ) ); } protected IAjaxCallListener getAjaxCallListener() { return null; } /** * Returns the image contained in this link (allows playing with its attributes) * */ public Image getImage() { return image; } /** * Returns the link wrapped by the {@link ImageAjaxLink} panel * (allows playing with its attributes and enable/disable the link) * */ public AjaxLink<T> getLink() { return link; } /** * Handles the onClick() event generated by clicking the link. */ protected abstract void onClick(AjaxRequestTarget target); }