use of org.geotoolkit.ogc.xml.v100.BinaryLogicOpType in project ddf by codice.
the class WfsFilterDelegateTest method testLogicalAndOfSpatialTemporal.
/**
* Verifies that a temporal criteria can be AND'ed to other criteria.
*/
@Test
public void testLogicalAndOfSpatialTemporal() {
String mockProperty = "myPropertyName";
String mockType = "myType";
WfsFilterDelegate delegate = mockFeatureMetacardCreateDelegate(mockProperty, mockType);
FilterType spatialFilter = delegate.dwithin(Metacard.ANY_GEO, "POINT (30 10)", 1000);
FilterType temporalFilter = delegate.during(mockProperty, new DateTime().minusDays(365).toDate(), new DateTime().minusDays(10).toDate());
List<FilterType> filtersToBeAnded = new ArrayList<>(Arrays.asList(spatialFilter, temporalFilter));
// Perform Test
FilterType filter = delegate.and(filtersToBeAnded);
// Verify AND op used
if (filter.getLogicOps() == null) {
fail("No AND/OR element found in the generated FilterType.");
}
assertEquals(LOGICAL_AND_NAME, filter.getLogicOps().getName().toString());
BinaryLogicOpType logicOpType = (BinaryLogicOpType) filter.getLogicOps().getValue();
// Verify two items were AND'ed
assertEquals(2, logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().size());
// Verify first is spatial, second is temporal
assertTrue(logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(0).getValue() instanceof DistanceBufferType);
assertTrue(logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(1).getValue() instanceof BinaryTemporalOpType);
}
use of org.geotoolkit.ogc.xml.v100.BinaryLogicOpType in project ddf by codice.
the class WfsFilterDelegateTest method testLogicalCombinationOfLogicals.
private void testLogicalCombinationOfLogicals(String methName, String compOpName) throws Exception {
String mockProperty = "myPropertyName";
String mockType = "myType";
WfsFilterDelegate delegate = mockFeatureMetacardCreateDelegate(mockProperty, mockType);
FilterType compFilter1 = delegate.propertyIsLike(Metacard.ANY_TEXT, LITERAL, true);
FilterType compFilter2 = delegate.propertyIsLike(Metacard.ANY_TEXT, LITERAL, true);
List<FilterType> subFiltersToBeOred = new ArrayList<>();
subFiltersToBeOred.add(compFilter1);
subFiltersToBeOred.add(compFilter2);
FilterType spatialFilter1 = delegate.dwithin(Metacard.ANY_GEO, "POINT (30 10)", 1000);
FilterType spatialFilter2 = delegate.dwithin(Metacard.ANY_GEO, "POINT (50 10)", 1500);
List<FilterType> subFiltersToBeAnded = new ArrayList<>();
subFiltersToBeAnded.add(spatialFilter1);
subFiltersToBeAnded.add(spatialFilter2);
List<FilterType> filtersToCombine = new ArrayList<>();
filtersToCombine.add(delegate.or(subFiltersToBeOred));
filtersToCombine.add(delegate.and(subFiltersToBeAnded));
Method method = WfsFilterDelegate.class.getMethod(methName, List.class);
FilterType filter = (FilterType) method.invoke(delegate, filtersToCombine);
// Verify
assertThat(filter.getLogicOps().getName().toString(), is(compOpName));
BinaryLogicOpType logicOpType = (BinaryLogicOpType) filter.getLogicOps().getValue();
BinaryLogicOpType logicOrType = (BinaryLogicOpType) logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(0).getValue();
assertThat(logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(0).getName().toString(), is(LOGICAL_OR_NAME));
assertThat(logicOrType.getComparisonOpsOrSpatialOpsOrTemporalOps().size(), is(2));
for (JAXBElement<?> jaxbElement : logicOrType.getComparisonOpsOrSpatialOpsOrTemporalOps()) {
PropertyIsLikeType compOpsType = (PropertyIsLikeType) jaxbElement.getValue();
String valRef = fetchPropertyIsLikeExpression(compOpsType, VALUE_REFERENCE);
assertThat(valRef, is(mockProperty));
String literal = fetchPropertyIsLikeExpression(compOpsType, LITERAL);
assertThat(literal, is(LITERAL));
}
BinaryLogicOpType logicAndType = (BinaryLogicOpType) logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(1).getValue();
assertThat(logicOpType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(1).getName().toString(), is(LOGICAL_AND_NAME));
DistanceBufferType spatialOpsType1 = (DistanceBufferType) logicAndType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(0).getValue();
assertThat(spatialOpsType1.getDistance().getValue(), is(1000d));
DistanceBufferType spatialOpsType2 = (DistanceBufferType) logicAndType.getComparisonOpsOrSpatialOpsOrTemporalOps().get(1).getValue();
assertThat(spatialOpsType2.getDistance().getValue(), is(1500d));
}
use of org.geotoolkit.ogc.xml.v100.BinaryLogicOpType in project geo-platform by geosdi.
the class AndOperatorHandler method processQueryRestrictions.
/**
* @param filter
* @param queryRestrictionDTOs
*/
@Override
protected void processQueryRestrictions(FilterType filter, List<QueryRestrictionDTO> queryRestrictionDTOs) {
logger.debug("################### {} Processing............\n", getFilterName());
List<JAXBElement<?>> elements = super.buildJAXBElementList(queryRestrictionDTOs);
logger.debug("##################{} builds : {} " + (elements.size() > 1 ? "elements" : "element") + "\n", getFilterName(), elements.size());
if (elements.size() == 1) {
if (filter.isSetSpatialOps()) {
elements.add(filter.getSpatialOps());
filter.setSpatialOps(null);
BinaryLogicOpType and = new BinaryLogicOpType();
and.setComparisonOpsOrSpatialOpsOrLogicOps(elements);
filter.setLogicOps(filterFactory.createAnd(and));
} else {
JAXBElement<ComparisonOpsType> opsTypeJAXBElement = (JAXBElement<ComparisonOpsType>) elements.get(0);
filter.setComparisonOps(opsTypeJAXBElement);
}
} else if (elements.size() > 1) {
if (filter.isSetSpatialOps()) {
elements.add(filter.getSpatialOps());
filter.setSpatialOps(null);
}
BinaryLogicOpType and = new BinaryLogicOpType();
and.setComparisonOpsOrSpatialOpsOrLogicOps(elements);
filter.setLogicOps(filterFactory.createAnd(and));
}
}
use of org.geotoolkit.ogc.xml.v100.BinaryLogicOpType in project geo-platform by geosdi.
the class OrOperatorHandler method processQueryRestrictions.
/**
* @param filter
* @param queryRestrictionDTOs
*/
@Override
protected void processQueryRestrictions(FilterType filter, List<QueryRestrictionDTO> queryRestrictionDTOs) {
logger.debug("################### {} Processing............\n", getFilterName());
List<JAXBElement<?>> elements = super.buildJAXBElementList(queryRestrictionDTOs);
logger.debug("##################{} builds : {} " + (elements.size() > 1 ? "elements" : "element") + "\n", getFilterName(), elements.size());
if (elements.size() == 1) {
if (filter.isSetSpatialOps()) {
elements.add(filter.getSpatialOps());
filter.setSpatialOps(null);
BinaryLogicOpType or = new BinaryLogicOpType();
or.setComparisonOpsOrSpatialOpsOrLogicOps(elements);
filter.setLogicOps(filterFactory.createOr(or));
} else {
JAXBElement<ComparisonOpsType> element = (JAXBElement<ComparisonOpsType>) elements.get(0);
filter.setComparisonOps(element);
}
} else if (elements.size() > 1) {
if (filter.isSetSpatialOps()) {
elements.add(filter.getSpatialOps());
filter.setSpatialOps(null);
}
BinaryLogicOpType or = new BinaryLogicOpType();
or.setComparisonOpsOrSpatialOpsOrLogicOps(elements);
filter.setLogicOps(filterFactory.createOr(or));
}
}
use of org.geotoolkit.ogc.xml.v100.BinaryLogicOpType in project geotoolkit by Geomatys.
the class OGC110Test method testFilterLogicalOr.
@Test
public void testFilterLogicalOr() throws JAXBException, NoSuchAuthorityCodeException, FactoryException {
final Unmarshaller UNMARSHALLER = POOL.acquireUnmarshaller();
final Marshaller MARSHALLER = POOL.acquireMarshaller();
// Read test
Object obj = UNMARSHALLER.unmarshal(FILE_FIL_LOG_OR);
assertNotNull(obj);
JAXBElement<? extends FilterType> jaxfilter = (JAXBElement<? extends FilterType>) obj;
assertNotNull(jaxfilter);
Filter filter = TRANSFORMER_GT.visitFilter(jaxfilter.getValue());
assertNotNull(filter);
LogicalOperator prop = (LogicalOperator) filter;
BinaryComparisonOperator leftop = (BinaryComparisonOperator) prop.getOperands().get(0);
BinaryComparisonOperator rightop = (BinaryComparisonOperator) prop.getOperands().get(1);
ValueReference left = (ValueReference) leftop.getOperand1();
Literal right = (Literal) leftop.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), 455f, DELTA);
left = (ValueReference) rightop.getOperand1();
right = (Literal) rightop.getOperand2();
assertEquals(left.getXPath(), valueStr);
assertEquals(((Number) right.apply(null)).floatValue(), 457f, DELTA);
// write test
FilterType ft = TRANSFORMER_OGC.apply(filter);
assertNotNull(ft.getLogicOps());
LogicOpsType cot = ft.getLogicOps().getValue();
assertEquals(ft.getLogicOps().getName().getLocalPart(), OGCJAXBStatics.FILTER_LOGIC_OR);
BinaryLogicOpType pibt = (BinaryLogicOpType) cot;
BinaryComparisonOpType leftoptype = (BinaryComparisonOpType) pibt.getComparisonOps().get(0).getValue();
BinaryComparisonOpType rightoptype = (BinaryComparisonOpType) pibt.getComparisonOps().get(1).getValue();
PropertyNameType lf = (PropertyNameType) leftoptype.getExpression().get(0).getValue();
LiteralType rg = (LiteralType) leftoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(455, rg.getContent().get(0));
lf = (PropertyNameType) rightoptype.getExpression().get(0).getValue();
rg = (LiteralType) rightoptype.getExpression().get(1).getValue();
assertEquals(valueStr, lf.getContent());
numberEquals(457, rg.getContent().get(0));
MARSHALLER.marshal(ft.getLogicOps(), TEST_FILE_FIL_LOG_OR);
POOL.recycle(MARSHALLER);
POOL.recycle(UNMARSHALLER);
}
Aggregations