/* * Constellation - An open source and standard compliant SDI * http://www.constellation-sdi.org * * Copyright 2014 Geomatys. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.constellation.wps.ws; import org.constellation.dto.AccessConstraint; import org.constellation.dto.Contact; import org.constellation.dto.Details; import org.geotoolkit.ows.xml.AbstractContact; import org.geotoolkit.ows.xml.AbstractDCP; import org.geotoolkit.ows.xml.AbstractDomain; import org.geotoolkit.ows.xml.AbstractOnlineResourceType; import org.geotoolkit.ows.xml.AbstractOperation; import org.geotoolkit.ows.xml.AbstractOperationsMetadata; import org.geotoolkit.ows.xml.AbstractResponsiblePartySubset; import org.geotoolkit.ows.xml.AbstractServiceIdentification; import org.geotoolkit.ows.xml.AbstractServiceProvider; import org.geotoolkit.ows.xml.OWSXmlFactory; import org.geotoolkit.wps.xml.WPSCapabilities; import org.geotoolkit.wps.xml.WPSXmlFactory; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.apache.sis.util.ArgumentChecks.ensureNonNull; /** * WPS Constants * * @author Quentin Boileau (Geomatys) */ public final class WPSConstant { private WPSConstant() {} /** * WPS Query service */ public static final String WPS_SERVICE = "WPS"; /** * Version */ public static final String WPS_1_0_0 = "1.0.0"; /** * Lang */ public static final String WPS_LANG = "en-EN"; /** * Request parameters. */ public static final String GETCAPABILITIES = "GetCapabilities"; public static final String DESCRIBEPROCESS = "DescribeProcess"; public static final String EXECUTE = "Execute"; public static final String IDENTIFER_PARAMETER = "IDENTIFIER"; public static final String LANGUAGE_PARAMETER = "LANGUAGE"; public static final String DATA_INPUTS_PARAMETER = "DATAINPUTS"; public static final String RESPONSE_DOCUMENT_PARAMETER = "RESPONSEDOCUMENT"; public static final String RAW_DATA_OUTPUT_PARAMETER = "RAWDATAOUTPUT"; // Input/output parameters public static final String MIME_TYPE_PARAMETER = "MIMETYPE"; public static final String ENCODING_PARAMETER = "ENCODING"; public static final String SCHEMA_PARAMETER = "SCHEMA"; public static final String HREF_PARAMETER = "HREF"; // The WPS specification seems to accept either the attribute mimeType or format to set a mime type public static final String FORMAT_PARAMETER = "FORMAT"; public static final String METHOD_PARAMETER = "METHOD"; public static final String HEADER_PARAMETER = "HEADER"; public static final String BODY_PARAMETER = "BODY"; public static final String BODY_REFERENCE_PARAMETER = "BODYREFERENCE"; public static final String DATA_TYPE_PARAMETER = "DATATYPE"; public static final String UOM_PARAMETER = "UOM"; public static final String AS_REFERENCE_PARAMETER = "asReference"; // CRS and BoundingBox identifier public static final String BOUNDING_BOX_IDENTIFIER_PARAMETER = "ows:boundingbox"; public static final String CRS_IDENTIFIER_PARAMETER = "urn:ogc:def:crs"; // ResponseDocument options public static final String LINEAGE_PARAMETER = "lineage"; public static final String STATUS_PARAMETER = "status"; public static final String STORE_EXECUTE_RESPONSE_PARAMETER = "storeExecuteResponse"; /* Maximum size in megabytes for a complex input */ public static final int MAX_MB_INPUT_COMPLEX = 100; /** * Process identifier prefix to uniquely identifies process using OGC URN code. */ public static final String PROCESS_PREFIX = "urn:ogc:cstl:wps:"; public static final AbstractOperationsMetadata OPERATIONS_METADATA; static { final List<AbstractDCP> getAndPost = new ArrayList<>(); getAndPost.add(OWSXmlFactory.buildDCP("1.1.0", "somURL", "someURL")); final List<AbstractDCP> onlyPost = new ArrayList<>(); onlyPost.add(OWSXmlFactory.buildDCP("1.1.0", null, "someURL")); final List<AbstractOperation> operations = new ArrayList<>(); final List<AbstractDomain> gcParameters = new ArrayList<>(); gcParameters.add(OWSXmlFactory.buildDomain("1.1.0", "service", Arrays.asList(WPS_SERVICE))); gcParameters.add(OWSXmlFactory.buildDomain("1.1.0", "Acceptversions", Arrays.asList(WPS_1_0_0))); gcParameters.add(OWSXmlFactory.buildDomain("1.1.0", "AcceptFormats", Arrays.asList("text/xml"))); final AbstractOperation getCapabilities = OWSXmlFactory.buildOperation("1.1.0", getAndPost, gcParameters, null, "GetCapabilities"); operations.add(getCapabilities); final List<AbstractDomain> dpParameters = new ArrayList<>(); dpParameters.add(OWSXmlFactory.buildDomain("1.1.0", "service", Arrays.asList(WPS_SERVICE))); dpParameters.add(OWSXmlFactory.buildDomain("1.1.0", "version", Arrays.asList(WPS_1_0_0))); final AbstractOperation describeProcess = OWSXmlFactory.buildOperation("1.1.0", getAndPost, dpParameters, null, "DescribeProcess"); operations.add(describeProcess); final List<AbstractDomain> eParameters = new ArrayList<>(); eParameters.add(OWSXmlFactory.buildDomain("1.1.0", "service", Arrays.asList(WPS_SERVICE))); eParameters.add(OWSXmlFactory.buildDomain("1.1.0", "version", Arrays.asList(WPS_1_0_0))); final AbstractOperation execute = OWSXmlFactory.buildOperation("1.1.0", onlyPost, eParameters, null, "Execute"); operations.add(execute); final List<AbstractDomain> constraints = new ArrayList<>(); constraints.add(OWSXmlFactory.buildDomain("1.1.0", "PostEncoding", Arrays.asList("XML"))); OPERATIONS_METADATA = OWSXmlFactory.buildOperationsMetadata("1.1.0", operations, null, constraints, null); } /** * Generates the base capabilities for a WMS from the service metadata. * * @param metadata the service metadata * @return the service base capabilities */ public static WPSCapabilities createCapabilities(final String version, final Details metadata) { ensureNonNull("metadata", metadata); ensureNonNull("version", version); final Contact currentContact = metadata.getServiceContact(); final AccessConstraint constraint = metadata.getServiceConstraints(); final AbstractServiceIdentification servIdent; if (constraint == null) { servIdent = OWSXmlFactory.buildServiceIdentification("1.1.0", metadata.getName(), metadata.getDescription(), metadata.getKeywords(), WPS_SERVICE, metadata.getVersions(), null, new ArrayList<String>()); } else { servIdent = OWSXmlFactory.buildServiceIdentification("1.1.0", metadata.getName(), metadata.getDescription(), metadata.getKeywords(), WPS_SERVICE, metadata.getVersions(), constraint.getFees(), Arrays.asList(constraint.getAccessConstraint())); } // Create provider part. AbstractContact contact = null; AbstractOnlineResourceType orgUrl = null; final AbstractResponsiblePartySubset responsible; final AbstractServiceProvider servProv; if (currentContact != null) { contact = OWSXmlFactory.buildContact("1.1.0", currentContact.getPhone(), currentContact.getFax(), currentContact.getEmail(), currentContact.getAddress(), currentContact.getCity(), currentContact.getState(), currentContact.getZipCode(), currentContact.getCountry(), currentContact.getHoursOfService(), currentContact.getContactInstructions()); responsible = OWSXmlFactory.buildResponsiblePartySubset("1.1.0", currentContact.getFullname(), currentContact.getPosition(), contact, null); if (currentContact.getUrl() != null) { orgUrl = OWSXmlFactory.buildOnlineResource("1.1.0", currentContact.getUrl()); } servProv = OWSXmlFactory.buildServiceProvider("1.1.0", currentContact.getOrganisation(), orgUrl, responsible); } else { responsible = OWSXmlFactory.buildResponsiblePartySubset("1.1.0", null, null, null, null); servProv = OWSXmlFactory.buildServiceProvider("1.1.0", null, orgUrl, responsible); } // Create capabilities base. return WPSXmlFactory.buildWPSCapabilities(version, servIdent, servProv, null, null, null, null); } }