Skip to content

Commit

Permalink
Update the layer page to put the Layer Title as the first column of t…
Browse files Browse the repository at this point in the history
…he table

Add in Title as the second column
Remove workspace column
Removed ? on Enabled
Create Name column with workspace and layer name
Removed the WORKSPACE property, since it wasn't used anymore.
Fall back to getting the WS name manually.
  • Loading branch information
Devon Tucker committed Jan 22, 2016
1 parent 7de3fde commit 6dadaa6
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 43 deletions.
@@ -1,24 +1,19 @@
/* (c) 2014 - 2015 Open Source Geospatial Foundation - all rights reserved
/* (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.layer;

import static org.geoserver.web.data.layer.LayerProvider.ENABLED;
import static org.geoserver.web.data.layer.LayerProvider.NAME;
import static org.geoserver.web.data.layer.LayerProvider.SRS;
import static org.geoserver.web.data.layer.LayerProvider.STORE;
import static org.geoserver.web.data.layer.LayerProvider.TYPE;
import static org.geoserver.web.data.layer.LayerProvider.WORKSPACE;

import org.apache.commons.lang.StringUtils;
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.image.Image;
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.apache.wicket.request.resource.PackageResourceReference;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.LayerInfo;
Expand All @@ -32,12 +27,13 @@
import org.geoserver.web.data.store.CoverageStoreEditPage;
import org.geoserver.web.data.store.DataAccessEditPage;
import org.geoserver.web.data.store.WMSStoreEditPage;
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;

import static org.geoserver.web.data.layer.LayerProvider.*;

/**
* Page listing all the available layers. Follows the usual filter/sort/page approach,
* provides ways to bulk delete layers and to add new ones
Expand All @@ -58,16 +54,14 @@ protected Component getComponentForProperty(String id, IModel<LayerInfo> itemMod
Property<LayerInfo> property) {
if(property == TYPE) {
Fragment f = new Fragment(id, "iconFragment", LayerPage.this);
f.add(new Image("layerIcon", icons.getSpecificLayerIcon((LayerInfo) itemModel.getObject())));
f.add(new Image("layerIcon", icons.getSpecificLayerIcon(itemModel.getObject())));
return f;
} else if(property == WORKSPACE) {
return workspaceLink(id, itemModel);
} else if(property == STORE) {
return storeLink(id, itemModel);
} else if(property == NAME) {
return layerLink(id, itemModel);
} else if(property == ENABLED) {
LayerInfo layerInfo = (LayerInfo) itemModel.getObject();
LayerInfo layerInfo = itemModel.getObject();
// ask for enabled() instead of isEnabled() to account for disabled resource/store
boolean enabled = layerInfo.enabled();
PackageResourceReference icon = enabled? icons.getEnabledIcon() : icons.getDisabledIcon();
Expand All @@ -76,10 +70,12 @@ protected Component getComponentForProperty(String id, IModel<LayerInfo> itemMod
return f;
} else if(property == SRS) {
return new Label(id, SRS.getModel(itemModel));
} else if (property == TITLE) {
return titleLink(id, itemModel);
}
throw new IllegalArgumentException("Don't know a property named " + property.getName());
}

@Override
protected void onSelectionUpdate(AjaxRequestTarget target) {
removal.setEnabled(table.getSelection().size() > 0);
Expand All @@ -93,7 +89,24 @@ protected void onSelectionUpdate(AjaxRequestTarget target) {
add(dialog = new GeoServerDialog("dialog"));
setHeaderPanel(headerPanel());
}


private Component titleLink(String id, IModel<LayerInfo> itemModel) {

IModel<String> layerNameModel = (IModel<String>) NAME.getModel(itemModel);
IModel<String> layerTitleModel = (IModel<String>) TITLE.getModel(itemModel);
String layerTitle = layerTitleModel.getObject();
String layerName = layerNameModel.getObject();
String wsName = getWorkspaceNameFromLayerInfo(itemModel.getObject());

IModel linkModel = layerTitleModel;
if (StringUtils.isEmpty(layerTitle)) {
linkModel = layerNameModel;
}

return new SimpleBookmarkableLink(id, ResourceConfigurationPage.class, linkModel,
ResourceConfigurationPage.NAME, layerName, ResourceConfigurationPage.WORKSPACE, wsName);
}

protected Component headerPanel() {
Fragment header = new Fragment(HEADER_PANEL, "header", this);

Expand All @@ -111,16 +124,17 @@ protected Component headerPanel() {
private Component layerLink(String id, final IModel<LayerInfo> model) {
@SuppressWarnings("unchecked")
IModel<String> layerNameModel = (IModel<String>) NAME.getModel(model);
String wsName = WORKSPACE.getModel(model).getObject().toString();
String layerName = (String) layerNameModel.getObject();
return new SimpleBookmarkableLink(id, ResourceConfigurationPage.class, layerNameModel,
String wsName = getWorkspaceNameFromLayerInfo(model.getObject());
String layerName = layerNameModel.getObject();
String linkTitle = wsName + ":" + layerName;
return new SimpleBookmarkableLink(id, ResourceConfigurationPage.class, new Model<>(linkTitle),
ResourceConfigurationPage.NAME, layerName, ResourceConfigurationPage.WORKSPACE, wsName);
}

private Component storeLink(String id, final IModel<LayerInfo> model) {
@SuppressWarnings("unchecked")
IModel<String> storeModel = (IModel<String>) STORE.getModel(model);
String wsName = WORKSPACE.getModel(model).getObject().toString();
String wsName = getWorkspaceNameFromLayerInfo(model.getObject());
String storeName = storeModel.getObject();
LayerInfo layer = model.getObject();
StoreInfo store = layer.getResource().getStore();
Expand All @@ -139,11 +153,13 @@ private Component storeLink(String id, final IModel<LayerInfo> model) {
}
}

private Component workspaceLink(String id, final IModel<LayerInfo> model) {
@SuppressWarnings("unchecked")
IModel<String> nameModel = (IModel<String>) WORKSPACE.getModel(model);
return new SimpleBookmarkableLink(id, WorkspaceEditPage.class, nameModel,
"name", (String) nameModel.getObject());
/**
* Helper to grab the workspace name from the layer info
* @param li the li
* @return the workspace name of the ws the layer belong
*/
private String getWorkspaceNameFromLayerInfo(LayerInfo li) {
return li.getResource().getStore().getWorkspace().getName();
}

