/* (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.wcs.web.publish;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
import org.apache.wicket.extensions.markup.html.form.palette.theme.DefaultTheme;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.web.publish.PublishedConfigurationPanel;
import org.geoserver.web.wicket.LiveCollectionModel;
import org.geoserver.web.wicket.SimpleChoiceRenderer;
/**
* A configuration panel for CoverageInfo properties that related to WCS publication
*/
public class WCSLayerConfig extends PublishedConfigurationPanel<LayerInfo> {
private static final long serialVersionUID = 6120092654147588736L;
private static final List<String> WCS_FORMATS = Arrays.asList("GIF","PNG","JPEG","TIFF","GTOPO30","GEOTIFF","IMAGEMOSAIC","ARCGRID");
private static final List<String> INTERPOLATIONS = Arrays.asList("nearest neighbor","bilinear","bicubic");
private List<String> selectedRequestSRSs;
private List<String> selectedResponseSRSs;
private List<String> selectedInterpolationMethods;
private String newRequestSRS;
private String newResponseSRS;
private String newInterpolationMethod;
public WCSLayerConfig(String id, IModel<LayerInfo> model){
super(id, model);
final CoverageInfo coverage = (CoverageInfo) getPublishedInfo().getResource();
add(new ListMultipleChoice<String>("requestSRS",
new PropertyModel<List<String>>(this, "selectedRequestSRSs"),
coverage.getRequestSRS())
);
add(new TextField<String>("newRequestSRS", new PropertyModel<String>(this, "newRequestSRS")));
add(new Button("deleteSelectedRequestSRSs"){
private static final long serialVersionUID = 8363252127939759315L;
public void onSubmit(){
coverage.getRequestSRS().removeAll(selectedRequestSRSs);
selectedRequestSRSs.clear();
}
});
add(new Button("addNewRequestSRS"){
private static final long serialVersionUID = -3493317500980471055L;
public void onSubmit(){
coverage.getRequestSRS().add(newRequestSRS);
newRequestSRS = "";
}
});
add (new ListMultipleChoice<String>("responseSRS",
new PropertyModel<List<String>>(this, "selectedResponseSRSs"),
coverage.getResponseSRS())
);
add(new TextField<String>("newResponseSRS", new PropertyModel<String>(this, "newResponseSRS")));
add(new Button("deleteSelectedResponseSRSs"){
private static final long serialVersionUID = -8727831157546262491L;
public void onSubmit(){
coverage.getResponseSRS().removeAll(selectedResponseSRSs);
selectedResponseSRSs.clear();
}
});
add(new Button("addNewResponseSRS"){
private static final long serialVersionUID = -2888152896129259019L;
public void onSubmit(){
coverage.getResponseSRS().add(newResponseSRS);
newResponseSRS = "";
}
});
add(new DropDownChoice<String>("defaultInterpolationMethod",
new PropertyModel<String>(coverage, "defaultInterpolationMethod"),
new WCSInterpolationModel()));
Palette<String> interpolationMethods = new Palette<String>("interpolationMethods", LiveCollectionModel
.list(new PropertyModel<List<String>>(coverage, "interpolationMethods")),
new WCSInterpolationModel(), new SimpleChoiceRenderer(), 7, false) {
private static final long serialVersionUID = 6815545819673802290L;
/**
* Override otherwise the header is not i18n'ized
*/
@Override
public Component newSelectedHeader(final String componentId) {
return new Label(componentId, new ResourceModel(
"InterpolationMethodsPalette.selectedHeader"));
}
/**
* Override otherwise the header is not i18n'ized
*/
@Override
public Component newAvailableHeader(final String componentId) {
return new Label(componentId, new ResourceModel(
"InterpolationMethodsPalette.availableHeader"));
}
};
interpolationMethods.add(new DefaultTheme());
add(interpolationMethods);
// don't allow editing the native format
TextField<String> nativeFormat = new TextField<String>("nativeFormat", new PropertyModel<String>(coverage, "nativeFormat"));
nativeFormat.setEnabled(false);
add(nativeFormat);
Palette<String> formatPalette = new Palette<String>("formatPalette", LiveCollectionModel
.list(new PropertyModel<List<String>>(coverage, "supportedFormats")), new WCSFormatsModel(),
new SimpleChoiceRenderer(), 10, false) {
private static final long serialVersionUID = -2463012775305597908L;
/**
* Override otherwise the header is not i18n'ized
*/
@Override
public Component newSelectedHeader(final String componentId) {
return new Label(componentId, new ResourceModel(
"FormatsPalette.selectedHeader"));
}
/**
* Override otherwise the header is not i18n'ized
*/
@Override
public Component newAvailableHeader(final String componentId) {
return new Label(componentId, new ResourceModel(
"FormatsPalette.availableHeader"));
}
};
formatPalette.add(new DefaultTheme());
add(formatPalette);
}
static class WCSFormatsModel extends LoadableDetachableModel<ArrayList<String>> {
private static final long serialVersionUID = 1802421566341456007L;
WCSFormatsModel() {
super(new ArrayList<String>(WCS_FORMATS));
}
@Override
protected ArrayList<String> load() {
return new ArrayList<String>(WCS_FORMATS);
}
}
static class WCSInterpolationModel extends LoadableDetachableModel<ArrayList<String>> {
private static final long serialVersionUID = 7328612985196203413L;
WCSInterpolationModel() {
super(new ArrayList<String>(INTERPOLATIONS));
}
@Override
protected ArrayList<String> load() {
return new ArrayList<String>(INTERPOLATIONS);
}
}
}