package org.geoserver.community.css.web; import java.util.Arrays; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.model.IModel; import org.geoserver.catalog.StyleInfo; import org.geoserver.web.wicket.GeoServerDataProvider; import static org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerTablePanel; public class StyleChooser extends Panel { private GeoServerDataProvider<StyleInfo> styleProvider; private GeoServerTablePanel<StyleInfo> styleTable; public StyleChooser(String id, final CssDemoPage demo) { super(id); styleProvider = new GeoServerDataProvider<StyleInfo>() { Property<StyleInfo> name = new AbstractProperty<StyleInfo>("Name") { public Object getPropertyValue(StyleInfo x) { return x.getName(); } }; protected List<StyleInfo> getItems() { return demo.catalog().getStyles(); } public List<Property<StyleInfo>> getProperties() { return Arrays.asList(name); } }; styleTable = new GeoServerTablePanel<StyleInfo>("style.table", styleProvider) { @Override public Component getComponentForProperty( String id, IModel value, final Property<StyleInfo> property ) { final StyleInfo style = (StyleInfo) value.getObject(); Fragment fragment = new Fragment(id, "style.link", StyleChooser.this); AjaxLink link = new AjaxLink("link") { { add(new Label( "style.name", new Model(property.getPropertyValue(style).toString()) )); } public void onClick(AjaxRequestTarget target) { PageParameters params = new PageParameters(); params.put( "layer", demo.getLayer().getPrefixedName() ); params.put("style", style.getName()); setResponsePage(CssDemoPage.class, params); } }; fragment.add(link); return fragment; } }; add(styleTable); } }