@Override
Expand Down
@@ -1,17 +1,11 @@
/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
/* (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.layer;

import static org.geoserver.catalog.Predicates.sortBy;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import com.google.common.collect.Lists;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.apache.wicket.model.IModel;
import org.geoserver.catalog.Catalog;
Expand All @@ -23,7 +17,12 @@
import org.opengis.filter.Filter;
import org.opengis.filter.sort.SortBy;

import com.google.common.collect.Lists;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import static org.geoserver.catalog.Predicates.sortBy;

/**
* Provides a filtered, sorted view over the catalog layers.
Expand All @@ -47,18 +46,17 @@
*/
@SuppressWarnings("serial")
public class LayerProvider extends GeoServerDataProvider<LayerInfo> {
static final Property<LayerInfo> TYPE = new BeanProperty<LayerInfo>("type",
static final Property<LayerInfo> TYPE = new BeanProperty<>("type",
"type");

static final Property<LayerInfo> WORKSPACE = new BeanProperty<LayerInfo>(
"workspace", "resource.store.workspace.name");

static final Property<LayerInfo> STORE = new BeanProperty<LayerInfo>(
static final Property<LayerInfo> STORE = new BeanProperty<>(
"store", "resource.store.name");

static final Property<LayerInfo> NAME = new BeanProperty<LayerInfo>("name",
static final Property<LayerInfo> NAME = new BeanProperty<>("name",
"name");

static final Property<LayerInfo> TITLE = new BeanProperty<>("title", "title");

/**
* A custom property that uses the derived enabled() property instead of isEnabled() to account
* for disabled resource/store
Expand Down Expand Up @@ -109,8 +107,8 @@ public int compare(LayerInfo o1, LayerInfo o2) {
}
};

static final List<Property<LayerInfo>> PROPERTIES = Arrays.asList(TYPE,
WORKSPACE, STORE, NAME, ENABLED, SRS);
static final List<Property<LayerInfo>> PROPERTIES = Arrays.asList(TYPE, TITLE,
NAME, STORE, ENABLED, SRS);

@Override
protected List<LayerInfo> getItems() {
Expand Down
Expand Up @@ -413,10 +413,11 @@ LayerPage.description = Manage the layers being published by GeoServer
LayerPage.layerList = Layer List
LayerPage.removeSelected = Remove selected layers
LayerPage.th.SRS = Native SRS
LayerPage.th.enabled = Enabled?
LayerPage.th.name = Layer Name
LayerPage.th.enabled = Enabled
LayerPage.th.name = Name
LayerPage.th.remove = Remove
LayerPage.th.store = Store
LayerPage.th.title = Title
LayerPage.th.type = Type
LayerPage.th.workspace = Workspace
LayerPage.title = Layers
Expand Down

0 comments on commit 6dadaa6

Please sign in to comment.