/* (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.workspace; import static org.geoserver.web.data.workspace.WorkspaceProvider.DEFAULT; import static org.geoserver.web.data.workspace.WorkspaceProvider.NAME; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.web.CatalogIconFactory; import org.geoserver.web.ComponentAuthorizer; import org.geoserver.web.GeoServerSecuredPage; import org.geoserver.web.data.SelectionRemovalLink; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geoserver.web.wicket.Icon; import org.geoserver.web.wicket.SimpleBookmarkableLink; /** * Lists available workspaces, links to them, allows for addition and removal */ public class WorkspacePage extends GeoServerSecuredPage { private static final long serialVersionUID = 3084639304127909774L; WorkspaceProvider provider = new WorkspaceProvider(); GeoServerTablePanel<WorkspaceInfo> table; GeoServerDialog dialog; SelectionRemovalLink removal; public WorkspacePage() { // the middle table add(table = new GeoServerTablePanel<WorkspaceInfo>("table", provider, true) { private static final long serialVersionUID = 8028081894753417294L; @Override protected Component getComponentForProperty(String id, IModel<WorkspaceInfo> itemModel, Property<WorkspaceInfo> property) { if ( property == NAME ) { return workspaceLink(id, itemModel); } else if (property == DEFAULT) { if(getCatalog().getDefaultWorkspace().equals(itemModel.getObject())) return new Icon(id, CatalogIconFactory.ENABLED_ICON); else return new Label(id, ""); } throw new IllegalArgumentException("No such property "+ property.getName()); } @Override protected void onSelectionUpdate(AjaxRequestTarget target) { removal.setEnabled(table.getSelection().size() > 0); target.add(removal); } }); table.setOutputMarkupId(true); // 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<WorkspaceNewPage>("addNew", WorkspaceNewPage.class)); // the removal button header.add(removal = new SelectionRemovalLink("removeSelected", table, dialog)); removal.setOutputMarkupId(true); removal.setEnabled(false); //check for full admin, we don't allow workspace admins to add new workspaces header.setEnabled(isAuthenticatedAsAdmin()); return header; } Component workspaceLink(String id, final IModel<WorkspaceInfo> itemModel) { IModel<?> nameModel = NAME.getModel(itemModel); return new SimpleBookmarkableLink(id, WorkspaceEditPage.class, nameModel, "name", (String) nameModel.getObject()); } @Override protected ComponentAuthorizer getPageAuthorizer() { return ComponentAuthorizer.WORKSPACE_ADMIN; } }