Package org.geotools.filter.v1_1

Source Code of org.geotools.filter.v1_1.OGCFilterTest

/*
*    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.v1_1;

import junit.framework.TestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.PropertyIsEqualTo;
import org.opengis.filter.expression.Literal;
import org.opengis.filter.expression.PropertyName;
import org.opengis.filter.spatial.DWithin;
import org.geotools.factory.CommonFactoryFinder;

import org.geotools.xml.Encoder;
import org.geotools.xml.Parser;
import org.geotools.xml.Parser.Properties;


/**
*
*
* @source $URL$
*/
public class OGCFilterTest extends TestCase {
    public void testEncode() throws Exception {
        FilterFactory f = CommonFactoryFinder.getFilterFactory(null);
        Filter filter = f.equal(f.property("testString"), f.literal(2), false);

        File file = File.createTempFile("filter", "xml");
        file.deleteOnExit();

        OutputStream output = new BufferedOutputStream(new FileOutputStream(file));
        Encoder encoder = new Encoder(new OGCConfiguration());

        encoder.encode(filter, OGC.PropertyIsEqualTo, output);
        output.flush();
        output.close();

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        docFactory.setNamespaceAware(true);

        Document doc = docFactory.newDocumentBuilder().parse(file);

        assertEquals("ogc:PropertyIsEqualTo", doc.getDocumentElement().getNodeName());
        assertEquals(1, doc.getElementsByTagName("ogc:PropertyName").getLength());
        assertEquals(1, doc.getElementsByTagName("ogc:Literal").getLength());

        Element propertyName = (Element) doc.getElementsByTagName("ogc:PropertyName").item(0);
        Element literal = (Element) doc.getElementsByTagName("ogc:Literal").item(0);

        assertEquals("testString", propertyName.getFirstChild().getNodeValue());
        assertEquals("2", literal.getFirstChild().getNodeValue());
    }

    public void testParse() throws Exception {
        Parser parser = new Parser(new OGCConfiguration());
        InputStream in = getClass().getResourceAsStream("test1.xml");

        if (in == null) {
            throw new FileNotFoundException(getClass().getResource("test1.xml").toExternalForm());
        }

        Object thing = parser.parse(in);
        assertEquals(0, parser.getValidationErrors().size());

        assertNotNull(thing);
        assertTrue(thing instanceof PropertyIsEqualTo);

        PropertyIsEqualTo equal = (PropertyIsEqualTo) thing;
        assertTrue(equal.getExpression1() instanceof PropertyName);
        assertTrue(equal.getExpression2() instanceof Literal);

        PropertyName name = (PropertyName) equal.getExpression1();
        assertEquals("testString", name.getPropertyName());

        Literal literal = (Literal) equal.getExpression2();
        assertEquals("2", literal.toString());
    }
   
    public void testDWithinParse() throws Exception {

        String xml = "<Filter>" +
            "<DWithin>" +
              "<PropertyName>the_geom</PropertyName>" +
              "<Point>"
                  "<coordinates>-74.817265,40.5296504</coordinates>" +
               "</Point>" +
               "<Distance units=\"km\">200</Distance>" +
             "</DWithin>" +
           "</Filter>";
       
        OGCConfiguration configuration = new OGCConfiguration();
        configuration.getProperties().add(Properties.IGNORE_SCHEMA_LOCATION);

        Parser parser = new Parser(configuration);
        DWithin filter = (DWithin) parser.parse(new ByteArrayInputStream(xml.getBytes()));
        assertNotNull(filter);
       
        //Asserting the Property Name
        assertNotNull(filter.getExpression1());
        PropertyName propName = (PropertyName) filter.getExpression1();
        String name = propName.getPropertyName();
        assertEquals("the_geom", name);
       
        //Asserting the Geometry
        assertNotNull(filter.getExpression2());
        Literal geom = (Literal) filter.getExpression2();
        assertEquals("POINT (-74.817265 40.5296504)", geom.toString());
       
        //Asserting the Distance
        assertTrue(filter.getDistance() > 0 );
        Double dist = filter.getDistance();
        assertEquals(200.0, dist);
       
        //Asserting the Distance Units
        assertNotNull(filter.getDistanceUnits());
        String unit = filter.getDistanceUnits();
        assertEquals("km", unit);
     }

    public void testBBOXValidateWithoutPropertyName() throws Exception {
        String xml =
              "<ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>" +
                "<ogc:BBOX>" +
                  "<gml:Envelope xmlns:gml='http://www.opengis.net/gml'>"
                     "<gml:lowerCorner>36.986771000000005 -91.516129</gml:lowerCorner>" +
                     "<gml:upperCorner>42.50936100000001 -87.507889</gml:upperCorner>"
                   "</gml:Envelope>" +
                 "</ogc:BBOX>" +
               "</ogc:Filter>";

        Parser p = new Parser(new OGCConfiguration());
        p.validate(new StringReader(xml));

        assertTrue(p.getValidationErrors().isEmpty());
    }
}
TOP

Related Classes of org.geotools.filter.v1_1.OGCFilterTest

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.