/* (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.resource;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.CoverageView;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.web.data.layer.CoverageViewEditPage;
import org.geoserver.web.data.store.panel.ColorPickerPanel;
import org.geoserver.web.data.store.panel.TextParamPanel;
import org.geoserver.web.util.MapModel;
/**
* A configuration panel for CoverageInfo properties that related to WCS publication
* @author Andrea Aime - OpenGeo
*
*/
@SuppressWarnings("serial")
public class CoverageResourceConfigurationPanel extends ResourceConfigurationPanel {
public CoverageResourceConfigurationPanel(final String panelId, final IModel model){
super(panelId, model);
final CoverageInfo coverage = (CoverageInfo) getResourceInfo();
final Map<String, Serializable> parameters = coverage.getParameters();
List<String> keys = new ArrayList<String>(parameters.keySet());
Collections.sort(keys);
final IModel paramsModel = new PropertyModel(model, "parameters");
ListView paramsList = new ListView("parameters", keys) {
@Override
protected void populateItem(ListItem item) {
Component inputComponent = getInputComponent("parameterPanel", paramsModel,
item.getDefaultModelObjectAsString());
item.add(inputComponent);
}
};
WebMarkupContainer coverageViewContainer = new WebMarkupContainer("editCoverageViewContainer");
add(coverageViewContainer);
final CoverageView coverageView = coverage.getMetadata().get(CoverageView.COVERAGE_VIEW, CoverageView.class);
coverageViewContainer.add(new Link("editCoverageView") {
@Override
public void onClick() {
CoverageInfo coverageInfo = (CoverageInfo) model.getObject();
try {
CoverageStoreInfo store = coverageInfo.getStore();
WorkspaceInfo workspace = store.getWorkspace();
setResponsePage(new CoverageViewEditPage(workspace.getName(), store.getName(), coverageInfo.getName(), coverageInfo,((ResourceConfigurationPage) this.getPage())));
} catch(Exception e) {
LOGGER.log(Level.SEVERE, "Failure opening the Virtual Coverage edit page", e);
error(e.toString());
}
}
});
coverageViewContainer.setVisible(coverageView != null);
// needed for form components not to loose state
paramsList.setReuseItems(true);
add(paramsList);
if(keys.size() == 0)
setVisible(false);
}
private Component getInputComponent(String id, IModel paramsModel,
String keyName) {
if (keyName.contains("Color"))
return new ColorPickerPanel(id, new MapModel(paramsModel, keyName),
new org.apache.wicket.model.ResourceModel(keyName, keyName), false);
else
return new TextParamPanel(id, new MapModel(paramsModel, keyName),
new org.apache.wicket.model.ResourceModel(keyName, keyName), false);
}
}