/* (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 org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.web.ComponentAuthorizer;
import org.geoserver.web.GeoServerSecuredPage;
import org.geoserver.web.data.SelectionRemovalLink;
import org.geoserver.web.data.workspace.WorkspaceEditPage;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.geoserver.web.wicket.GeoServerDialog;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geoserver.web.wicket.SimpleBookmarkableLink;
/**
* Lists layer groups, allows removal and editing
*/
public class LayerGroupPage extends GeoServerSecuredPage {
private static final long serialVersionUID = 5039809655908312633L;
GeoServerTablePanel<LayerGroupInfo> table;
GeoServerDialog dialog;
SelectionRemovalLink removal;
public LayerGroupPage() {
LayerGroupProvider provider = new LayerGroupProvider();
add(table = new GeoServerTablePanel<LayerGroupInfo>( "table", provider, true ) {
private static final long serialVersionUID = 714777934301159139L;
@Override
protected Component getComponentForProperty(String id, IModel<LayerGroupInfo> itemModel,
Property<LayerGroupInfo> property) {
if ( property == LayerGroupProvider.NAME ) {
return layerGroupLink( id, itemModel );
}
if (property == LayerGroupProvider.WORKSPACE) {
return workspaceLink(id, itemModel);
}
return null;
}
@Override
protected void onSelectionUpdate(AjaxRequestTarget target) {
if (!table.getSelection().isEmpty()) {
boolean canRemove = true;
if (!isAuthenticatedAsAdmin()) {
//if any global layer groups are selected, don't allow delete
for (LayerGroupInfo lg : table.getSelection()) {
if (lg.getWorkspace() == null) {
canRemove = false;
break;
}
}
}
removal.setEnabled(canRemove);
}
else {
removal.setEnabled(false);
}
target.add(removal);
}
});
table.setOutputMarkupId(true);
add(table);
// the confirm dialog
add(dialog = new GeoServerDialog("dialog"));
setHeaderPanel(headerPanel());
}
protected Component headerPanel() {
Fragment header = new Fragment(HEADER_PANEL, "header", this);
// the add button
header.add(new BookmarkablePageLink<LayerGroupEditPage>("addNew", LayerGroupEditPage.class));
// the removal button
header.add(removal = new SelectionRemovalLink("removeSelected", table, dialog));
removal.setOutputMarkupId(true);
removal.setEnabled(false);
return header;
}
Component layerGroupLink(String id, IModel<LayerGroupInfo> itemModel) {
IModel<?> groupNameModel = LayerGroupProvider.NAME.getModel(itemModel);
IModel<?> wsModel = LayerGroupProvider.WORKSPACE.getModel(itemModel);
String groupName = (String) groupNameModel.getObject();
String wsName = (String) wsModel.getObject();
if (wsName == null) {
return new SimpleBookmarkableLink(id, LayerGroupEditPage.class, groupNameModel,
LayerGroupEditPage.GROUP, groupName);
} else {
return new SimpleBookmarkableLink(id, LayerGroupEditPage.class, groupNameModel,
LayerGroupEditPage.GROUP, groupName, LayerGroupEditPage.WORKSPACE, wsName);
}
}
Component workspaceLink(String id, IModel<LayerGroupInfo> itemModel) {
IModel<?> wsNameModel = LayerGroupProvider.WORKSPACE.getModel(itemModel);
String wsName = (String) wsNameModel.getObject();
if (wsName != null) {
return new SimpleBookmarkableLink(
id, WorkspaceEditPage.class, new Model<String>(wsName), "name", wsName);
}
else {
return new WebMarkupContainer(id);
}
}
@Override
protected ComponentAuthorizer getPageAuthorizer() {
return ComponentAuthorizer.WORKSPACE_ADMIN;
}
}