/** * Copyright (c) Codice Foundation * <p> * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software Foundation, either version 3 of the * License, or any later version. * <p> * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. A copy of the GNU Lesser General Public License * is distributed along with this program and can be found at * <http://www.gnu.org/licenses/lgpl.html>. */ package ddf.catalog.filter.proxy.builder.test; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.util.Date; import org.geotools.filter.visitor.DefaultExpressionVisitor; import org.geotools.filter.visitor.DefaultFilterVisitor; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.opengis.filter.And; import org.opengis.filter.Filter; import org.opengis.filter.FilterVisitor; import org.opengis.filter.Not; import org.opengis.filter.Or; import org.opengis.filter.PropertyIsBetween; import org.opengis.filter.PropertyIsEqualTo; import org.opengis.filter.PropertyIsLike; import org.opengis.filter.PropertyIsNotEqualTo; import org.opengis.filter.PropertyIsNull; import org.opengis.filter.expression.ExpressionVisitor; import org.opengis.filter.expression.Literal; import org.opengis.filter.expression.PropertyName; import org.opengis.filter.spatial.Beyond; import org.opengis.filter.spatial.DWithin; import org.opengis.filter.spatial.Intersects; import org.opengis.filter.spatial.Within; import org.opengis.filter.temporal.After; import org.opengis.filter.temporal.Before; import org.opengis.filter.temporal.During; import org.opengis.geometry.Geometry; import org.opengis.temporal.Instant; import ddf.catalog.data.Metacard; import ddf.catalog.filter.FilterBuilder; import ddf.catalog.filter.proxy.builder.GeotoolsFilterBuilder; public class FilterBuilderTest { static final String FOO_ATTRIBUTE = "foo"; static final String POINT_WKT = "POINT (10 20)"; private static final String MULTIPOLYGON_WKT = "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 45 20, 30 5, 10 10, 10 30, 20 35), (30 20, 20 25, 20 15, 30 20)))"; @Test public void propertyIsEqual() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .text("bar"); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .equalTo() .text("bar"); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .text("bar"); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .bool(true); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .bytes(new byte[] {}); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .date(new Date()); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .number((short) 5); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .number(new Integer(5)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .number(new Long(5)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .number(new Float(5)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .number(new Double(5)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .wkt("POINT (10, 30)"); filter.accept(visitor, null); filter = builder.attribute(null) .is() .text(null); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .equalTo() .dateRange(new Date(1), new Date(2)); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(13)) .visit(isA(PropertyIsEqualTo.class), anyObject()); inOrder.verify(visitor, times(1)) .visit(isA(During.class), anyObject()); } @Test public void propertyIsNotEqual() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .notEqualTo() .text("bar"); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .notEqualTo() .text("bar"); filter.accept(visitor, null); filter = builder.attribute(null) .is() .notEqualTo() .text(null); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(3)) .visit(isA(PropertyIsNotEqualTo.class), anyObject()); } @Test public void propertyIsBetween() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .between() .numbers(new Long(5), new Long(7)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .between() .numbers(new Long(5), new Long(7)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .between() .numbers((short) 5, (short) 7); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .between() .numbers(new Integer(5), new Integer(7)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .between() .numbers(new Long(5), new Long(7)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .between() .numbers(new Float(5), new Float(7)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .between() .numbers(new Double(5), new Double(7)); filter.accept(visitor, null); filter = builder.attribute(null) .is() .between() .numbers(null, (Integer) null); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(8)) .visit(isA(PropertyIsBetween.class), anyObject()); } @Test public void propertyIsGreaterThan() { // TODO } @Test public void propertyIsGreaterThanOrEqualTo() { // TODO } @Test public void propertyIsLessThan() { // TODO } @Test public void propertyIsLessThanOrEqualTo() { // TODO } @Test public void andOrNull() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); // FilterBuilder builder = new GeotoolsFilterBuilder(); // // FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.allOf(builder.anyOf(builder.attribute(FOO_ATTRIBUTE) .is() .empty())); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(And.class), anyObject()); inOrder.verify(visitor) .visit(isA(Or.class), anyObject()); ArgumentCaptor<PropertyIsNull> propertyIsNullArgument = ArgumentCaptor.forClass( PropertyIsNull.class); verify(visitor).visit(propertyIsNullArgument.capture(), anyObject()); ExpressionVisitor expVisitor = spy(new DefaultExpressionVisitor() { }); propertyIsNullArgument.getValue() .getExpression() .accept(expVisitor, null); ArgumentCaptor<PropertyName> propertyNameArgument = ArgumentCaptor.forClass(PropertyName.class); verify(expVisitor).visit(propertyNameArgument.capture(), anyObject()); assertEquals(FOO_ATTRIBUTE, propertyNameArgument.getValue() .getPropertyName()); } @Test public void andNull() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.allOf(builder.attribute(FOO_ATTRIBUTE) .is() .empty()); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(And.class), anyObject()); inOrder.verify(visitor) .visit(isA(PropertyIsNull.class), anyObject()); } @Test public void orNull() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.anyOf(builder.attribute(FOO_ATTRIBUTE) .is() .empty()); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(Or.class), anyObject()); inOrder.verify(visitor) .visit(isA(PropertyIsNull.class), anyObject()); } @Test public void notNull() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.not(builder.attribute(FOO_ATTRIBUTE) .is() .empty()); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(Not.class), anyObject()); inOrder.verify(visitor) .visit(isA(PropertyIsNull.class), anyObject()); } @Test public void afterDate() { final Date date = new Date(); FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .is() .after() .date(date); filter.accept(visitor, null); ArgumentCaptor<After> expressionArgument = ArgumentCaptor.forClass(After.class); verify(visitor).visit(expressionArgument.capture(), anyObject()); ExpressionVisitor expVisitor = spy(new DefaultExpressionVisitor() { }); expressionArgument.getValue() .getExpression1() .accept(expVisitor, null); ArgumentCaptor<PropertyName> propertyNameArgument = ArgumentCaptor.forClass(PropertyName.class); verify(expVisitor).visit(propertyNameArgument.capture(), anyObject()); assertEquals(FOO_ATTRIBUTE, propertyNameArgument.getValue() .getPropertyName()); expressionArgument.getValue() .getExpression2() .accept(expVisitor, null); ArgumentCaptor<Literal> literalArgument = ArgumentCaptor.forClass(Literal.class); verify(expVisitor).visit(literalArgument.capture(), anyObject()); assertEquals(date, ((Instant) literalArgument.getValue() .getValue()).getPosition() .getDate()); } @Test public void isDate() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .is() .date(new Date()); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(PropertyIsEqualTo.class), anyObject()); } @Test public void after() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .after() .date(new Date()); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .after() .date(new Date()); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(2)) .visit(isA(After.class), anyObject()); } @Test public void before() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .before() .date(new Date()); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .before() .date(new Date()); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(2)) .visit(isA(Before.class), anyObject()); } @Test public void during() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .during() .dates(new Date(), new Date(System.currentTimeMillis() + 10000000)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .during() .next(1000); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .during() .last(1000); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .during() .dates(new Date(), new Date(System.currentTimeMillis() + 10000000)); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .during() .next(1000); filter.accept(visitor, null); filter = builder.attribute(FOO_ATTRIBUTE) .is() .during() .last(1000); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(6)) .visit(isA(During.class), anyObject()); } @Test public void like() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .is() .like() .text("bar"); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(PropertyIsLike.class), anyObject()); // TODO check case sensitivity } @Test public void likeCaseSensitive() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .is() .like() .caseSensitiveText("bAr"); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(PropertyIsLike.class), anyObject()); // TODO check case sensitivity } @Test public void likeFuzzy() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(FOO_ATTRIBUTE) .is() .like() .fuzzyText("bar"); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(PropertyIsLike.class), anyObject()); // TODO check for fuzzy } @Test public void likeXPath() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.xpath("//foo") .like() .text("bar"); filter.accept(visitor, null); filter = builder.xpath("//foo") .is() .like() .text("bar"); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(2)) .visit(isA(PropertyIsLike.class), anyObject()); } @Test public void xpathExists() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.xpath("//foo") .exists(); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(PropertyIsLike.class), anyObject()); } @Test(expected = IllegalArgumentException.class) public void likeXPathNull() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.xpath("//foo") .is() .like() .text(null); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(PropertyIsLike.class), anyObject()); filter = builder.xpath(null) .is() .like() .text(null); } @Test(expected = IllegalArgumentException.class) public void operatorBeforeNull() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute("something") .before() .date(null); } @Test(expected = IllegalArgumentException.class) public void operatorAfterNull() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute("something") .after() .date(null); } @Test(expected = IllegalArgumentException.class) public void operatorDuringNull() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute("something") .during() .dates(null, null); } @Test(expected = IllegalArgumentException.class) public void operatorBeyondNull() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute("something") .beyond() .wkt(null); } @Test(expected = IllegalArgumentException.class) public void operatorWithinNull() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute("something") .within() .wkt(null); } @Test(expected = IllegalArgumentException.class) public void operatorWithinBufferNull() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute("something") .withinBuffer() .wkt(null); } @Test(expected = IllegalArgumentException.class) public void likeXPathInvalid() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.xpath("foo") .is() .like() .text("bar"); } @Test public void nearest() { // TODO } @Test public void contains() { // TODO } @Test public void intersects() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(Metacard.GEOGRAPHY) .intersecting() .wkt(POINT_WKT); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(1)) .visit(isA(Intersects.class), anyObject()); } @Test public void beyond() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(Metacard.GEOGRAPHY) .beyond() .wkt(POINT_WKT, 123.45d); filter.accept(visitor, null); filter = builder.attribute(Metacard.GEOGRAPHY) .beyond() .wkt(POINT_WKT); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(2)) .visit(isA(Beyond.class), anyObject()); // TODO check arguments } @Test public void within() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(Metacard.GEOGRAPHY) .within() .wkt(POINT_WKT); filter.accept(visitor, null); filter = builder.attribute(Metacard.GEOGRAPHY) .is() .within() .wkt(MULTIPOLYGON_WKT); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(2)) .visit(isA(Within.class), anyObject()); } @Test public void withinBuffer() { FilterVisitor visitor = spy(new DefaultFilterVisitor() { }); FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(Metacard.GEOGRAPHY) .withinBuffer() .wkt(POINT_WKT); filter.accept(visitor, null); filter = builder.attribute(Metacard.GEOGRAPHY) .withinBuffer() .wkt(POINT_WKT, 123.45d); filter.accept(visitor, null); filter = builder.attribute(Metacard.GEOGRAPHY) .is() .withinBuffer() .wkt(POINT_WKT); filter.accept(visitor, null); filter = builder.attribute(Metacard.GEOGRAPHY) .is() .withinBuffer() .wkt(POINT_WKT, 123.45d); filter.accept(visitor, null); InOrder inOrder = inOrder(visitor); inOrder.verify(visitor, times(4)) .visit(isA(DWithin.class), anyObject()); } /** * */ @Test public void withinGeoTest() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.attribute(Metacard.GEOGRAPHY) .within() .wkt(POINT_WKT); filter.accept(new DefaultFilterVisitor() { @Override public Object visit(Within filter, Object data) { Literal literalWrapper = (Literal) filter.getExpression2(); Geometry geometry = (Geometry) literalWrapper.evaluate(null); geometry.getCentroid() .getCoordinate(); return super.visit(filter, data); } }, null); } // @Test public void test() { FilterBuilder builder = new GeotoolsFilterBuilder(); Filter filter = builder.allOf( builder.allOf(builder.anyOf(builder.attribute(FOO_ATTRIBUTE) .is() .empty())), builder.allOf(builder.attribute(FOO_ATTRIBUTE) .is() .empty()), builder.allOf( builder.attribute("attr") .is() .greaterThan() .number(new Short((short) 5)), builder.attribute("frequency") .is() .greaterThan() .number(new Integer(5)), builder.attribute("frequency") .is() .greaterThan() .number(new Long(5)), builder.attribute("frequency") .is() .greaterThan() .number(new Float(5)), builder.attribute("frequency") .is() .greaterThan() .number(new Double(5)), builder.attribute("frequency") .is() .greaterThanOrEqualTo() .number(new Short((short) 5)), builder.attribute("frequency") .is() .greaterThanOrEqualTo() .number(new Integer(5)), builder.attribute("frequency") .is() .greaterThanOrEqualTo() .number(new Long(5)), builder.attribute("frequency") .is() .greaterThanOrEqualTo() .number(new Float(5)), builder.attribute("frequency") .is() .greaterThanOrEqualTo() .number(new Double(5)), builder.attribute("frequency") .is() .lessThan() .number(new Short((short) 5)), builder.attribute("frequency") .is() .lessThan() .number(new Integer(5)), builder.attribute("frequency") .is() .lessThan() .number(new Long(5)), builder.attribute("frequency") .is() .lessThan() .number(new Float(5)), builder.attribute("frequency") .is() .lessThan() .number(new Double(5)), builder.attribute("frequency") .is() .lessThanOrEqualTo() .number(new Short((short) 5)), builder.attribute("frequency") .is() .lessThanOrEqualTo() .number(new Integer(5)), builder.attribute("frequency") .is() .lessThanOrEqualTo() .number(new Long(5)), builder.attribute("frequency") .is() .lessThanOrEqualTo() .number(new Float(5)), builder.attribute("frequency") .is() .lessThanOrEqualTo() .number(new Double(5)), builder.attribute("frequency") .is() .between() .numbers((short) 5, (short) 6), builder.attribute("frequency") .is() .between() .numbers(new Integer(5), new Integer(5)), builder.attribute("frequency") .is() .between() .numbers(new Long(5), new Long(5)), builder.attribute("frequency") .is() .between() .numbers(new Float(5), new Float(5)), builder.attribute("frequency") .is() .between() .numbers(new Double(5), new Double(5)), // (IN)EQUALITY builder.attribute(FOO_ATTRIBUTE) .is() .number(new Short((short) 5)), builder.attribute("frequency") .is() .number(new Integer(5)), builder.attribute("frequency") .is() .number(new Long(5)), builder.attribute("frequency") .is() .number(new Float(5)), builder.attribute("frequency") .is() .number(new Double(5)), builder.attribute("created") .is() .date(new Date()), builder.attribute("created") .is() .dateRange(new Date(), new Date()), builder.attribute("created") .is() .bool(true), builder.attribute("created") .is() .bytes(new byte[] {}), builder.attribute("created") .is() .wkt("POINT (10, 30)"), builder.attribute("created") .is() .text("POINT (10, 30)"), builder.attribute("frequency") .is() .equalTo() .number(new Integer(5)), builder.attribute("frequency") .is() .equalTo() .number(new Long(5)), builder.attribute("frequency") .is() .equalTo() .number(new Float(5)), builder.attribute("frequency") .is() .equalTo() .number(new Double(5)), builder.attribute("created") .is() .equalTo() .date(new Date()), builder.attribute("created") .is() .equalTo() .dateRange(new Date(), new Date()), builder.attribute("created") .is() .equalTo() .bool(true), builder.attribute("created") .is() .equalTo() .bytes(new byte[] {}), builder.attribute("created") .is() .equalTo() .wkt("POINT (10, 30)"), builder.attribute("created") .is() .equalTo() .text("POINT (10, 30)"), builder.attribute("frequency") .is() .notEqualTo() .number(new Short((short) 5)), builder.attribute("frequency") .is() .notEqualTo() .number(new Integer(5)), builder.attribute("frequency") .is() .notEqualTo() .number(new Long(5)), builder.attribute("frequency") .is() .notEqualTo() .number(new Float(5)), builder.attribute("frequency") .is() .notEqualTo() .number(new Double(5)), builder.attribute("created") .is() .notEqualTo() .date(new Date()), builder.attribute("created") .is() .notEqualTo() .dateRange(new Date(), new Date()), builder.attribute("created") .is() .notEqualTo() .bool(true), builder.attribute("created") .is() .notEqualTo() .bytes(new byte[] {}), builder.attribute("created") .is() .notEqualTo() .wkt("POINT (10, 30)"), builder.attribute("created") .is() .notEqualTo() .text("POINT (10, 30)"), // NULLABLE builder.attribute("created") .is() .empty(), builder.attribute(FOO_ATTRIBUTE) .is() .number(50), // TEMPORAL builder.attribute("created") .is() .after() .date(new Date()), builder.attribute("created") .is() .before() .date(new Date()), builder.attribute("created") .is() .during() .dates(new Date(), new Date()), builder.attribute("created") .is() .overlapping() .dates(new Date(), new Date()), // CONTEXTUAL builder.attribute(FOO_ATTRIBUTE) .is() .like() .text("bar*"), // implied equality builder.attribute("frequency") .is() .number((short) 5), builder.attribute("frequency") .is() .number(new Integer(5)), builder.attribute("frequency") .is() .number(new Long(5)), builder.attribute("frequency") .is() .number(new Float(5)), builder.attribute("frequency") .is() .number(new Double(5)), builder.attribute("created") .is() .date(new Date()), builder.attribute("created") .is() .dateRange(new Date(), new Date()), builder.attribute("created") .is() .bool(true), builder.attribute("created") .is() .bytes(new byte[] {}), builder.attribute("created") .is() .wkt("POINT (10, 30)"), builder.attribute("created") .is() .text("search*"), // SPATIAL builder.attribute("location") .is() .intersecting() .wkt("POINT (10, 30)"), builder.attribute("location") .is() .containing() .wkt("POINT (10, 30)"), builder.attribute("location") .is() .beyond() .wkt("POINT (10, 30)"), builder.attribute("location") .is() .within() .wkt("POINT (10, 30)"), builder.attribute("location") .is() .withinBuffer() .wkt("POINT (10, 30)", (long) 5), // NO IS builder.attribute("frequency") .greaterThan() .number(new Short((short) 5)), builder.attribute("frequency") .greaterThan() .number(new Integer(5)), builder.attribute("frequency") .greaterThan() .number(new Long(5)), builder.attribute("frequency") .greaterThan() .number(new Float(5)), builder.attribute("frequency") .greaterThan() .number(new Double(5)), builder.attribute("frequency") .greaterThanOrEqualTo() .number(new Short((short) 5)), builder.attribute("frequency") .greaterThanOrEqualTo() .number(new Integer(5)), builder.attribute("frequency") .greaterThanOrEqualTo() .number(new Long(5)), builder.attribute("frequency") .greaterThanOrEqualTo() .number(new Float(5)), builder.attribute("frequency") .greaterThanOrEqualTo() .number(new Double(5)), builder.attribute("frequency") .lessThan() .number(new Short((short) 5)), builder.attribute("frequency") .lessThan() .number(new Integer(5)), builder.attribute("frequency") .lessThan() .number(new Long(5)), builder.attribute("frequency") .lessThan() .number(new Float(5)), builder.attribute("frequency") .lessThan() .number(new Double(5)), builder.attribute("frequency") .lessThanOrEqualTo() .number(new Short((short) 5)), builder.attribute("frequency") .lessThanOrEqualTo() .number(5), builder.attribute("frequency") .lessThanOrEqualTo() .number(5L), builder.attribute("frequency") .lessThanOrEqualTo() .number(5f), builder.attribute("frequency") .lessThanOrEqualTo() .number(5d), builder.attribute("frequency") .between() .numbers((short) 5, (short) 6), builder.attribute("frequency") .between() .numbers(5, 6), builder.attribute("frequency") .between() .numbers(5L, 6L), builder.attribute("frequency") .between() .numbers(5f, 6f), builder.attribute("frequency") .between() .numbers(5d, 6d), // (IN)EQUALITY builder.attribute("frequency") .number((short) 5), builder.attribute("frequency") .number(5), builder.attribute("frequency") .number(5L), builder.attribute("frequency") .number(5f), builder.attribute("frequency") .number(5d), builder.attribute("created") .date(new Date()), builder.attribute("created") .dateRange(new Date(), new Date()), builder.attribute("created") .bool(true), builder.attribute("created") .bytes(new byte[] {}), builder.attribute("created") .wkt("POINT (10, 30)"), builder.attribute("created") .text("POINT (10, 30)"), builder.attribute("frequency") .notEqualTo() .number(new Short((short) 5)), builder.attribute("frequency") .notEqualTo() .number(new Integer(5)), builder.attribute("frequency") .notEqualTo() .number(new Long(5)), builder.attribute("frequency") .notEqualTo() .number(new Float(5)), builder.attribute("frequency") .notEqualTo() .number(new Double(5)), builder.attribute("created") .notEqualTo() .date(new Date()), builder.attribute("created") .notEqualTo() .dateRange(new Date(), new Date()), builder.attribute("created") .notEqualTo() .bool(true), builder.attribute("created") .notEqualTo() .bytes(new byte[] {}), builder.attribute("created") .notEqualTo() .wkt("POINT (10, 30)"), builder.attribute("created") .notEqualTo() .text("POINT (10, 30)"), // NULLABLE builder.attribute("created") .empty(), // TEMPORAL builder.attribute("created") .after() .date(new Date()), builder.attribute("created") .before() .date(new Date()), builder.attribute("created") .during() .dates(new Date(), new Date()), builder.attribute("created") .overlapping() .dates(new Date(), new Date()), // CONTEXTUAL builder.attribute(FOO_ATTRIBUTE) .like() .text("bar*"), // SPATIAL builder.attribute("location") .intersecting() .wkt("POINT (10, 30)"), builder.attribute("location") .containing() .wkt("POINT (10, 30)"), builder.attribute("location") .beyond() .wkt("POINT (10, 30)"), builder.attribute("location") .within() .wkt("POINT (10, 30)"), builder.attribute("location") .withinBuffer() .wkt("POINT (10, 30)", (long) 5), builder.xpath("//blah/blah") .exists(), builder.xpath("//foo/bar") .like() .text("bat"), builder.xpath("//foo/bar") .like() .caseSensitiveText("bat"), builder.xpath("//foo/bar") .like() .fuzzyText("bat"), builder.xpath("//blah/blah") .is() .like() .text("bat"), builder.xpath("//blah/blah") .is() .like() .caseSensitiveText("bat"), builder.xpath("//blah/blah") .is() .like() .fuzzyText("bat"), builder.attribute(FOO_ATTRIBUTE) .like() .fuzzyText("bar"), builder.attribute(FOO_ATTRIBUTE) .like() .caseSensitiveText("bar"), builder.attribute(FOO_ATTRIBUTE) .like() .text("bar"), builder.attribute(FOO_ATTRIBUTE) .is() .like() .fuzzyText("bar"), builder.attribute(FOO_ATTRIBUTE) .is() .like() .caseSensitiveText("bar"), builder.attribute(FOO_ATTRIBUTE) .is() .like() .text("bar"), builder.attribute(FOO_ATTRIBUTE) .nearestTo() .wkt("POINT(10,10)"), // Relative Time builder.attribute("created") .during() .last(500L), builder.attribute("created") .during() .next(500L) )); } }