package org.geoserver.wfs;
import org.geoserver.config.GeoServer;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.config.util.XStreamServiceLoader;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geotools.util.Version;
/**
* Loads and persist the {@link WFSInfo} object to and from xstream
* persistence.
*
* @author Justin Deoliveira, The Open Planning Project
*
*/
public class WFSXStreamLoader extends XStreamServiceLoader<WFSInfo> {
public WFSXStreamLoader(GeoServerResourceLoader resourceLoader) {
super(resourceLoader, "wfs");
}
@Override
protected void initXStreamPersister(XStreamPersister xp, GeoServer gs) {
super.initXStreamPersister(xp, gs);
xp.getXStream().alias( "wfs", WFSInfo.class, WFSInfoImpl.class );
}
protected WFSInfo createServiceFromScratch(GeoServer gs) {
WFSInfoImpl wfs = new WFSInfoImpl();
wfs.setId( "wfs" );
wfs.setName("WFS");
//gml2
GMLInfoImpl gml2 = new GMLInfoImpl();
gml2.setSrsNameStyle( GMLInfo.SrsNameStyle.XML );
gml2.setOverrideGMLAttributes(true);
wfs.getGML().put( WFSInfo.Version.V_10 , gml2 );
//gml3
GMLInfoImpl gml3 = new GMLInfoImpl();
gml3.setSrsNameStyle( GMLInfo.SrsNameStyle.URN );
gml3.setOverrideGMLAttributes(false);
wfs.getGML().put( WFSInfo.Version.V_11 , gml3);
return wfs;
}
public Class<WFSInfo> getServiceClass() {
return WFSInfo.class;
}
@Override
protected WFSInfo initialize(WFSInfo service) {
super.initialize(service);
if ( service.getVersions().isEmpty() ) {
service.getVersions().add(WFSInfo.Version.V_10.getVersion());
service.getVersions().add(WFSInfo.Version.V_11.getVersion());
}
if (!service.getVersions().contains(WFSInfo.Version.V_20.getVersion())) {
service.getVersions().add(WFSInfo.Version.V_20.getVersion());
}
//set the defaults for GMLInfo if they are not set
GMLInfo gml = service.getGML().get(WFSInfo.Version.V_10);
if (gml.getOverrideGMLAttributes() == null) {
gml.setOverrideGMLAttributes(true);
}
gml = service.getGML().get(WFSInfo.Version.V_11);
if (gml.getOverrideGMLAttributes() == null) {
gml.setOverrideGMLAttributes(false);
}
return service;
}
}