package org.geotools.filter.visitor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.temporal.TemporalFilterTestSupport;
import org.geotools.temporal.object.DefaultInstant;
import org.geotools.temporal.object.DefaultPeriod;
import org.geotools.temporal.object.DefaultPosition;
import org.junit.Test;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory2;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.Point;
import org.opengis.temporal.Instant;
import org.opengis.temporal.Period;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
*
*
* @source $URL$
*/
public class ExtractBoundsFilterVisitorTest extends TemporalFilterTestSupport {
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
ExtractBoundsFilterVisitor visitor = new ExtractBoundsFilterVisitor();
Envelope infinity = visitor.infinity();
@Test
public void testInclude() {
Envelope env = (Envelope) Filter.INCLUDE.accept(visitor, null);
assertEquals(infinity, env);
}
@Test
public void testExclude() {
Envelope env = (Envelope) Filter.EXCLUDE.accept(visitor, null);
assertTrue(env.isNull());
}
@Test
public void testNonSpatial() {
Filter f = ff.less(ff.property("att"), ff.literal(10));
Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(infinity, env);
}
@Test
public void testBbox() {
Filter f = ff.bbox("geom", -10, -10, 10, 10, null);
Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAnd() {
Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null), ff.equals(ff.property("att"), ff
.literal("10")));
Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testOr() {
Filter f = ff.or(ff.bbox("geom", -10, -10, 10, 10, null), ff.equals(ff.property("att"), ff
.literal("10")));
Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(infinity, env);
}
@Test
public void testTouches() {
Coordinate[] coords = new Coordinate[] { new Coordinate(0, 0), new Coordinate(10, 10) };
LineString lineString = new GeometryFactory().createLineString(coords);
Filter filter = ff.touches(ff.property("name"), ff.literal(lineString));
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(new Envelope(0, 10, 0, 10), env);
}
@Test
public void testBeyond() {
Coordinate[] coords = new Coordinate[] { new Coordinate(0, 0), new Coordinate(10, 10) };
LineString lineString = new GeometryFactory().createLineString(coords);
Filter filter = ff.beyond(ff.property("name"), ff.literal(lineString), 100, "m");
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(infinity, env);
}
@Test
public void testNotBeyond() {
Coordinate[] coords = new Coordinate[] { new Coordinate(0, 0), new Coordinate(10, 10) };
LineString lineString = new GeometryFactory().createLineString(coords);
Filter filter = ff.beyond(ff.property("name"), ff.literal(lineString), 100, "m");
Envelope env = (Envelope) filter.accept(visitor, null);
// the thing is not so smart to assess that not(beyond) -> within, but we have to make
// sure that at least the returned envelope contains the real one
assertEquals(infinity, env);
}
@Test
public void testNull() {
Filter filter = ff.isNull(ff.property("name"));
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(infinity, env);
}
@Test
public void testDWithin() {
Point geom = new GeometryFactory().createPoint(new Coordinate(0,0));
Filter filter = ff.dwithin(ff.property("name"), ff.literal(geom), 100, "metre");
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(new Envelope(-100, 100, -100, 100), env);
}
@Test
public void testAndDWithin() {
Point geom = new GeometryFactory().createPoint(new Coordinate(0,0));
Filter filter = ff.dwithin(ff.property("geom"), ff.literal(geom), 100, "metre");
filter = ff.and(filter, ff.bbox(ff.property("geom"), 50, 50, 150, 150, null));
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(new Envelope(50, 100, 50, 100), env);
}
@Test
public void testDisjoint() {
Coordinate[] coords = new Coordinate[] { new Coordinate(0, 0), new Coordinate(10, 10) };
LineString lineString = new GeometryFactory().createLineString(coords);
Filter filter = ff.disjoint(ff.property("name"), ff.literal(lineString));
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(infinity, env);
}
@Test
public void testAndDisjoint() {
Coordinate[] coords = new Coordinate[] { new Coordinate(0, 0), new Coordinate(10, 10) };
LineString lineString = new GeometryFactory().createLineString(coords);
Filter filter = ff.disjoint(ff.property("name"), ff.literal(lineString));
filter = ff.and(filter, ff.bbox(ff.property("geom"), 50, 50, 150, 150, null));
Envelope env = (Envelope) filter.accept(visitor, null);
assertEquals(new Envelope(50, 150, 50, 150), env);
}
@Test
public void testAndTemporalBetween() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Instant end = instant("2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.between(ff.literal("someDate"), ff.literal(start), ff.literal(end)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalAfter() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.after(ff.literal("someDate"), ff.literal(start)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalBefore() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.before(ff.literal("someDate"), ff.literal(start)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalBegins() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.begins(ff.literal("someDate"), ff.literal(start)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalBegunBy() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.begunBy(ff.literal("someDate"), ff.literal(start)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalDuring() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.during(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalEndedBy() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.endedBy(ff.literal("someDate"), ff.literal(start)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalEnds() throws Exception {
final Instant start = instant("2016-01-01T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.ends(ff.literal("someDate"), ff.literal(start)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalMeets() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.meets(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalMetBy() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.metBy(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalOverlappedBy() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.overlappedBy(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalTContains() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.tcontains(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalTEquals() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.tequals(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndTemporalTOverlaps() throws Exception {
final Period p = period("2016-01-01T00:00:00.000-0500", "2106-01-02T00:00:00.000-0500");
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.toverlaps(ff.literal("someDate"), ff.literal(p)));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndIsNull() throws Exception {
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.isNull(ff.literal("someDate")));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
@Test
public void testAndIsNil() throws Exception {
final Filter f = ff.and(ff.bbox("geom", -10, -10, 10, 10, null),
ff.isNil(ff.literal("someDate"), null));
final Envelope env = (Envelope) f.accept(visitor, null);
assertEquals(new Envelope(-10, 10, -10, 10), env);
}
}