/* (c) 2014 - 2015 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.wfs; import java.util.ArrayList; import java.util.HashMap; import org.geoserver.config.GeoServer; import org.geoserver.config.util.XStreamPersister; import org.geoserver.config.util.XStreamServiceLoader; import org.geoserver.platform.GeoServerResourceLoader; import org.geoserver.wfs.GMLInfo.SrsNameStyle; import com.thoughtworks.xstream.XStream; /** * 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 public void initXStreamPersister(XStreamPersister xp, GeoServer gs) { super.initXStreamPersister(xp, gs); initXStreamPersister(xp); } /** * Sets up aliases and allowed types for the xstream persister * @param xs */ public static void initXStreamPersister(XStreamPersister xp) { XStream xs = xp.getXStream(); xs.alias( "wfs", WFSInfo.class, WFSInfoImpl.class ); xs.alias( "version", WFSInfo.Version.class); xs.alias( "gml", GMLInfo.class, GMLInfoImpl.class ); // modify the WFSSettingsResource when xs.allowTypes(new Class[] { WFSInfo.Version.class, GMLInfo.class, GMLInfoImpl.class }); } protected WFSInfo createServiceFromScratch(GeoServer gs) { WFSInfoImpl wfs = new WFSInfoImpl(); wfs.setName("WFS"); wfs.setMaxFeatures(1000000); //gml2 addGml(wfs, WFSInfo.Version.V_10, GMLInfo.SrsNameStyle.XML, true); //gml3 addGml(wfs, WFSInfo.Version.V_11, GMLInfo.SrsNameStyle.URN, false); //gml3.2 addGml(wfs, WFSInfo.Version.V_20, SrsNameStyle.URN2, false); 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 if(service.getGML() == null) { ((WFSInfoImpl) service).setGML(new HashMap<WFSInfo.Version, GMLInfo>()); } GMLInfo gml = service.getGML().get(WFSInfo.Version.V_10); if(gml == null) { addGml(service, WFSInfo.Version.V_10, SrsNameStyle.URL, false); } else if (gml.getOverrideGMLAttributes() == null) { gml.setOverrideGMLAttributes(true); } gml = service.getGML().get(WFSInfo.Version.V_11); if(gml == null) { addGml(service, WFSInfo.Version.V_11, SrsNameStyle.URN, false); } else if (gml.getOverrideGMLAttributes() == null) { gml.setOverrideGMLAttributes(false); } gml = service.getGML().get(WFSInfo.Version.V_20); if (gml == null) { addGml(service, WFSInfo.Version.V_20, SrsNameStyle.URN2, false); } if (service.getSRS() == null) { ((WFSInfoImpl) service).setSRS(new ArrayList<String>()); } return service; } void addGml(WFSInfo info, WFSInfo.Version ver, SrsNameStyle srs, boolean overrideGmlAtts) { GMLInfo gml = new GMLInfoImpl(); gml.setSrsNameStyle(srs); gml.setOverrideGMLAttributes(overrideGmlAtts); info.getGML().put(ver, gml); } }