/* 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.wps; import java.util.Collections; import java.util.List; import net.opengis.ows11.KeywordsType; import net.opengis.ows11.OperationType; import net.opengis.ows11.OperationsMetadataType; import net.opengis.ows11.Ows11Factory; import net.opengis.ows11.ResponsiblePartySubsetType; import net.opengis.ows11.ServiceIdentificationType; import net.opengis.ows11.ServiceProviderType; import net.opengis.wps10.DefaultType2; import net.opengis.wps10.GetCapabilitiesType; import net.opengis.wps10.LanguagesType; import net.opengis.wps10.LanguagesType1; import net.opengis.wps10.ProcessBriefType; import net.opengis.wps10.ProcessOfferingsType; import net.opengis.wps10.WPSCapabilitiesType; import net.opengis.wps10.Wps10Factory; import org.geoserver.config.GeoServerInfo; import org.geoserver.ows.Ows11Util; import org.geoserver.ows.util.RequestUtils; import org.geotools.process.ProcessFactory; import org.geotools.process.Processors; import org.opengis.feature.type.Name; /** * @author Lucas Reed, Refractions Research Inc */ public class GetCapabilities { public WPSInfo wps; public GetCapabilities(WPSInfo wps) { this.wps = wps; } public WPSCapabilitiesType run(GetCapabilitiesType request) throws WPSException { // do the version negotiation dance List<String> provided = Collections.singletonList("1.0.0"); List<String> accepted = null; if (request.getAcceptVersions() != null) accepted = request.getAcceptVersions().getVersion(); String version = RequestUtils.getVersionOws11(provided, accepted); if (!"1.0.0".equals(version)) { throw new WPSException("Could not understand version:" + version); } // TODO: add update sequence negotiation // encode the response Wps10Factory wpsf = Wps10Factory.eINSTANCE; Ows11Factory owsf = Ows11Factory.eINSTANCE; WPSCapabilitiesType caps = wpsf.createWPSCapabilitiesType(); caps.setVersion("1.0.0"); //TODO: make configurable caps.setLang( "en" ); //ServiceIdentification ServiceIdentificationType si = owsf.createServiceIdentificationType(); caps.setServiceIdentification( si ); si.getTitle().add( Ows11Util.languageString( wps.getTitle() ) ); si.getAbstract().add( Ows11Util.languageString( wps.getAbstract() ) ); KeywordsType kw = Ows11Util.keywords( wps.getKeywords( ) ); ; if ( kw != null ) { si.getKeywords().add( kw ); } si.setServiceType( Ows11Util.code( "WPS" ) ); si.getServiceTypeVersion().add( "1.0.0" ); si.setFees( wps.getFees() ); if ( wps.getAccessConstraints() != null ) { si.getAccessConstraints().add( wps.getAccessConstraints() ); } //ServiceProvider ServiceProviderType sp = owsf.createServiceProviderType(); caps.setServiceProvider( sp ); //TODO: set provder name from context GeoServerInfo geoServer = wps.getGeoServer().getGlobal(); if ( geoServer.getContact().getContactOrganization() != null ) { sp.setProviderName( geoServer.getContact().getContactOrganization() ); } else { sp.setProviderName( "GeoServer" ); } sp.setProviderSite(owsf.createOnlineResourceType()); sp.getProviderSite().setHref( geoServer.getOnlineResource() ); sp.setServiceContact( responsibleParty( geoServer, owsf ) ); //OperationsMetadata OperationsMetadataType om = owsf.createOperationsMetadataType(); caps.setOperationsMetadata( om ); OperationType gco = owsf.createOperationType(); gco.setName("GetCapabilities"); gco.getDCP().add( Ows11Util.dcp( "wps", gco.getName(), request ) ); om.getOperation().add( gco ); OperationType dpo = owsf.createOperationType(); dpo.setName( "DescribeProcess"); dpo.getDCP().add( Ows11Util.dcp( "wps", dpo.getName(), request ) ); om.getOperation().add( dpo ); OperationType eo = owsf.createOperationType(); eo.setName( "Execute" ); eo.getDCP().add( Ows11Util.dcp( "wps", eo.getName(), request ) ); om.getOperation().add( eo ); ProcessOfferingsType po = wpsf.createProcessOfferingsType(); caps.setProcessOfferings( po ); for(ProcessFactory pf : Processors.getProcessFactories()) { for (Name name : pf.getNames()) { ProcessBriefType p = wpsf.createProcessBriefType(); p.setProcessVersion(pf.getVersion(name)); po.getProcess().add( p ); p.setIdentifier(Ows11Util.code(name)); p.setTitle(Ows11Util.languageString( pf.getTitle(name).toString())); p.setAbstract(Ows11Util.languageString( pf.getDescription(name).toString())); } } LanguagesType1 languages = wpsf.createLanguagesType1(); caps.setLanguages( languages ); DefaultType2 defaultLanguage = wpsf.createDefaultType2(); languages.setDefault(defaultLanguage); defaultLanguage.setLanguage("en-US"); LanguagesType supportedLanguages = wpsf.createLanguagesType(); languages.setSupported( supportedLanguages ); supportedLanguages.getLanguage().add( "en-US"); return caps; // Version detection and alternative invocation if being implemented. } ResponsiblePartySubsetType responsibleParty( GeoServerInfo global, Ows11Factory f ) { ResponsiblePartySubsetType rp = f.createResponsiblePartySubsetType(); return rp; } }