Filter expressions according to the 1.0.0 as well as the 1.1.1 Filter Encoding Implementation Specification
.
@author Torsten Friebe
@author Markus Schneider
@source $URL$
}
public void testParse() throws Exception {
FilterMockData.capabilities(document, document);
FilterCapabilities caps = (FilterCapabilities) parse();
assertEquals(FilterCapabilities.VERSION_110, caps.getVersion());
assertNotNull(caps.getScalarCapabilities());
assertNotNull(caps.getSpatialCapabilities());
assertNotNull(caps.getIdCapabilities());
}
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public NotificationChain basicSetFilterCapabilities(FilterCapabilities newFilterCapabilities, NotificationChain msgs) {
FilterCapabilities oldFilterCapabilities = filterCapabilities;
filterCapabilities = newFilterCapabilities;
if (eNotificationRequired()) {
ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, Csw20Package.CAPABILITIES_TYPE__FILTER_CAPABILITIES, oldFilterCapabilities, newFilterCapabilities);
if (msgs == null) msgs = notification; else msgs.add(notification);
}
/**
* @see WFSStrategy#getFilterCapabilities()
*/
@Override
public FilterCapabilities getFilterCapabilities() {
FilterCapabilities wfsFilterCapabilities;
wfsFilterCapabilities = capabilities.getFilterCapabilities();
return wfsFilterCapabilities;
}
* @see org.geotools.data.wfs.internal.WFSStrategy#splitFilters(org.opengis.filter.Filter)
*/
@Override
public Filter[] splitFilters(QName typeName, Filter filter) {
FilterCapabilities filterCapabilities = getFilterCapabilities();
Capabilities filterCaps = new Capabilities();
if (filterCapabilities != null) {
filterCaps.addAll(filterCapabilities);
/*
* General Fix for WFS 1.0 naming the "Intersects" spatial operation "Intersect", which
* will make the CapabilitiesFilterSplitter think Intersects is not supported at
* splitFilters
*/
if (Versions.v1_0_0.equals(getServiceVersion())) {
SpatialCapabilities spatialCaps = filterCapabilities.getSpatialCapabilities();
if (spatialCaps != null) {
SpatialOperators spatialOps = spatialCaps.getSpatialOperators();
if (spatialOps != null) {
if (null != spatialOps.getOperator("Intersect")) {
trace("WFS 1.0 capabilities states the spatial operator Intersect. ",
* Intersects}. If so, we fix that here so intersects is actually recognized as a supported
* filter.
*/
@Override
public Filter[] splitFilters(Capabilities caps, Filter queryFilter) {
FilterCapabilities filterCapabilities = caps.getContents();
SpatialCapabilities spatialCapabilities = filterCapabilities.getSpatialCapabilities();
if (spatialCapabilities != null) {
SpatialOperators spatialOperators = spatialCapabilities.getSpatialOperators();
if (spatialOperators != null) {
SpatialOperator missnamedIntersects = spatialOperators.getOperator("Intersect");
if (missnamedIntersects != null) {
/**
* @see WFSProtocol#getFilterCapabilities()
*/
public FilterCapabilities getFilterCapabilities() {
FilterCapabilities wfsFilterCapabilities;
wfsFilterCapabilities = capabilities.getFilterCapabilities();
return wfsFilterCapabilities;
}
public String getDefaultOutputFormat(WFSOperationType operation) {
return strategy.getDefaultOutputFormat(this, operation);
}
public Filter[] splitFilters(Filter filter) {
FilterCapabilities filterCapabilities = getFilterCapabilities();
Capabilities filterCaps = new Capabilities();
if (filterCapabilities != null) {
filterCaps.addAll(filterCapabilities);
}
return strategy.splitFilters(filterCaps, filter);
* @throws IOException
*/
@Test
public void testGetFilterCapabilities() throws IOException {
createTestProtocol(GEOS_ARCHSITES.CAPABILITIES);
FilterCapabilities filterCapabilities = wfs.getFilterCapabilities();
assertNotNull(filterCapabilities);
SpatialCapabilities spatialCapabilities = filterCapabilities.getSpatialCapabilities();
Collection<GeometryOperand> geometryOperands = spatialCapabilities.getGeometryOperands();
assertEquals(4, geometryOperands.size());
assertTrue(geometryOperands.contains(GeometryOperand.Envelope));
assertTrue(geometryOperands.contains(GeometryOperand.Point));
assertTrue(geometryOperands.contains(GeometryOperand.LineString));
SimplifyingFilterVisitor simplifier = new SimplifyingFilterVisitor();
queryFilter = (Filter) queryFilter.accept(simplifier, null);
// ID Filters aren't allowed to be parameters in Logical or Comparison Operators
FilterCapabilities filterCapabilities = caps.getContents();
IdCapabilities idCapabilities = filterCapabilities.getIdCapabilities();
if (idCapabilities != null && (idCapabilities.hasEID() || idCapabilities.hasFID())) {
// server supports ID Filters so we need to check our queryFilter is valid
Capabilities idFilterCaps = new Capabilities();
idFilterCaps.addName("Id");
CapabilitiesFilterSplitter splitter = new CapabilitiesFilterSplitter(idFilterCaps, null, null);
queryFilter.accept(splitter, null);
Filter server = splitter.getFilterPre();
if (server.equals(Filter.INCLUDE)) {
// ID Filters not found in the root Filter
// remove ID Filter from Capabilities
FilterCapabilities filterCapabilitiesWithoutId = new FilterCapabilitiesImpl(
filterCapabilities.getVersion(),
filterCapabilities.getScalarCapabilities(),
filterCapabilities.getSpatialCapabilities(),
null,
filterCapabilities.getTemporalCapabilities());
assertEquals(25, ct.getValue().size());
assertEquals("RevisionDate", ct.getValue().get(0));
assertEquals("OperatesOnWithOpName", ct.getValue().get(24));
/** This fails, caps are not getting parsed **/
FilterCapabilities filterCapabilities = caps.getFilterCapabilities();
assertNotNull(filterCapabilities);
SpatialCapabilities spatial = filterCapabilities.getSpatialCapabilities();
Collection<GeometryOperand> geoms = spatial.getGeometryOperands();
assertEquals(4, geoms.size());
assertTrue(geoms.contains(GeometryOperand.Envelope));
assertTrue(geoms.contains(GeometryOperand.Polygon));
assertTrue(geoms.contains(GeometryOperand.LineString));
assertTrue(geoms.contains(GeometryOperand.Point));
SpatialOperators sop = spatial.getSpatialOperators();
assertEquals(11, sop.getOperators().size());
assertNotNull(sop.getOperator("Crosses"));
assertNotNull(sop.getOperator("Overlaps"));
assertNotNull(sop.getOperator("BBOX"));
assertNotNull(sop.getOperator("Touches"));
assertNotNull(sop.getOperator("Intersects"));
assertNotNull(sop.getOperator("Equals"));
assertNotNull(sop.getOperator("Within"));
assertNotNull(sop.getOperator("Contains"));
assertNotNull(sop.getOperator("DWithin"));
assertNotNull(sop.getOperator("Beyond"));
ScalarCapabilities scalar = filterCapabilities.getScalarCapabilities();
assertTrue(scalar.hasLogicalOperators());
ComparisonOperators comparison = scalar.getComparisonOperators();
assertEquals(9, comparison.getOperators().size());
assertNotNull(comparison.getOperator("NullCheck"));
assertNotNull(comparison.getOperator("Between"));
assertNotNull(comparison.getOperator("LessThan"));
assertNotNull(comparison.getOperator("GreaterThan"));
assertNotNull(comparison.getOperator("GreaterThanEqualTo"));
assertNotNull(comparison.getOperator("EqualTo"));
assertNotNull(comparison.getOperator("NotEqualTo"));
assertNotNull(comparison.getOperator("Like"));
assertNotNull(comparison.getOperator("LessThanEqualTo"));
ArithmeticOperators arithmetic = scalar.getArithmeticOperators();
assertEquals(0, arithmetic.getFunctions().getFunctionNames().size());
IdCapabilities id = filterCapabilities.getIdCapabilities();
assertTrue(id.hasFID());
assertFalse(id.hasEID());
}
Related Classes of org.opengis.filter.capability.FilterCapabilities
Copyright © 2018 www.massapicom. 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.