/* (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.data.layergroup;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.web.wicket.GeoServerDataProvider;
import org.geoserver.web.wicket.GeoServerDataProvider.BeanProperty;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geoserver.web.wicket.SimpleAjaxLink;
/**
* Reusable base class listing layer groups with clickable names
*/
public abstract class LayerGroupListPanel extends GeoServerTablePanel<LayerGroupInfo> {
private static final long serialVersionUID = -4906590200057066912L;
static Property<LayerGroupInfo> NAME = new BeanProperty<LayerGroupInfo>("name", "name");
static Property<LayerGroupInfo> WORKSPACE = new BeanProperty<LayerGroupInfo>("workspace",
"workspace.name");
public LayerGroupListPanel(String id, WorkspaceInfo workspace) {
super(id, new GeoServerDataProvider<LayerGroupInfo>() {
private static final long serialVersionUID = 6471805356307807737L;
@Override
protected List<LayerGroupInfo> getItems() {
if (workspace == null) {
return getCatalog().getLayerGroups();
} else {
return getCatalog().getLayerGroupsByWorkspace(workspace);
}
}
@Override
protected List<Property<LayerGroupInfo>> getProperties() {
return Arrays.asList(NAME, WORKSPACE);
}
public IModel<LayerGroupInfo> newModel(LayerGroupInfo object) {
return new LayerGroupDetachableModel((LayerGroupInfo) object);
}
});
getTopPager().setVisible(false);
}
@SuppressWarnings("unchecked")
@Override
protected Component getComponentForProperty(String id, final IModel<LayerGroupInfo> itemModel,
Property<LayerGroupInfo> property) {
IModel<?> model = property.getModel(itemModel);
if (NAME == property) {
return new SimpleAjaxLink<String>(id, (IModel<String>) model) {
private static final long serialVersionUID = -5189072047640596694L;
@Override
protected void onClick(AjaxRequestTarget target) {
LayerGroupInfo layerGroup = itemModel.getObject();
handleLayerGroup(layerGroup, target);
}
};
} else {
return new Label(id, model);
}
}
protected void handleLayerGroup(LayerGroupInfo layerGroup, AjaxRequestTarget target) {
}
}