Package org.geoserver.wps

Source Code of org.geoserver.wps.GetCapabilities

/* 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.setProviderNamegeoServer.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;
    }
}
TOP

Related Classes of org.geoserver.wps.GetCapabilities

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.