/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wfs.web;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.Radio;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.validator.MinimumValidator;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.web.services.BaseServiceAdminPage;
import org.geoserver.web.util.MapModel;
import org.geoserver.wfs.GMLInfo;
import org.geoserver.wfs.WFSInfo;
import org.geoserver.wfs.GMLInfo.SrsNameStyle;
import org.geoserver.wfs.response.ShapeZipOutputFormat;
@SuppressWarnings("serial")
public class WFSAdminPage extends BaseServiceAdminPage<WFSInfo> {
public WFSAdminPage() {
super();
}
public WFSAdminPage(PageParameters pageParams) {
super(pageParams);
}
public WFSAdminPage(WFSInfo service) {
super(service);
}
protected Class<WFSInfo> getServiceClass() {
return WFSInfo.class;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
protected void build(final IModel info, Form form) {
form.add( new TextField<Integer>( "maxFeatures" ).add(new MinimumValidator<Integer>(0)) );
form.add( new CheckBox("featureBounding") );
//service level
RadioGroup sl = new RadioGroup( "serviceLevel" );
form.add( sl );
sl.add( new Radio( "basic", new Model( WFSInfo.ServiceLevel.BASIC ) ) );
sl.add( new Radio( "transactional", new Model( WFSInfo.ServiceLevel.TRANSACTIONAL ) ) );
sl.add( new Radio( "complete", new Model( WFSInfo.ServiceLevel.COMPLETE ) ) );
IModel gml2Model = new LoadableDetachableModel(){
public Object load(){
return ((WFSInfo)info.getObject()).getGML().get(WFSInfo.Version.V_10);
}
};
IModel gml3Model = new LoadableDetachableModel(){
public Object load(){
return ((WFSInfo)info.getObject()).getGML().get(WFSInfo.Version.V_11);
}
};
form.add(new GMLPanel("gml2", gml2Model));
form.add(new GMLPanel("gml3", gml3Model));
form.add( new CheckBox("canonicalSchemaLocation") );
// Encode response with one featureMembers element or multiple featureMember elements
RadioGroup eo = new RadioGroup("encodeFeatureMember");
form.add(eo);
eo.add(new Radio("featureMembers", new Model(Boolean.FALSE)));
eo.add(new Radio("featureMember", new Model(Boolean.TRUE)));
PropertyModel metadataModel = new PropertyModel(info, "metadata");
IModel<Boolean> prjFormatModel = new MapModel(metadataModel,
ShapeZipOutputFormat.SHAPE_ZIP_DEFAULT_PRJ_IS_ESRI);
CheckBox defaultPrjFormat = new CheckBox("shapeZipPrjFormat", prjFormatModel);
form.add(defaultPrjFormat);
try {
// This is a temporary meassure until we fully implement ESRI WKT support in GeoTools.
// See discussion in GEOS-4503
GeoServerResourceLoader resourceLoader = GeoServerExtensions
.bean(GeoServerResourceLoader.class);
File esriProjs = resourceLoader.find("user_projections", "esri.properties");
if (null == esriProjs) {
defaultPrjFormat.setEnabled(false);
defaultPrjFormat.getModel().setObject(Boolean.FALSE);
defaultPrjFormat.add(new AttributeModifier("title", true, new Model(
"No esri.properties file "
+ "found in the data directory's user_projections folder. "
+ "This option is not available")));
}
} catch (Exception e) {
LOGGER.log(Level.INFO, e.getMessage(), e);
}
}
static class GMLPanel extends Panel {
public GMLPanel(String id, IModel gmlModel) {
super(id, new CompoundPropertyModel(gmlModel));
//srsNameStyle
List<GMLInfo.SrsNameStyle> choices =
Arrays.asList(SrsNameStyle.values());
DropDownChoice srsNameStyle = new DropDownChoice("srsNameStyle", choices);
add(srsNameStyle);
add(new CheckBox("overrideGMLAttributes"));
}
}
protected String getServiceName(){
return "WFS";
}
}