/* (c) 2014 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.config.util;
import java.util.List;
import java.util.Map;
import org.geoserver.catalog.Keyword;
import org.geoserver.catalog.MetadataLinkInfo;
import org.geoserver.config.GeoServer;
import org.geoserver.config.ServiceInfo;
import org.geoserver.config.ServiceLoader;
/**
* Base class for service loaders loading from the legacy service.xml file.
* <p>
*
* </p>
*
* @author Justin Deoliveira, The Open Planning Project
*
*/
public abstract class LegacyServiceLoader<T extends ServiceInfo> implements ServiceLoader<T> {
/**
* reader pointing to services.xml
*/
LegacyServicesReader reader;
/**
* Sets the legacy services.xml reader.
* <p>
* This method is called by the GeoServer startup, it should not be called
* by client code.
* </p>
*/
public void setReader( LegacyServicesReader reader ) {
this.reader = reader;
}
/**
* Loads the service.
* <p>
* This method calls through to {@link #load(LegacyServicesReader, GeoServer)}
* </p>
*/
public final T load(GeoServer gs) throws Exception {
return load( reader, gs );
}
/**
* Creates the service configuration object.
* <p>
* Subclasses implementing this method can use the {@link #readCommon(ServiceInfo, Map, GeoServer)}
* method to read those attributes common to all services.
* </p>
*
* @param reader The services.xml reader.
*
*/
abstract public T load( LegacyServicesReader reader, GeoServer geoServer ) throws Exception;
/**
* Reads all the common attributes from the service info class.
* <p>
* This method is intended to be called by subclasses after creating an
* instance of ServiceInfo. Example:
* <pre>
* // read properties
* Map<String,Object> props = reader.wfs();
*
* // create config object
* WFSInfo wfs = new WFSInfoImpl();
*
* //load common properties
* load( wfs, reader );
*
* //load wfs specific properties
* wfs.setServiceLevel( map.get( "serviceLevel") );
* ...
* </pre>
* </p>
*/
protected void readCommon( ServiceInfo service, Map<String,Object> properties, GeoServer gs)
throws Exception {
service.setEnabled( (Boolean) properties.get( "enabled") );
service.setName( (String) properties.get( "name") );
service.setTitle( (String) properties.get( "title") );
service.setAbstract( (String) properties.get( "abstract") );
Map metadataLink = (Map) properties.get("metadataLink");
if ( metadataLink != null ) {
MetadataLinkInfo ml = gs.getCatalog().getFactory().createMetadataLink();
ml.setAbout( (String) metadataLink.get( "about" ) );
ml.setMetadataType( (String) metadataLink.get( "metadataType" ) );
ml.setType( (String) metadataLink.get( "type" ) );
service.setMetadataLink( ml );
}
List<String> keywords = (List<String>) properties.get( "keywords" );
if ( keywords != null ) {
for (String kw : keywords) {
service.getKeywords().add(new Keyword(kw));
}
}
service.setOnlineResource( (String) properties.get( "onlineResource" ) );
service.setFees( (String) properties.get( "fees" ) );
service.setAccessConstraints( (String) properties.get( "accessConstraints" ) );
service.setCiteCompliant((Boolean)properties.get( "citeConformanceHacks"));
service.setMaintainer((String)properties.get( "maintainer" ) );
service.setSchemaBaseURL((String)properties.get("SchemaBaseUrl"));
}
public void save(T service, GeoServer gs) throws Exception {
//do nothing, saving implemented elsewhere
}
@Override
public T create(GeoServer gs) throws Exception {
throw new UnsupportedOperationException("Use xstream loader equivalent instead");
}
}