/*
* 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.wfs.ws;
import net.jcip.annotations.Immutable;
import org.constellation.dto.AccessConstraint;
import org.constellation.dto.Contact;
import org.constellation.dto.Details;
import org.geotoolkit.ogc.xml.Conformance;
import org.geotoolkit.ogc.xml.FilterXmlFactory;
import org.geotoolkit.ogc.xml.v110.ArithmeticOperatorsType;
import org.geotoolkit.ogc.xml.v110.ComparisonOperatorType;
import org.geotoolkit.ogc.xml.v110.IdCapabilitiesType;
import org.geotoolkit.ogc.xml.v110.ScalarCapabilitiesType;
import org.geotoolkit.ogc.xml.v200.FilterType;
import org.geotoolkit.ogc.xml.v200.LiteralType;
import org.geotoolkit.ogc.xml.v200.PropertyIsEqualToType;
import org.geotoolkit.ogc.xml.v200.ResourceIdentifierType;
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.wfs.xml.WFSCapabilities;
import org.geotoolkit.wfs.xml.WFSXmlFactory;
import org.geotoolkit.wfs.xml.v200.ObjectFactory;
import org.geotoolkit.wfs.xml.v200.ParameterExpressionType;
import org.geotoolkit.wfs.xml.v200.QueryExpressionTextType;
import org.geotoolkit.wfs.xml.v200.QueryType;
import org.geotoolkit.wfs.xml.v200.StoredQueryDescriptionType;
import org.opengis.filter.capability.ComparisonOperators;
import org.opengis.filter.capability.FilterCapabilities;
import org.opengis.filter.capability.GeometryOperand;
import org.opengis.filter.capability.Operator;
import org.opengis.filter.capability.SpatialCapabilities;
import org.opengis.filter.capability.SpatialOperator;
import org.opengis.filter.capability.SpatialOperators;
import javax.ws.rs.core.MediaType;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
import org.apache.sis.util.Version;
import org.geotoolkit.ows.xml.RequestBase;
/**
* WFS Constants
*
* @author Guilhem Legal (Geomatys)
*/
@Immutable
public final class WFSConstants {
private WFSConstants() {}
public static final String HANDLE = "handle";
public static final String NAMESPACE = "namespace";
public static final String FILTER = "filter";
public static final String STR_GETCAPABILITIES = "GetCapabilities";
public static final String STR_DESCRIBEFEATURETYPE = "DescribeFeatureType";
public static final String STR_GETFEATURE = "GetFeature";
public static final String STR_GETGMLOBJECT = "getGMLObject";
public static final String STR_LOCKFEATURE = "lockFeature";
public static final String STR_TRANSACTION = "Transaction";
public static final String STR_DESCRIBE_STORED_QUERIES = "DescribeStoredQueries";
public static final String STR_LIST_STORED_QUERIES = "ListStoredQueries";
public static final String STR_GET_PROPERTY_VALUE = "GetPropertyValue";
public static final String STR_CREATE_STORED_QUERY = "CreateStoredQuery";
public static final String STR_DROP_STORED_QUERY = "DropStoredQuery";
public static final String STR_XSD = "xsd";
public static final String UNKNOW_TYPENAME= "The specified TypeNames does not exist:";
/**
* The Mime type for describe feature GML 3.1.1
*/
public final static MediaType GML_3_1_1 = new MediaType("text", "xml; subtype=gml/3.1.1");
public final static MediaType GML_3_2_1 = new MediaType("application", "gml+xml; version=3.2");
public static final FilterCapabilities FILTER_CAPABILITIES_V110;
static {
final GeometryOperand[] geometryOperands = new GeometryOperand[4];
geometryOperands[0] = GeometryOperand.Envelope;
geometryOperands[1] = GeometryOperand.Point;
geometryOperands[2] = GeometryOperand.LineString;
geometryOperands[3] = GeometryOperand.Polygon;
final SpatialOperator[] operatorList = new SpatialOperator[10];
operatorList[0] = FilterXmlFactory.buildSpatialOperator("1.1.0", "DISJOINT", null);
operatorList[1] = FilterXmlFactory.buildSpatialOperator("1.1.0", "EQUALS", null);
operatorList[2] = FilterXmlFactory.buildSpatialOperator("1.1.0", "D_WITHIN", null);
operatorList[3] = FilterXmlFactory.buildSpatialOperator("1.1.0", "BEYOND", null);
operatorList[4] = FilterXmlFactory.buildSpatialOperator("1.1.0", "INTERSECTS", null);
operatorList[5] = FilterXmlFactory.buildSpatialOperator("1.1.0", "TOUCHES", null);
operatorList[6] = FilterXmlFactory.buildSpatialOperator("1.1.0", "CROSSES", null);
operatorList[7] = FilterXmlFactory.buildSpatialOperator("1.1.0", "CONTAINS", null);
operatorList[8] = FilterXmlFactory.buildSpatialOperator("1.1.0", "OVERLAPS", null);
operatorList[9] = FilterXmlFactory.buildSpatialOperator("1.1.0", "BBOX", null);
final SpatialOperators spatialOperators = FilterXmlFactory.buildSpatialOperators("1.1.0", operatorList);
final SpatialCapabilities spatialCapabilties = FilterXmlFactory.buildSpatialCapabilities("1.1.0", geometryOperands, spatialOperators);
final ArithmeticOperatorsType arithmetic = new ArithmeticOperatorsType(true, null);
final Operator[] compaOperatorList = new Operator[9];
compaOperatorList[0] = ComparisonOperatorType.BETWEEN;
compaOperatorList[1] = ComparisonOperatorType.EQUAL_TO;
compaOperatorList[2] = ComparisonOperatorType.GREATER_THAN;
compaOperatorList[3] = ComparisonOperatorType.GREATER_THAN_EQUAL_TO;
compaOperatorList[4] = ComparisonOperatorType.LESS_THAN;
compaOperatorList[5] = ComparisonOperatorType.LESS_THAN_EQUAL_TO;
compaOperatorList[6] = ComparisonOperatorType.LIKE;
compaOperatorList[7] = ComparisonOperatorType.NOT_EQUAL_TO;
compaOperatorList[8] = ComparisonOperatorType.NULL_CHECK;
final ComparisonOperators comparisons = FilterXmlFactory.buildComparisonOperators("1.1.0", compaOperatorList);
final ScalarCapabilitiesType scalarCapabilities = new ScalarCapabilitiesType(comparisons, arithmetic, true);
final IdCapabilitiesType idCapabilities = new IdCapabilitiesType(true, true);
FILTER_CAPABILITIES_V110 = FilterXmlFactory.buildFilterCapabilities("1.1.0", scalarCapabilities, spatialCapabilties, idCapabilities, null, null);
}
public static final FilterCapabilities FILTER_CAPABILITIES_V200;
static {
final GeometryOperand[] geometryOperands = new GeometryOperand[4];
geometryOperands[0] = GeometryOperand.Envelope;
geometryOperands[1] = GeometryOperand.Point;
geometryOperands[2] = GeometryOperand.LineString;
geometryOperands[3] = GeometryOperand.Polygon;
final SpatialOperator[] operatorList = new SpatialOperator[10];
operatorList[0] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Disjoint", null);
operatorList[1] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Equals", null);
operatorList[2] = FilterXmlFactory.buildSpatialOperator("2.0.0", "DWithin", null);
operatorList[3] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Beyond", null);
operatorList[4] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Intersects", null);
operatorList[5] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Touches", null);
operatorList[6] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Crosses", null);
operatorList[7] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Contains", null);
operatorList[8] = FilterXmlFactory.buildSpatialOperator("2.0.0", "Overlaps", null);
operatorList[9] = FilterXmlFactory.buildSpatialOperator("2.0.0", "BBOX", null);
final SpatialOperators spatialOperators = FilterXmlFactory.buildSpatialOperators("2.0.0", operatorList);
final SpatialCapabilities spatialCapabilties = FilterXmlFactory.buildSpatialCapabilities("2.0.0", geometryOperands, spatialOperators);
final Operator[] compaOperatorList = new Operator[9];
compaOperatorList[0] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsBetween");
compaOperatorList[1] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsEqualTo");
compaOperatorList[2] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsGreaterThan");
compaOperatorList[3] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsGreaterThanOrEqualTo");
compaOperatorList[4] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsLessThan");
compaOperatorList[5] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsLessThanOrEqualTo");
compaOperatorList[6] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsLike");
compaOperatorList[7] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsNotEqualTo");
compaOperatorList[8] = new org.geotoolkit.ogc.xml.v200.ComparisonOperatorType("PropertyIsNull");
final ComparisonOperators comparisons = FilterXmlFactory.buildComparisonOperators("2.0.0", compaOperatorList);
final org.geotoolkit.ogc.xml.v200.ScalarCapabilitiesType scalarCapabilities = new org.geotoolkit.ogc.xml.v200.ScalarCapabilitiesType(comparisons, true);
final ResourceIdentifierType iden = new ResourceIdentifierType(new QName("http://www.opengis.net/fes/2.0", "ResourceId"));
final org.geotoolkit.ogc.xml.v200.IdCapabilitiesType idCapabilities = new org.geotoolkit.ogc.xml.v200.IdCapabilitiesType(iden);
final List<AbstractDomain> constraints = new ArrayList<>();
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsQuery", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsAdHocQuery", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsFunctions", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsMinStandardFilter", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsStandardFilter", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsMinSpatialFilter", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsSpatialFilter", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsMinTemporalFilter", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsTemporalFilter", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsVersionNav", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsSorting", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsExtendedOperators", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsResourceId", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsMinimumXPath", "TRUE"));
final Conformance conformance = FilterXmlFactory.buildConformance("2.0.0", constraints);
FILTER_CAPABILITIES_V200 = FilterXmlFactory.buildFilterCapabilities("2.0.0", scalarCapabilities, spatialCapabilties, idCapabilities, null, conformance);
}
public static final AbstractOperationsMetadata OPERATIONS_METADATA_V110;
static {
final List<AbstractDCP> dcps = new ArrayList<>();
dcps.add(WFSXmlFactory.buildDCP("1.1.0", "someURL", "someURL"));
final List<AbstractDCP> dcps2 = new ArrayList<>();
dcps2.add(WFSXmlFactory.buildDCP("1.1.0", null, "someURL"));
final List<AbstractOperation> operations = new ArrayList<>();
final List<AbstractDomain> gcParameters = new ArrayList<>();
gcParameters.add(WFSXmlFactory.buildDomain("1.1.0", "AcceptVersions", Arrays.asList("1.1.0")));
gcParameters.add(WFSXmlFactory.buildDomain("1.1.0", "AcceptFormats", Arrays.asList("text/xml")));
gcParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Service", Arrays.asList("WFS")));
AbstractOperation getCapabilities = WFSXmlFactory.buildOperation("1.1.0", dcps, gcParameters, null, "GetCapabilities");
operations.add(getCapabilities);
final List<AbstractDomain> dfParameters = new ArrayList<>();
dfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "outputFormat", Arrays.asList("text/xml; subtype=gml/3.1.1")));
dfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Service", Arrays.asList("WFS")));
dfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Version", Arrays.asList("1.1.0")));
AbstractOperation describeFeatureType = WFSXmlFactory.buildOperation("1.1.0", dcps, dfParameters, null, "DescribeFeatureType");
operations.add(describeFeatureType);
final List<AbstractDomain> gfParameters = new ArrayList<>();
gfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "resultType", Arrays.asList("results","hits")));
gfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "outputFormat", Arrays.asList("text/xml; subtype=gml/3.1.1")));
gfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Service", Arrays.asList("WFS")));
gfParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Version", Arrays.asList("1.1.0")));
final List<AbstractDomain> gfConstraints = new ArrayList<>();
gfConstraints.add(WFSXmlFactory.buildDomain("1.1.0", "LocalTraverseXLinkScope", Arrays.asList("2"))); // ???
AbstractOperation getFeature = WFSXmlFactory.buildOperation("1.1.0", dcps, gfParameters, gfConstraints, "GetFeature");
operations.add(getFeature);
final List<AbstractDomain> tParameters = new ArrayList<>();
tParameters.add(WFSXmlFactory.buildDomain("1.1.0", "inputFormat", Arrays.asList("text/xml; subtype=gml/3.1.1")));
tParameters.add(WFSXmlFactory.buildDomain("1.1.0", "idgen", Arrays.asList("GenerateNew","UseExisting","ReplaceDuplicate")));
tParameters.add(WFSXmlFactory.buildDomain("1.1.0", "releaseAction", Arrays.asList("ALL", "SOME")));
tParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Service", Arrays.asList("WFS")));
tParameters.add(WFSXmlFactory.buildDomain("1.1.0", "Version", Arrays.asList("1.1.0")));
AbstractOperation Transaction = WFSXmlFactory.buildOperation("1.1.0", dcps2, tParameters, null, "Transaction");
operations.add(Transaction);
OPERATIONS_METADATA_V110 = OWSXmlFactory.buildOperationsMetadata("1.0.0", operations, null, null, null);
}
public static final AbstractOperationsMetadata OPERATIONS_METADATA_V200;
static {
final List<AbstractDCP> dcps = new ArrayList<>();
dcps.add(WFSXmlFactory.buildDCP("2.0.0", "somURL", "someURL"));
final List<AbstractDCP> dcps2 = new ArrayList<>();
dcps2.add((WFSXmlFactory.buildDCP("2.0.0", null, "someURL")));
final List<AbstractOperation> operations = new ArrayList<>();
final AbstractDomain serviceDomain = WFSXmlFactory.buildDomain("2.0.0", "Service", Arrays.asList("WFS"));
final AbstractDomain versionDomain = WFSXmlFactory.buildDomain("2.0.0", "Version", Arrays.asList("2.0.0"));
final List<AbstractDomain> gcParameters = new ArrayList<>();
gcParameters.add(WFSXmlFactory.buildDomain("2.0.0", "AcceptVersions", Arrays.asList("2.0.0", "1.1.0")));
gcParameters.add(WFSXmlFactory.buildDomain("2.0.0", "AcceptFormats", Arrays.asList("text/xml")));
gcParameters.add(serviceDomain);
AbstractOperation getCapabilities = WFSXmlFactory.buildOperation("2.0.0", dcps, gcParameters, null, "GetCapabilities");
operations.add(getCapabilities);
final List<AbstractDomain> dfParameters = new ArrayList<>();
dfParameters.add(WFSXmlFactory.buildDomain("2.0.0", "outputFormat", Arrays.asList("application/gml+xml; version=3.2", "application/schema+json")));
dfParameters.add(serviceDomain);
dfParameters.add(versionDomain);
AbstractOperation describeFeatureType = WFSXmlFactory.buildOperation("2.0.0", dcps, dfParameters, null, "DescribeFeatureType");
operations.add(describeFeatureType);
final List<AbstractDomain> gfParameters = new ArrayList<>();
gfParameters.add(WFSXmlFactory.buildDomain("2.0.0", "resultType", Arrays.asList("results","hits")));
gfParameters.add(WFSXmlFactory.buildDomain("2.0.0", "outputFormat", Arrays.asList("application/gml+xml; version=3.2", "application/json")));
gfParameters.add(serviceDomain);
gfParameters.add(versionDomain);
final List<AbstractDomain> gfConstraints = new ArrayList<>();
gfConstraints.add((WFSXmlFactory.buildDomain("2.0.0", "LocalTraverseXLinkScope", Arrays.asList("2")))); // ???
AbstractOperation getFeature = WFSXmlFactory.buildOperation("2.0.0", dcps, gfParameters, gfConstraints, "GetFeature");
operations.add(getFeature);
final List<AbstractDomain> tParameters = new ArrayList<>();
tParameters.add(WFSXmlFactory.buildDomain("2.0.0", "inputFormat", Arrays.asList("application/gml+xml; version=3.2")));
tParameters.add(WFSXmlFactory.buildDomain("2.0.0", "idgen", Arrays.asList("GenerateNew","UseExisting","ReplaceDuplicate")));
tParameters.add(WFSXmlFactory.buildDomain("2.0.0", "releaseAction", Arrays.asList("ALL", "SOME")));
tParameters.add(serviceDomain);
tParameters.add(versionDomain);
AbstractOperation Transaction = WFSXmlFactory.buildOperation("2.0.0", dcps2, tParameters, null, "Transaction");
operations.add(Transaction);
final List<AbstractDomain> lsqParameters = new ArrayList<>();
lsqParameters.add(serviceDomain);
lsqParameters.add(versionDomain);
AbstractOperation listStoredQueries = WFSXmlFactory.buildOperation("2.0.0", dcps, lsqParameters, null, "ListStoredQueries");
operations.add(listStoredQueries);
final List<AbstractDomain> dsqParameters = new ArrayList<>();
dsqParameters.add(serviceDomain);
dsqParameters.add(versionDomain);
AbstractOperation describeStoredQueries = WFSXmlFactory.buildOperation("2.0.0", dcps, dsqParameters, null, "DescribeStoredQueries");
operations.add(describeStoredQueries);
final List<AbstractDomain> gpvParameters = new ArrayList<>();
gpvParameters.add(serviceDomain);
gpvParameters.add(versionDomain);
AbstractOperation getPropertyValue = WFSXmlFactory.buildOperation("2.0.0", dcps, gpvParameters, null, "GetPropertyValue");
operations.add(getPropertyValue);
final List<AbstractDomain> csqParameters = new ArrayList<>();
csqParameters.add(serviceDomain);
csqParameters.add(versionDomain);
AbstractOperation createStoredQuery = WFSXmlFactory.buildOperation("2.0.0", dcps, csqParameters, null, "CreateStoredQuery");
operations.add(createStoredQuery);
final List<AbstractDomain> dsqParameters2 = new ArrayList<>();
dsqParameters2.add(serviceDomain);
dsqParameters2.add(versionDomain);
AbstractOperation dropStoredQuery = WFSXmlFactory.buildOperation("2.0.0", dcps, dsqParameters2, null, "DropStoredQuery");
operations.add(dropStoredQuery);
final List<AbstractDomain> parameters = new ArrayList<>();
parameters.add(WFSXmlFactory.buildDomain("2.0.0", "version", Arrays.asList("2.0.0")));
final List<AbstractDomain> constraints = new ArrayList<>();
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsSimpleWFS", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsBasicWFS", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsTransactionalWFS", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsLockingWFS", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "KVPEncoding", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "XMLEncoding", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "SOAPEncoding", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsInheritance", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsRemoteResolve", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsResultPaging", "TRUE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsStandardJoins", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsSpatialJoins", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsTemporalJoins", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ImplementsFeatureVersioning", "FALSE"));
constraints.add(WFSXmlFactory.buildDomainNoValues("2.0.0", "ManageStoredQueries", "TRUE"));
OPERATIONS_METADATA_V200 = OWSXmlFactory.buildOperationsMetadata("1.1.0", operations, parameters, constraints, null);
}
/**
* this static member is not yet useable because of clone issues for the featureType names.
* build your own {@linkplain StoredQueryDescriptionType} with IDENTIFIER_FILTER
*/
public static final StoredQueryDescriptionType IDENTIFIER_STORED_QUERY;
public static final FilterType IDENTIFIER_FILTER;
public static final ParameterExpressionType IDENTIFIER_PARAM;
public static final ParameterExpressionType TYPE_PARAM;
static {
TYPE_PARAM = new ParameterExpressionType("typeName", "type Parameter", "A parameter on the identifier of the featureType", new QName("http://www.w3.org/2001/XMLSchema", "QName", "xs"));
IDENTIFIER_PARAM = new ParameterExpressionType("id", "id Parameter", "A parameter on the id of the feature", new QName("http://www.w3.org/2001/XMLSchema", "string", "xs"));
final PropertyIsEqualToType pis = new PropertyIsEqualToType(new LiteralType("${id}"), "@id", true);
IDENTIFIER_FILTER = new FilterType(pis);
final QueryType query = new QueryType(IDENTIFIER_FILTER, null, "2.0.0");
final QueryExpressionTextType queryEx = new QueryExpressionTextType("urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression", null, null);
final ObjectFactory factory = new ObjectFactory();
queryEx.getContent().add(factory.createQuery(query));
IDENTIFIER_STORED_QUERY = new StoredQueryDescriptionType("urn:ogc:def:storedQuery:OGC-WFS::GetFeatureById", "Identifier query" , "filter on feature identifier", IDENTIFIER_PARAM, queryEx);
}
/**
* Generates the base capabilities for a WFS from the service metadata.
*
* @param metadata the service metadata
* @return the service base capabilities
*/
public static WFSCapabilities 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 = WFSXmlFactory.buildServiceIdentification(version, metadata.getName(), metadata.getDescription(),
metadata.getKeywords(), "WFS", metadata.getVersions(),
constraint.getFees(), Arrays.asList(constraint.getAccessConstraint()));
} else {
servIdent = WFSXmlFactory.buildServiceIdentification(version, metadata.getName(), metadata.getDescription(),
metadata.getKeywords(), "WFS", metadata.getVersions(),
null, new ArrayList<String>());
}
// Create provider part.
final AbstractServiceProvider servProv;
if (currentContact != null) {
final AbstractContact contact = WFSXmlFactory.buildContact(version, currentContact.getPhone(), currentContact.getFax(),
currentContact.getEmail(), currentContact.getAddress(), currentContact.getCity(), currentContact.getState(),
currentContact.getZipCode(), currentContact.getCountry(), currentContact.getHoursOfService(), currentContact.getContactInstructions());
final AbstractResponsiblePartySubset responsible = WFSXmlFactory.buildResponsiblePartySubset(version, currentContact.getFullname(), currentContact.getPosition(), contact, null);
AbstractOnlineResourceType orgUrl = null;
if (currentContact.getUrl() != null) {
orgUrl = WFSXmlFactory.buildOnlineResource(version, currentContact.getUrl());
}
servProv = WFSXmlFactory.buildServiceProvider(version, currentContact.getOrganisation(), orgUrl, responsible);
} else {
servProv = WFSXmlFactory.buildServiceProvider(version, "", null, null);
}
// Create capabilities base.
return WFSXmlFactory.buildWFSCapabilities(version, servIdent, servProv, null, null, null);
}
public static class GetXSD implements RequestBase {
public QName featureType;
public String namespace;
public String version;
public GetXSD(QName featureType, String namespace, String version) {
this.featureType = featureType;
this.namespace = namespace;
this.version = version;
}
@Override
public String getService() {
return "WFS";
}
@Override
public void setService(String string) {
//do nothing
}
@Override
public void setVersion(String version) {
this.version = version;
}
@Override
public Version getVersion() {
return new Version(version);
}
}
}