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.IModel;
import org.apache.wicket.model.Model;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.web.wicket.GeoServerDataProvider;
import static org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.geoserver.web.wicket.GeoServerTablePanel;
public class LayerChooser extends Panel {
private static class LayerProvider extends GeoServerDataProvider<FeatureTypeInfo> {
private CssDemoPage demo;
public LayerProvider(CssDemoPage demo) {
this.demo = demo;
}
public static Property<FeatureTypeInfo> workspace =
new AbstractProperty<FeatureTypeInfo>("Workspace") {
public Object getPropertyValue(FeatureTypeInfo x) {
return x.getStore().getWorkspace().getName();
}
};
public static Property<FeatureTypeInfo> store =
new AbstractProperty<FeatureTypeInfo>("Store") {
public Object getPropertyValue(FeatureTypeInfo x) {
return x.getStore().getName();
}
};
public static Property<FeatureTypeInfo> name =
new AbstractProperty<FeatureTypeInfo>("Layer") {
public Object getPropertyValue(FeatureTypeInfo x) {
return x.getName();
}
};
@Override
public List<FeatureTypeInfo> getItems() {
return demo.catalog().getFeatureTypes();
}
@Override
public List<Property<FeatureTypeInfo>> getProperties() {
return Arrays.asList(workspace, store, name);
}
}
public LayerChooser(final String id, final CssDemoPage demo) {
super(id);
LayerProvider provider = new LayerProvider(demo);
GeoServerTablePanel<FeatureTypeInfo> table =
new GeoServerTablePanel<FeatureTypeInfo>("layer.table", provider) {
@Override
public Component getComponentForProperty(
String id, IModel value, Property<FeatureTypeInfo> property
) {
final FeatureTypeInfo layer = (FeatureTypeInfo) value.getObject();
final String text = property.getPropertyValue(layer).toString();
if (property == LayerProvider.name) {
return new Fragment(id, "layer.link", LayerChooser.this) {
{
add(new AjaxLink("link") {
{
add(new Label("Layer.name", new Model(text)));
}
@Override
public void onClick(AjaxRequestTarget target) {
PageParameters params = new PageParameters();
params.put("layer", layer.getPrefixedName());
params.put("style", demo.getStyleInfo().getName());
setResponsePage(CssDemoPage.class, params);
}
});
}
};
} else {
return new Label(id, text);
}
}
};
}
}