use of org.geotoolkit.ogc.xml.v100.PropertyIsBetweenType in project geotoolkit by Geomatys.
the class FilterXMLBindingTest method filterUnmarshalingTest.
/**
* Test simple Record Marshalling.
*
* @throws JAXBException
*/
@Test
public void filterUnmarshalingTest() throws JAXBException {
/*
* Test Unmarshalling spatial filter.
*/
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + '\n' + "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:gml=\"http://www.opengis.net/gml\">" + '\n' + " <ogc:Overlaps>" + '\n' + " <ogc:PropertyName>boundingBox</ogc:PropertyName>" + '\n' + " <gml:Envelope srsName=\"EPSG:4326\">" + '\n' + " <gml:lowerCorner>10.0 11.0</gml:lowerCorner>" + '\n' + " <gml:upperCorner>10.0 11.0</gml:upperCorner>" + '\n' + " </gml:Envelope>" + '\n' + " </ogc:Overlaps>" + '\n' + "</ogc:Filter>" + '\n';
StringReader sr = new StringReader(xml);
JAXBElement jb = (JAXBElement) unmarshaller.unmarshal(sr);
FilterType result = (FilterType) jb.getValue();
DirectPositionType lowerCorner = new DirectPositionType(10.0, 11.0);
DirectPositionType upperCorner = new DirectPositionType(10.0, 11.0);
EnvelopeType envelope = new EnvelopeType(lowerCorner, upperCorner, "EPSG:4326");
OverlapsType filterElement = new OverlapsType(new PropertyNameType("boundingBox"), envelope);
FilterType expResult = new FilterType(filterElement);
assertEquals(expResult.getSpatialOps().getValue(), result.getSpatialOps().getValue());
assertEquals(expResult, result);
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + '\n' + "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/fes/2.0\" xmlns:gml=\"http://www.opengis.net/gml\">" + '\n' + " <ogc:BBOX>" + '\n' + " <ogc:ValueReference>boundingBox</ogc:ValueReference>" + '\n' + " <gml:Envelope srsName=\"EPSG:4326\">" + '\n' + " <gml:lowerCorner>10.0 11.0</gml:lowerCorner>" + '\n' + " <gml:upperCorner>10.0 11.0</gml:upperCorner>" + '\n' + " </gml:Envelope>" + '\n' + " </ogc:BBOX>" + '\n' + "</ogc:Filter>" + '\n';
sr = new StringReader(xml);
jb = (JAXBElement) unmarshaller.unmarshal(sr);
org.geotoolkit.ogc.xml.v200.FilterType result2 = (org.geotoolkit.ogc.xml.v200.FilterType) jb.getValue();
final org.geotoolkit.gml.xml.v311.ObjectFactory gmlFactory = new org.geotoolkit.gml.xml.v311.ObjectFactory();
BBOXType filterBox = new BBOXType("boundingBox", gmlFactory.createEnvelope(envelope));
org.geotoolkit.ogc.xml.v200.FilterType expResult2 = new org.geotoolkit.ogc.xml.v200.FilterType(filterBox);
assertEquals(((JAXBElement) ((BBOXType) expResult2.getSpatialOps().getValue()).getAny()).getValue(), ((JAXBElement) ((BBOXType) result2.getSpatialOps().getValue()).getAny()).getValue());
assertEquals(expResult2.getSpatialOps().getValue(), result2.getSpatialOps().getValue());
assertEquals(expResult2, result2);
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + '\n' + "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/fes/2.0\">" + '\n' + " <ogc:BBOX>" + '\n' + " <ogc:ValueReference>boundingBox</ogc:ValueReference>" + '\n' + " $test" + '\n' + " </ogc:BBOX>" + '\n' + "</ogc:Filter>" + '\n';
sr = new StringReader(xml);
jb = (JAXBElement) unmarshaller.unmarshal(sr);
result2 = (org.geotoolkit.ogc.xml.v200.FilterType) jb.getValue();
filterBox = new BBOXType("boundingBox", "$test");
expResult2 = new org.geotoolkit.ogc.xml.v200.FilterType(filterBox);
assertEquals(expResult2.getSpatialOps().getValue(), result2.getSpatialOps().getValue());
assertEquals(expResult2, result2);
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + '\n' + "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/fes/2.0\">" + '\n' + " <ogc:Contains>" + '\n' + " <ogc:ValueReference>boundingBox</ogc:ValueReference>" + '\n' + " $test" + '\n' + " </ogc:Contains>" + '\n' + "</ogc:Filter>" + '\n';
sr = new StringReader(xml);
jb = (JAXBElement) unmarshaller.unmarshal(sr);
result2 = (org.geotoolkit.ogc.xml.v200.FilterType) jb.getValue();
ContainsType filterContains = new ContainsType("boundingBox", "$test");
expResult2 = new org.geotoolkit.ogc.xml.v200.FilterType(filterContains);
assertEquals(expResult2.getSpatialOps().getValue(), result2.getSpatialOps().getValue());
assertEquals(expResult2, result2);
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + '\n' + "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/fes/2.0\">" + '\n' + " <ogc:After>" + '\n' + " <ogc:ValueReference>boundingBox</ogc:ValueReference>" + '\n' + " $test" + '\n' + " </ogc:After>" + '\n' + "</ogc:Filter>" + '\n';
sr = new StringReader(xml);
jb = (JAXBElement) unmarshaller.unmarshal(sr);
result2 = (org.geotoolkit.ogc.xml.v200.FilterType) jb.getValue();
TimeAfterType filterAfter = new TimeAfterType("boundingBox", "$test");
expResult2 = new org.geotoolkit.ogc.xml.v200.FilterType(filterAfter);
assertEquals(expResult2.getTemporalOps().getValue(), result2.getTemporalOps().getValue());
assertEquals(expResult2, result2);
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + "<fes:Filter xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:gco=\"http://www.isotc211.org/2005/gco\" xmlns:gmx=\"http://www.isotc211.org/2005/gmx\" xmlns:gmi=\"http://www.isotc211.org/2005/gmi\" xmlns:gmd=\"http://www.isotc211.org/2005/gmd\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:ns8=\"http://www.opengis.net/gml\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:fes=\"http://www.opengis.net/fes/2.0\" xmlns:ows=\"http://www.opengis.net/ows/1.1\">\n" + " <fes:PropertyIsBetween>\n" + " <fes:ValueReference>prop</fes:ValueReference>\n" + " <fes:LowerBoundary>\n" + " <fes:Literal><gml:TimeInstant>\n" + " <gml:timePosition>2002</gml:timePosition>\n" + " </gml:TimeInstant></fes:Literal>\n" + " </fes:LowerBoundary>\n" + " <fes:UpperBoundary>\n" + " <fes:Literal><gml:TimeInstant>\n" + " <gml:timePosition>2004</gml:timePosition>\n" + " </gml:TimeInstant></fes:Literal>\n" + " </fes:UpperBoundary>\n" + " </fes:PropertyIsBetween>\n" + "</fes:Filter>";
sr = new StringReader(xml);
jb = (JAXBElement) unmarshaller.unmarshal(sr);
org.geotoolkit.ogc.xml.v200.FilterType result3 = (org.geotoolkit.ogc.xml.v200.FilterType) jb.getValue();
final org.geotoolkit.gml.xml.v321.ObjectFactory gml32Factory = new org.geotoolkit.gml.xml.v321.ObjectFactory();
final org.geotoolkit.ogc.xml.v200.ObjectFactory fesFactory = new org.geotoolkit.ogc.xml.v200.ObjectFactory();
PropertyIsBetweenType expPes = new PropertyIsBetweenType();
expPes.setExpression(fesFactory.createValueReference((String) "prop"));
final LowerBoundaryType lower = new LowerBoundaryType();
final TimeInstantType ti = new TimeInstantType("2002");
final LiteralType lowlit = new LiteralType(gml32Factory.createTimeInstant(ti));
lower.setExpression(fesFactory.createLiteral(lowlit));
expPes.setLowerBoundary(lower);
final UpperBoundaryType upper = new UpperBoundaryType();
final TimeInstantType ti2 = new TimeInstantType("2004");
final LiteralType upplit = new LiteralType(gml32Factory.createTimeInstant(ti2));
upper.setExpression(fesFactory.createLiteral(upplit));
expPes.setUpperBoundary(upper);
org.geotoolkit.ogc.xml.v200.FilterType expResult3 = new org.geotoolkit.ogc.xml.v200.FilterType(expPes);
assertTrue(result3.getComparisonOps().getValue() instanceof PropertyIsBetweenType);
PropertyIsBetweenType resPes = (PropertyIsBetweenType) result3.getComparisonOps().getValue();
assertEquals(expPes.getUpperBoundary(), resPes.getUpperBoundary());
assertEquals(expPes.getLowerBoundary(), resPes.getLowerBoundary());
assertEquals(expPes, resPes);
assertEquals(expResult3.getComparisonOps().getValue(), result3.getComparisonOps().getValue());
assertEquals(expResult3, result3);
}
use of org.geotoolkit.ogc.xml.v100.PropertyIsBetweenType in project ddf by codice.
the class CswFilterFactory method createPropertyIsBetween.
private JAXBElement<PropertyIsBetweenType> createPropertyIsBetween(String propertyName, Object lowerBoundary, Object upperBoundary) {
PropertyIsBetweenType propertyIsBetween = new PropertyIsBetweenType();
propertyIsBetween.setLowerBoundary(createLowerBoundary(lowerBoundary));
propertyIsBetween.setUpperBoundary(createUpperBoundary(upperBoundary));
propertyIsBetween.setExpression(createPropertyNameType(Arrays.asList(new Object[] { propertyName })));
return filterObjectFactory.createPropertyIsBetween(propertyIsBetween);
}
use of org.geotoolkit.ogc.xml.v100.PropertyIsBetweenType in project ddf by codice.
the class WfsFilterDelegate method createPropertyIsBetween.
private JAXBElement<PropertyIsBetweenType> createPropertyIsBetween(String property, Object lowerBoundary, Object upperBoundary) {
PropertyIsBetweenType propertyIsBetween = new PropertyIsBetweenType();
propertyIsBetween.setLowerBoundary(createLowerBoundary(lowerBoundary));
propertyIsBetween.setUpperBoundary(createUpperBoundary(upperBoundary));
propertyIsBetween.setExpression(createPropertyNameType(property));
return filterObjectFactory.createPropertyIsBetween(propertyIsBetween);
}
use of org.geotoolkit.ogc.xml.v100.PropertyIsBetweenType in project ddf by codice.
the class WfsFilterDelegate method createPropertyIsBetween.
private JAXBElement<PropertyIsBetweenType> createPropertyIsBetween(String property, Object lowerBoundary, Object upperBoundary) {
PropertyIsBetweenType propertyIsBetween = new PropertyIsBetweenType();
propertyIsBetween.setLowerBoundary(createLowerBoundary(lowerBoundary));
propertyIsBetween.setUpperBoundary(createUpperBoundary(upperBoundary));
propertyIsBetween.setExpression(createPropertyNameType(property));
return filterObjectFactory.createPropertyIsBetween(propertyIsBetween);
}
use of org.geotoolkit.ogc.xml.v100.PropertyIsBetweenType in project geotoolkit by Geomatys.
the class FilterToOGC100Converter method visit.
@Override
public JAXBElement<?> visit(final Filter filter) {
if (filter.equals(Filter.include())) {
return null;
}
if (filter.equals(Filter.exclude())) {
return null;
}
final CodeList<?> type = filter.getOperatorType();
if (filter instanceof BetweenComparisonOperator) {
final BetweenComparisonOperator pib = (BetweenComparisonOperator) filter;
final PropertyIsBetweenType bot = ogc_factory.createPropertyIsBetweenType();
final LowerBoundaryType lbt = ogc_factory.createLowerBoundaryType();
lbt.setExpression(extract(pib.getLowerBoundary()));
final UpperBoundaryType ubt = ogc_factory.createUpperBoundaryType();
ubt.setExpression(extract(pib.getUpperBoundary()));
bot.setExpression(extract(pib.getExpression()));
bot.setLowerBoundary(lbt);
bot.setUpperBoundary(ubt);
return ogc_factory.createPropertyIsBetween(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsEqualToType bot = new PropertyIsEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsEqualTo(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_GREATER_THAN) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsGreaterThanType bot = new PropertyIsGreaterThanType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsGreaterThan(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_GREATER_THAN_OR_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsGreaterThanOrEqualToType bot = new PropertyIsGreaterThanOrEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsGreaterThanOrEqualTo(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_LESS_THAN) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsLessThanType bot = new PropertyIsLessThanType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsLessThan(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_LESS_THAN_OR_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsLessThanOrEqualToType bot = new PropertyIsLessThanOrEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsLessThanOrEqualTo(bot);
} else if (filter instanceof LikeOperator) {
final LikeOperator pis = (LikeOperator) filter;
final List<Expression> expressions = filter.getExpressions();
final PropertyIsLikeType bot = ogc_factory.createPropertyIsLikeType();
bot.setEscape(String.valueOf(pis.getEscapeChar()));
final LiteralType lt = ogc_factory.createLiteralType();
lt.getContent().add(((Literal) expressions.get(1)).getValue());
bot.setLiteral(lt);
final Expression expression = expressions.get(0);
if (!(expression instanceof ValueReference)) {
throw new IllegalArgumentException("LikeOperator can support ValueReference only, but was a " + expression);
}
final PropertyNameType pnt = (PropertyNameType) extract(expression).getValue();
bot.setPropertyName(pnt);
bot.setSingleChar(String.valueOf(pis.getSingleChar()));
bot.setWildCard(String.valueOf(pis.getWildCard()));
return ogc_factory.createPropertyIsLike(bot);
} else if (type == ComparisonOperatorName.PROPERTY_IS_NOT_EQUAL_TO) {
final BinaryComparisonOperator pit = (BinaryComparisonOperator) filter;
final PropertyIsNotEqualToType bot = new PropertyIsNotEqualToType();
bot.getExpression().add(extract(pit.getOperand1()));
bot.getExpression().add(extract(pit.getOperand2()));
return ogc_factory.createPropertyIsNotEqualTo(bot);
} else if (filter instanceof NullOperator) {
final NullOperator pis = (NullOperator) filter;
final PropertyIsNullType bot = ogc_factory.createPropertyIsNullType();
final Object obj = extract((Expression) pis.getExpressions().get(0)).getValue();
if (obj instanceof LiteralType) {
bot.setLiteral((LiteralType) obj);
} else if (obj instanceof PropertyNameType) {
bot.setPropertyName((PropertyNameType) obj);
} else {
// should not be possible
throw new IllegalArgumentException("Invalid expression element : " + obj);
}
return ogc_factory.createPropertyIsNull(bot);
} else if (type == LogicalOperatorName.AND) {
final LogicalOperator and = (LogicalOperator) filter;
final AndType lot = new AndType();
for (final Filter f : (List<Filter>) and.getOperands()) {
lot.getComparisonOpsOrSpatialOpsOrLogicOps().add(visit(f));
}
return ogc_factory.createAnd(lot);
} else if (type == LogicalOperatorName.OR) {
final LogicalOperator or = (LogicalOperator) filter;
final OrType lot = new OrType();
for (final Filter f : (List<Filter>) or.getOperands()) {
lot.getComparisonOpsOrSpatialOpsOrLogicOps().add(visit(f));
}
return ogc_factory.createOr(lot);
} else if (type == LogicalOperatorName.NOT) {
final LogicalOperator not = (LogicalOperator) filter;
final NotType lot = new NotType();
JAXBElement<?> sf = visit((Filter) not.getOperands().get(0));
if (sf.getValue() instanceof ComparisonOpsType) {
lot.setComparisonOps((JAXBElement<? extends ComparisonOpsType>) sf);
} else if (sf.getValue() instanceof LogicOpsType) {
lot.setLogicOps((JAXBElement<? extends LogicOpsType>) sf);
} else if (sf.getValue() instanceof SpatialOpsType) {
lot.setSpatialOps((JAXBElement<? extends SpatialOpsType>) sf);
} else {
// should not happen
throw new IllegalArgumentException("invalid filter element : " + sf);
}
return ogc_factory.createNot(lot);
} else if (type == SpatialOperatorName.BBOX) {
final BBOX bbox = BBOX.wrap((BinarySpatialOperator) filter);
final BBOXType bboxType = ogc_factory.createBBOXType();
final Expression sourceExp1 = bbox.getOperand1();
final JAXBElement<?> exp1 = extract(sourceExp1);
final Expression sourceExp2 = bbox.getOperand2();
JAXBElement<?> exp2 = extract(sourceExp2);
final PropertyNameType pName;
final BoxType boxType;
if (exp1 != null && exp1.getValue() instanceof PropertyNameType) {
pName = (PropertyNameType) exp1.getValue();
} else if (exp2 != null && exp2.getValue() instanceof PropertyNameType) {
pName = (PropertyNameType) exp2.getValue();
} else
throw new IllegalArgumentException("No property name found in given bbox filter");
if (sourceExp1 instanceof Literal) {
boxType = toBox((Literal) sourceExp1);
} else if (sourceExp2 instanceof Literal) {
boxType = toBox((Literal) sourceExp2);
} else
throw new IllegalArgumentException("No bbox found in given bbox filter");
bboxType.setPropertyName(pName);
bboxType.setBox(boxType);
return ogc_factory.createBBOX(bboxType);
}
throw new IllegalArgumentException("Unknowed filter element : " + filter + " class :" + filter.getClass());
}
Aggregations