Package org.geotools.filter

Source Code of org.geotools.filter.MultiFilterTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library 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;
*    version 2.1 of the License.
*
*    This library 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.
*/
package org.geotools.filter;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;

import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.junit.Test;
import org.opengis.filter.FilterFactory2;
import org.opengis.filter.MultiValuedFilter;
import org.opengis.filter.MultiValuedFilter.MatchAction;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.Filter;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.PrecisionModel;

/**
*
* Test whether filters are compatible with multi-valued properties.
*
* @author Niels Charlier, Curtin University of Technology
*
*
*
* @source $URL$
*/
public class MultiFilterTest {
   
    private FilterFactory2 fac = CommonFactoryFinder.getFilterFactory2(null);
   
    @Test
    public void testFactoryAndGetter() {
        MultiValuedFilter filter;
        Expression expr1 = fac.property("foo");
        Expression expr2 = fac.property("bar");
        Expression expr3 = fac.property("noo");
       
        //test default is MatchAction.ANY
        filter = fac.bbox(expr1, new ReferencedEnvelope());
        assertEquals(filter.getMatchAction(), MatchAction.ANY);       
        filter = fac.beyond(expr1, expr2, 0.1, "");
        assertEquals(filter.getMatchAction(), MatchAction.ANY);       
        filter = fac.beyond(expr1, expr2, 0.1, "");
        assertEquals(filter.getMatchAction(), MatchAction.ANY);       
        filter = fac.contains(expr1, expr2);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);       
        filter = fac.crosses(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.disjoint(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.dwithin(expr1, expr2, 0.1, "");       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.equal(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.intersects(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.overlaps(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.touches(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.within(expr1, expr2);       
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
       
        filter = fac.equal(expr1, expr2, false);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.less(expr1, expr2, false);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.greater(expr1, expr2, false);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.lessOrEqual(expr1, expr2, false);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.greaterOrEqual(expr1, expr2,false);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.notEqual(expr1, expr2, false);
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
        filter = fac.between(expr1, expr2, expr3);
        assertEquals(filter.getMatchAction(), MatchAction.ANY)
        filter = fac.like(expr1, "");
        assertEquals(filter.getMatchAction(), MatchAction.ANY);
       
        //test custom match action
        filter = fac.bbox(expr1, new ReferencedEnvelope(), MatchAction.ONE);
        assertEquals(filter.getMatchAction(), MatchAction.ONE);       
        filter = fac.beyond(expr1, expr2, 0.1, "", MatchAction.ALL);
        assertEquals(filter.getMatchAction(), MatchAction.ALL);       
        filter = fac.beyond(expr1, expr2, 0.1, "", MatchAction.ONE);
        assertEquals(filter.getMatchAction(), MatchAction.ONE);       
        filter = fac.contains(expr1, expr2, MatchAction.ALL);
        assertEquals(filter.getMatchAction(), MatchAction.ALL);       
        filter = fac.crosses(expr1, expr2, MatchAction.ONE);       
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
        filter = fac.disjoint(expr1, expr2, MatchAction.ALL);       
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
        filter = fac.dwithin(expr1, expr2, 0.1, "", MatchAction.ONE);       
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
        filter = fac.equal(expr1, expr2, MatchAction.ALL);       
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
        filter = fac.intersects(expr1, expr2, MatchAction.ONE);       
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
        filter = fac.overlaps(expr1, expr2, MatchAction.ALL);       
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
        filter = fac.touches(expr1, expr2, MatchAction.ONE);       
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
        filter = fac.within(expr1, expr2, MatchAction.ALL);       
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
       
        filter = fac.equal(expr1, expr2, false, MatchAction.ALL);
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
        filter = fac.less(expr1, expr2, false, MatchAction.ONE);
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
        filter = fac.greater(expr1, expr2, false, MatchAction.ALL);
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
        filter = fac.lessOrEqual(expr1, expr2, false, MatchAction.ONE);
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
        filter = fac.greaterOrEqual(expr1, expr2,false, MatchAction.ALL);
        assertEquals(filter.getMatchAction(), MatchAction.ALL);
        filter = fac.notEqual(expr1, expr2, false, MatchAction.ONE);
        assertEquals(filter.getMatchAction(), MatchAction.ONE);       
        filter = fac.between(expr1, expr2, expr3, MatchAction.ALL);
        assertEquals(filter.getMatchAction(), MatchAction.ALL);       
        filter = fac.like(expr1, "", "*", "?", "\\", false, MatchAction.ONE);
        assertEquals(filter.getMatchAction(), MatchAction.ONE);
       
    }
   
    @Test
    public void testCompareStringOperators_Any() {
        Filter filter;
        List<String> list = new ArrayList<String>();
       
        list.add("foo-1");
        list.add("foo-2");
        list.add("foo-3");
        list.add("blah-blah");
       
        Expression e = new LiteralExpressionImpl(list);       
       
        Expression empty = new LiteralExpressionImpl(new ArrayList<String>());
       
        filter = fac.equals(e, new LiteralExpressionImpl("foo-2"));
        assertTrue(filter.evaluate(null));
       
        filter = fac.equals(new LiteralExpressionImpl("foo-1"), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.equals(e, new LiteralExpressionImpl("foo-3"));
        assertTrue(filter.evaluate(null));
       
        filter = fac.equals(new LiteralExpressionImpl("blah"), e);
        assertFalse(filter.evaluate(null));
       
        filter = fac.equals(empty, new LiteralExpressionImpl("blah"));
        assertFalse(filter.evaluate(null));
       
        filter = fac.equals(new LiteralExpressionImpl("blah"), empty);
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(e, new LiteralExpressionImpl("blah"));
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(new LiteralExpressionImpl("foo-2"), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.like(e, "foo*");
        assertTrue(filter.evaluate(null));
       
        filter = fac.like(e, "blah*");
        assertTrue(filter.evaluate(null));
       
        filter = fac.like(e, "foox*");
        assertFalse(filter.evaluate(null));
       
        filter = fac.like(empty, "*");
        assertFalse(filter.evaluate(null));
               
        //testing collection with collection comparison
       
        List<String> list2 = new ArrayList<String>();
       
        list2.add("foo-4");
        list2.add("foo-5");
        list2.add("foo-6");
       
        filter = fac.equals(e, new LiteralExpressionImpl(list2));
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(e, new LiteralExpressionImpl(list2));
        assertTrue(filter.evaluate(null));
       
        list2.add("blah-blah");
       
        filter = fac.equals(e, new LiteralExpressionImpl(list2));
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(e, new LiteralExpressionImpl(list2));
        assertTrue(filter.evaluate(null));
       
        list2 = new ArrayList<String>();
        list2.add("foo-1");
        list2.add("foo-2");
        list2.add("foo-3");
        list2.add("blah-blah");
       
        filter = fac.notEqual(e, new LiteralExpressionImpl(list2));
        assertTrue(filter.evaluate(null));       
               
        //testing non equals
        list = new ArrayList<String>();
        list.add("foo-1");
        list.add("foo-1");
        list.add("foo-1");
        e = new LiteralExpressionImpl(list);  
       
        filter = fac.notEqual(e, new LiteralExpressionImpl("foo-1"));
        assertFalse(filter.evaluate(null));
       
        list2 = new ArrayList<String>();
        list2.add("foo-1");
        list2.add("foo-1");
       
        filter = fac.notEqual(e, new LiteralExpressionImpl(list2));
        assertFalse(filter.evaluate(null));       
               
    }
   
    @Test
    public void testCompareStringOperators_All() {
        Filter filter;
        List<String> list = new ArrayList<String>();
       
        list.add("foo-1");
        list.add("foo-2");
        list.add("foo-3");
       
        List<String> list2 = new ArrayList<String>();
       
        list2.add("fOo-2");
        list2.add("foO-2");
        list2.add("Foo-2");
       
        Expression e1 = new LiteralExpressionImpl(list);       
        Expression e2 = new LiteralExpressionImpl(list2);       
               
        filter = fac.equal(e1, new LiteralExpressionImpl("foo-2"), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.equal(new LiteralExpressionImpl("foo-2"), e2, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(e1, new LiteralExpressionImpl("blah"), false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(new LiteralExpressionImpl("foo-2"), e1, false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));  
       
        filter = fac.like(e1, "foo-*", "*", "?", "\\", false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.like(e1, "*-1", "*", "?", "\\", false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
    }
   
    @Test
    public void testCompareStringOperators_One() {
        Filter filter;
        List<String> list = new ArrayList<String>();
       
        list.add("foo-1");
        list.add("foo-2");
        list.add("foo-3");
       
        List<String> list2 = new ArrayList<String>();
       
        list2.add("Foo-1");
        list2.add("fOo-2");
        list2.add("foO-2");
        list2.add("Foo-2");
       
        Expression e1 = new LiteralExpressionImpl(list);       
        Expression e2 = new LiteralExpressionImpl(list2);       
               
        filter = fac.equal(e1, new LiteralExpressionImpl("foo-2"), false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.equal(new LiteralExpressionImpl("foo-2"), e2, false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(e1, new LiteralExpressionImpl("blah"), false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(new LiteralExpressionImpl("foo-2"), e2, false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));  
       
        filter = fac.like(e1, "foo-*", "*", "?", "\\", false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.like(e1, "*-1", "*", "?", "\\", false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
    }
       
    @Test
    public void testCompareNumberOperators_Any() {
        Filter filter;
        List<Double> list = new ArrayList<Double>();
               
        list.add(35.2);
        list.add(202.3);       
        list.add(201.7);
        list.add(10000.5);
       
        Expression e = new LiteralExpressionImpl(list);       
       
        Expression empty = new LiteralExpressionImpl(new ArrayList<String>());
       
        filter = fac.equals(e, new LiteralExpressionImpl(201.7));
        assertTrue(filter.evaluate(null));
       
        filter = fac.equals(new LiteralExpressionImpl(202.3), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(e, new LiteralExpressionImpl(10.7));
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(new LiteralExpressionImpl(888.8), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(e, new LiteralExpressionImpl(9999));
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(e, new LiteralExpressionImpl(99999));
        assertFalse(filter.evaluate(null));
       
        filter = fac.greater(new LiteralExpressionImpl(50), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(new LiteralExpressionImpl(34), e);
        assertFalse(filter.evaluate(null));
       
        filter = fac.less(e, new LiteralExpressionImpl(50));
        assertTrue(filter.evaluate(null));
       
        filter = fac.less(e, new LiteralExpressionImpl(34));
        assertFalse(filter.evaluate(null));
       
        filter = fac.less(new LiteralExpressionImpl(9999), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.less(new LiteralExpressionImpl(99999), e);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (e, new LiteralExpressionImpl(10000.5));
        assertTrue(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (e, new LiteralExpressionImpl(10001));
        assertFalse(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (new LiteralExpressionImpl(35.2), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (new LiteralExpressionImpl(35), e);
        assertFalse(filter.evaluate(null));
               
        filter = fac.lessOrEqual (e, new LiteralExpressionImpl(35.2));
        assertTrue(filter.evaluate(null));
       
        filter = fac.lessOrEqual (e, new LiteralExpressionImpl(35));
        assertFalse(filter.evaluate(null));
       
        filter = fac.lessOrEqual (new LiteralExpressionImpl(10000.5), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.lessOrEqual (new LiteralExpressionImpl(10001), e);
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(e, new LiteralExpressionImpl(34), new LiteralExpressionImpl(36));
        assertTrue(filter.evaluate(null));
       
        filter = fac.between(e, new LiteralExpressionImpl(200), new LiteralExpressionImpl(300));
        assertTrue(filter.evaluate(null));
       
        filter = fac.between(e, new LiteralExpressionImpl(36), new LiteralExpressionImpl(201));
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(e, new LiteralExpressionImpl(203), new LiteralExpressionImpl(9999));
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(new LiteralExpressionImpl(36), e, new LiteralExpressionImpl(37));
        assertTrue(filter.evaluate(null));
       
        filter = fac.between(new LiteralExpressionImpl(0), e, new LiteralExpressionImpl(100000));
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(new LiteralExpressionImpl(34), new LiteralExpressionImpl(0), e);
        assertTrue(filter.evaluate(null));
       
        filter = fac.between(new LiteralExpressionImpl(10001), new LiteralExpressionImpl(0), e);
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(empty, new LiteralExpressionImpl(0), new LiteralExpressionImpl(10001));
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(new LiteralExpressionImpl(10001), new LiteralExpressionImpl(0), empty);
        assertFalse(filter.evaluate(null));
              
    }
   
    @Test
    public void testCompareNumberOperators_All() {
        Filter filter;
        List<Double> list = new ArrayList<Double>();               
        list.add(35.2);
        list.add(202.3);       
        list.add(201.7);
        list.add(10000.5);
       
        List<Double> list2 = new ArrayList<Double>();       
        list2.add(35.2);
        list2.add(35.2);       
        list2.add(35.2);
       
        Expression e1 = new LiteralExpressionImpl(list);       
        Expression e2 = new LiteralExpressionImpl(list2);       
       
        filter = fac.equal(e1, new LiteralExpressionImpl(35.2), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.equal(new LiteralExpressionImpl(35.2), e2, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.notEqual(e1, new LiteralExpressionImpl(201.7), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(new LiteralExpressionImpl(55), e1, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(e1, new LiteralExpressionImpl(9999), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greater(e1, new LiteralExpressionImpl(32), false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(new LiteralExpressionImpl(100000000), e1, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(new LiteralExpressionImpl(700), e1, false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.less(e1, new LiteralExpressionImpl(100000000), false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.less(e1, new LiteralExpressionImpl(9999), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.less(new LiteralExpressionImpl(32), e1, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.less(new LiteralExpressionImpl(700), e1, false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (e1, new LiteralExpressionImpl(35.2), false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (e1, new LiteralExpressionImpl(201.7), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (new LiteralExpressionImpl(10000.5), e1, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (new LiteralExpressionImpl(201.7), e1, false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
               
        filter = fac.lessOrEqual (e1, new LiteralExpressionImpl(10000.5), false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.lessOrEqual (e1, new LiteralExpressionImpl(201.7), false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.lessOrEqual (new LiteralExpressionImpl(35.2), e1, false, MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        filter = fac.lessOrEqual (new LiteralExpressionImpl(201.7), e1, false, MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(e1, new LiteralExpressionImpl(34), new LiteralExpressionImpl(300), MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(e1, new LiteralExpressionImpl(34), new LiteralExpressionImpl(10000000), MatchAction.ALL);
        assertTrue(filter.evaluate(null));
    }
   
    @Test
    public void testCompareNumberOperators_One() {
        Filter filter;
        List<Double> list = new ArrayList<Double>();               
        list.add(35.2);
        list.add(202.3);       
        list.add(201.7);
        list.add(10000.5);
       
        List<Double> list2 = new ArrayList<Double>();       
        list2.add(35.2);
        list2.add(35.2);       
        list2.add(202.3);       
       
        Expression e1 = new LiteralExpressionImpl(list);       
        Expression e2 = new LiteralExpressionImpl(list2);       
        
        filter = fac.equal(e1, new LiteralExpressionImpl(35.2), false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.equal(new LiteralExpressionImpl(35.2), e2, false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(e1, new LiteralExpressionImpl(35.2), false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.notEqual(new LiteralExpressionImpl(35.2), e2, false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(e1, new LiteralExpressionImpl(100), false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greater(e1, new LiteralExpressionImpl(9000), false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(new LiteralExpressionImpl(40), e1, false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greater(new LiteralExpressionImpl(700), e1, false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.less(e1, new LiteralExpressionImpl(40), false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.less(e1, new LiteralExpressionImpl(700), false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.less(new LiteralExpressionImpl(9000), e1, false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.less(new LiteralExpressionImpl(100), e1, false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (e1, new LiteralExpressionImpl(10000.5), false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (e1, new LiteralExpressionImpl(201.7), false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (new LiteralExpressionImpl(35.2), e1, false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.greaterOrEqual (new LiteralExpressionImpl(10001), e1, false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
               
        filter = fac.lessOrEqual (e1, new LiteralExpressionImpl(35.2), false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.lessOrEqual (e1, new LiteralExpressionImpl(10001), false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.lessOrEqual (new LiteralExpressionImpl(10000.5), e1, false, MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.lessOrEqual (new LiteralExpressionImpl(201.7), e1, false, MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(e1, new LiteralExpressionImpl(34), new LiteralExpressionImpl(300), MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        filter = fac.between(e1, new LiteralExpressionImpl(34), new LiteralExpressionImpl(36), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
    }
   
    @Test
    public void testGeometries_Any() {
        Filter filter;
        GeometryFactory gf = new GeometryFactory(new PrecisionModel());
      
        Coordinate[] coords1 = {
                new Coordinate(0, 0),
                new Coordinate(6, 0),
                new Coordinate(6, 7),
                new Coordinate(0, 7),
                new Coordinate(0, 0)};               
        Polygon geom1 = gf.createPolygon(gf.createLinearRing(coords1), new LinearRing[0]);
       
        Coordinate[] coords2 = new Coordinate[] {
                new Coordinate(2, 2),
                new Coordinate(6, 0),
                new Coordinate(6, 7),
                new Coordinate(0, 7),
                new Coordinate(2, 2)
        };             
        Polygon geom2 = gf.createPolygon(gf.createLinearRing(coords2), new LinearRing[0]);
       
        Coordinate[] coords3 = new Coordinate[] {
                new Coordinate(2, 2),
                new Coordinate(6, 0),
                new Coordinate(11, 12),
                new Coordinate(0, 7),
                new Coordinate(2, 2)
        };             
        Polygon geom3 = gf.createPolygon(gf.createLinearRing(coords3), new LinearRing[0]);
       
        Coordinate[] coords4 = new Coordinate[] {
                new Coordinate(20, 20),
                new Coordinate(60, 30),
                new Coordinate(110, 120),
                new Coordinate(30, 70),
                new Coordinate(20, 20)
        };             
        Polygon geom4 = gf.createPolygon(gf.createLinearRing(coords4), new LinearRing[0]);
                       
        List<Geometry> list = new ArrayList<Geometry>();
        list.add(geom4);
       
        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1));
        assertFalse(filter.evaluate(null));
        filter = fac.overlaps(new LiteralExpressionImpl(geom1), new LiteralExpressionImpl(list));
        assertFalse(filter.evaluate(null));
        filter = fac.disjoint(new LiteralExpressionImpl(geom1), new LiteralExpressionImpl(list));
        assertTrue(filter.evaluate(null));
       
        list.add(geom3);
        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1));
        assertTrue(filter.evaluate(null));
        filter = fac.overlaps(new LiteralExpressionImpl(geom1), new LiteralExpressionImpl(list));
        assertTrue(filter.evaluate(null));
               
        filter = fac.within(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1));
        assertFalse(filter.evaluate(null));
       
        list.add(geom2);
        filter = fac.within(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1));
        assertTrue(filter.evaluate(null));
       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1));
        assertFalse(filter.evaluate(null));
       
        list.add(geom1);       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1));
        assertTrue(filter.evaluate(null));
       
        //comparing lists with lists
        list = new ArrayList<Geometry>();
        list.add(geom3);
        list.add(geom2);       
       
        List<Geometry> list2 = new ArrayList<Geometry>();
        list2.add(geom1);
        list2.add(geom2);

        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(list2));
        assertTrue(filter.evaluate(null));
        filter = fac.intersects(new LiteralExpressionImpl(list), new LiteralExpressionImpl(list2));
        assertTrue(filter.evaluate(null));
       
    }
   
    @Test
    public void testGeometries_One() {
        Filter filter;
        GeometryFactory gf = new GeometryFactory(new PrecisionModel());
      
        Coordinate[] coords1 = {
                new Coordinate(0, 0),
                new Coordinate(6, 0),
                new Coordinate(6, 7),
                new Coordinate(0, 7),
                new Coordinate(0, 0)};               
        Polygon geom1 = gf.createPolygon(gf.createLinearRing(coords1), new LinearRing[0]);
       
        Coordinate[] coords2 = new Coordinate[] {
                new Coordinate(2, 2),
                new Coordinate(6, 0),
                new Coordinate(6, 7),
                new Coordinate(0, 7),
                new Coordinate(2, 2)
        };             
        Polygon geom2 = gf.createPolygon(gf.createLinearRing(coords2), new LinearRing[0]);
       
        Coordinate[] coords3 = new Coordinate[] {
                new Coordinate(2, 2),
                new Coordinate(6, 0),
                new Coordinate(11, 12),
                new Coordinate(0, 7),
                new Coordinate(2, 2)
        };             
        Polygon geom3 = gf.createPolygon(gf.createLinearRing(coords3), new LinearRing[0]);
       
        Coordinate[] coords4 = new Coordinate[] {
                new Coordinate(20, 20),
                new Coordinate(60, 30),
                new Coordinate(110, 120),
                new Coordinate(30, 70),
                new Coordinate(20, 20)
        };             
        Polygon geom4 = gf.createPolygon(gf.createLinearRing(coords4), new LinearRing[0]);
                       
        List<Geometry> list = new ArrayList<Geometry>();
        list.add(geom4);
       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom4), MatchAction.ONE);
        assertTrue(filter.evaluate(null));

        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertFalse(filter.evaluate(null));
        filter = fac.disjoint(new LiteralExpressionImpl(geom1), new LiteralExpressionImpl(list), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        list.add(geom3);
       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom4), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
               
        filter = fac.within(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        list.add(geom2);
        filter = fac.within(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
               
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertFalse(filter.evaluate(null));
       
        list.add(geom1);       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ONE);
        assertTrue(filter.evaluate(null));
       
    }
   
    @Test
    public void testGeometries_All() {
        Filter filter;
        GeometryFactory gf = new GeometryFactory(new PrecisionModel());
      
        Coordinate[] coords1 = {
                new Coordinate(0, 0),
                new Coordinate(6, 0),
                new Coordinate(6, 7),
                new Coordinate(0, 7),
                new Coordinate(0, 0)};               
        Polygon geom1 = gf.createPolygon(gf.createLinearRing(coords1), new LinearRing[0]);
       
        Coordinate[] coords2 = new Coordinate[] {
                new Coordinate(2, 2),
                new Coordinate(6, 0),
                new Coordinate(6, 7),
                new Coordinate(0, 7),
                new Coordinate(2, 2)
        };             
        Polygon geom2 = gf.createPolygon(gf.createLinearRing(coords2), new LinearRing[0]);
       
        Coordinate[] coords3 = new Coordinate[] {
                new Coordinate(2, 2),
                new Coordinate(6, 0),
                new Coordinate(11, 12),
                new Coordinate(0, 7),
                new Coordinate(2, 2)
        };             
        Polygon geom3 = gf.createPolygon(gf.createLinearRing(coords3), new LinearRing[0]);
       
        Coordinate[] coords4 = new Coordinate[] {
                new Coordinate(20, 20),
                new Coordinate(60, 30),
                new Coordinate(110, 120),
                new Coordinate(30, 70),
                new Coordinate(20, 20)
        };             
        Polygon geom4 = gf.createPolygon(gf.createLinearRing(coords4), new LinearRing[0]);
                       
        List<Geometry> list = new ArrayList<Geometry>();
        list.add(geom4);
       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom4), MatchAction.ALL);
        assertTrue(filter.evaluate(null));

        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ALL);
        assertFalse(filter.evaluate(null));
        filter = fac.disjoint(new LiteralExpressionImpl(geom1), new LiteralExpressionImpl(list), MatchAction.ALL);
        assertTrue(filter.evaluate(null));
       
        list.add(geom3);
       
        filter = fac.equal(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom4), MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        filter = fac.overlaps(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ALL);
        assertFalse(filter.evaluate(null));
               
        filter = fac.within(new LiteralExpressionImpl(list), new LiteralExpressionImpl(geom1), MatchAction.ALL);
        assertFalse(filter.evaluate(null));
       
        list.remove(geom4);
        list.add(geom2);
       
        filter = fac.intersects(new LiteralExpressionImpl(geom1), new LiteralExpressionImpl(list), MatchAction.ALL);
        assertTrue(filter.evaluate(null));
                             
       
    }

}
TOP

Related Classes of org.geotools.filter.MultiFilterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.