/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.eo.web; 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.AbstractLink; 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.layergroup.LayerGroupProvider; import org.geoserver.web.data.layergroup.LayerGroupProviderFilter; import org.geoserver.web.data.workspace.WorkspaceEditPage; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geoserver.web.wicket.SimpleBookmarkableLink; import org.springframework.security.core.context.SecurityContextHolder; /** * A layer group table panel. * * @author Davide Savazzi - geo-solutions.it */ @SuppressWarnings("serial") public class LayerGroupTablePanel extends GeoServerTablePanel<LayerGroupInfo> { protected AbstractLink[] editSelectionLinks; public LayerGroupTablePanel(String id) { this(id, null); } public LayerGroupTablePanel(String id, LayerGroupProviderFilter groupFilter) { super("table", new LayerGroupProvider(groupFilter), true); } public void setSelectionLinks(AbstractLink[] editSelectionLinks) { this.editSelectionLinks = editSelectionLinks; } public AbstractLink[] getSelectionLinks() { return editSelectionLinks; } @Override protected Component getComponentForProperty(String id, IModel<LayerGroupInfo> itemModel, Property<LayerGroupInfo> property) { if (property == LayerGroupProvider.NAME) { return createLayerGroupLink(id, itemModel); } if (property == LayerGroupProvider.WORKSPACE) { return createWorkspaceLink(id, itemModel); } return null; } @Override protected void onSelectionUpdate(AjaxRequestTarget target) { boolean canEdit = true; if (!getSelection().isEmpty()) { if (!isAuthenticatedAsAdmin()) { // if any global layer groups are selected, don't allow edit for (LayerGroupInfo lg : getSelection()) { if (lg.getWorkspace() == null) { canEdit = false; break; } } } } else { canEdit = false; } if (editSelectionLinks != null) { for (AbstractLink link : editSelectionLinks) { link.setEnabled(canEdit); target.add(link); } } } protected Component createLayerGroupLink(String id, IModel itemModel) { IModel groupNameModel = LayerGroupProvider.NAME.getModel(itemModel); IModel wsModel = LayerGroupProvider.WORKSPACE.getModel(itemModel); String groupName = (String) groupNameModel.getObject(); String wsName = (String) wsModel.getObject(); return new SimpleBookmarkableLink(id, EoLayerGroupEditPage.class, groupNameModel, EoLayerGroupEditPage.GROUP, groupName, EoLayerGroupEditPage.WORKSPACE, wsName); } protected Component createWorkspaceLink(String id, IModel itemModel) { IModel wsNameModel = LayerGroupProvider.WORKSPACE.getModel(itemModel); String wsName = (String) wsNameModel.getObject(); if (wsName != null) { return new SimpleBookmarkableLink(id, WorkspaceEditPage.class, new Model(wsName), "name", wsName); } else { return new WebMarkupContainer(id); } } protected boolean isAuthenticatedAsAdmin() { return ComponentAuthorizer.ADMIN.isAccessAllowed(GeoServerSecuredPage.class, SecurityContextHolder.getContext().getAuthentication()); } }