package mil.nga.giat.geowave.adapter.vector.query.cql; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.store.index.numeric.NumberRangeFilter; import mil.nga.giat.geowave.core.store.index.numeric.NumericEqualsConstraint; import mil.nga.giat.geowave.core.store.index.numeric.NumericLessThanConstraint; import mil.nga.giat.geowave.core.store.index.numeric.NumericQueryConstraint; import mil.nga.giat.geowave.core.store.index.text.TextExactMatchFilter; import mil.nga.giat.geowave.core.store.index.text.TextQueryConstraint; import org.geotools.data.Query; import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.text.cql2.CQLException; import org.junit.Test; import org.opengis.filter.Filter; public class PropertyFilterVisitorTest { @Test public void testNumbersTypes() throws CQLException { Filter filter = CQL .toFilter("a < 9 and c = 12 and e >= 11 and f <= 12 and g > 13 and h between 4 and 6 and k > 4 and k < 6 and l >= 4 and l <= 6"); Query query = new Query( "type", filter); PropertyFilterVisitor visitor = new PropertyFilterVisitor(); PropertyConstraintSet constraints = (PropertyConstraintSet) query.getFilter().accept( visitor, null); NumberRangeFilter nf = (NumberRangeFilter) ((NumericLessThanConstraint) constraints .getConstraintsById(new ByteArrayId( "a"))).getFilter(); assertTrue(nf.getLowerValue().doubleValue() == Double.MIN_VALUE); assertEquals( 9, nf.getUpperValue().longValue()); assertFalse(nf.isInclusiveHigh()); assertTrue(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericQueryConstraint) constraints.getConstraintsById(new ByteArrayId( "e"))).getFilter(); assertEquals( 11, nf.getLowerValue().longValue()); assertTrue(nf.getUpperValue().doubleValue() == Double.MAX_VALUE); assertTrue(nf.isInclusiveHigh()); assertTrue(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericEqualsConstraint) constraints.getConstraintsById(new ByteArrayId( "c"))).getFilter(); assertEquals( 12, nf.getLowerValue().longValue()); assertEquals( 12, nf.getUpperValue().longValue()); assertTrue(nf.isInclusiveHigh()); assertTrue(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericQueryConstraint) constraints.getConstraintsById(new ByteArrayId( "g"))).getFilter(); assertEquals( 13, nf.getLowerValue().longValue()); assertTrue(nf.getUpperValue().doubleValue() == Double.MAX_VALUE); assertTrue(nf.isInclusiveHigh()); assertFalse(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericQueryConstraint) constraints.getConstraintsById(new ByteArrayId( "f"))).getFilter(); assertEquals( 12, nf.getUpperValue().longValue()); assertTrue(nf.getLowerValue().doubleValue() == Double.MIN_VALUE); assertTrue(nf.isInclusiveHigh()); assertTrue(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericQueryConstraint) constraints.getConstraintsById(new ByteArrayId( "h"))).getFilter(); assertEquals( 4, nf.getLowerValue().longValue()); assertEquals( 6, nf.getUpperValue().longValue()); assertTrue(nf.isInclusiveHigh()); assertTrue(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericQueryConstraint) constraints.getConstraintsById(new ByteArrayId( "k"))).getFilter(); assertEquals( 4, nf.getLowerValue().longValue()); assertEquals( 6, nf.getUpperValue().longValue()); assertFalse(nf.isInclusiveHigh()); assertFalse(nf.isInclusiveLow()); nf = (NumberRangeFilter) ((NumericQueryConstraint) constraints.getConstraintsById(new ByteArrayId( "l"))).getFilter(); assertEquals( 4, nf.getLowerValue().longValue()); assertEquals( 6, nf.getUpperValue().longValue()); assertTrue(nf.isInclusiveHigh()); assertTrue(nf.isInclusiveLow()); } @Test public void testTextTypes() throws CQLException { Filter filter = CQL.toFilter("b = '10'"); Query query = new Query( "type", filter); PropertyFilterVisitor visitor = new PropertyFilterVisitor(); PropertyConstraintSet constraints = (PropertyConstraintSet) query.getFilter().accept( visitor, null); TextExactMatchFilter tf = (TextExactMatchFilter) ((TextQueryConstraint) constraints .getConstraintsById(new ByteArrayId( "b"))).getFilter(); assertEquals( "10", tf.getMatchValue()); assertTrue(tf.isCaseSensitive()); } }