Package org.geotools.wfs.bindings

Source Code of org.geotools.wfs.bindings.QueryTypeBindingTest

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

import java.math.BigInteger;
import java.net.URL;
import java.util.Collections;
import java.util.List;

import javax.xml.namespace.QName;

import net.opengis.wfs.QueryType;
import net.opengis.wfs.XlinkPropertyNameType;

import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.v1_1.OGC;
import org.geotools.test.TestData;
import org.geotools.wfs.WFS;
import org.geotools.wfs.WFSTestSupport;
import org.geotools.xml.Binding;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.Id;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.expression.Function;
import org.opengis.filter.sort.SortBy;
import org.opengis.filter.sort.SortOrder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
* Unit test suite for {@link QueryTypeBinding}
*
* @author Justin Deoliveira
* @author Gabriel Roldan
* @version $Id$
* @since 2.5.x
*
*
* @source $URL$
*/
public class QueryTypeBindingTest extends WFSTestSupport {
    public QueryTypeBindingTest() {
        super(WFS.QueryType, QueryType.class, Binding.OVERRIDE);
    }

    public void testParse() throws Exception {
        final URL resource = TestData.getResource(this, "QueryTypeBindingTest.xml");
        buildDocument(resource);

        final Object parsed = parse(WFS.Query);
        assertTrue((parsed == null) ? "null" : parsed.getClass().toString(),
                parsed instanceof QueryType);

        QueryType query = (QueryType) parsed;
        List typeNames = query.getTypeName();
        assertEquals(1, typeNames.size());

        QName typeName = new QName("http://www.geotools.org/test", "testType1");
        Object parsedName = typeNames.get(0);
        assertEquals(typeName, parsedName);
        assertEquals("testHandle", query.getHandle());
        assertEquals("HEAD", query.getFeatureVersion());
        assertEquals("urn:x-ogc:def:crs:EPSG:6.11.2:4326", query.getSrsName().toString());

        assertEquals(2, query.getPropertyName().size());
        assertEquals(2, query.getXlinkPropertyName().size());
        assertEquals(2, query.getFunction().size());

        assertEquals("property1", query.getPropertyName().get(0));
        assertEquals("property2", query.getPropertyName().get(1));

        XlinkPropertyNameType xlink;
        xlink = (XlinkPropertyNameType) query.getXlinkPropertyName().get(0);
        assertEquals("gt:propertyA/gt:propertyB", xlink.getValue());
        assertEquals("*", xlink.getTraverseXlinkDepth());
        assertEquals(BigInteger.valueOf(10), xlink.getTraverseXlinkExpiry());

        xlink = (XlinkPropertyNameType) query.getXlinkPropertyName().get(1);
        assertEquals("gt:propertyC/gt:propertyD", xlink.getValue());
        assertEquals("1", xlink.getTraverseXlinkDepth());
        assertNull(xlink.getTraverseXlinkExpiry());

        Function function;
        function = (Function) query.getFunction().get(0);
        assertNotNull(function);
        assertEquals("max", function.getName());

        function = (Function) query.getFunction().get(1);
        assertNotNull(function);
        assertEquals("min", function.getName());

        assertTrue(query.getFilter() instanceof Id);
        assertEquals(1, query.getSortBy().size());
        assertTrue(query.getSortBy().get(0) instanceof SortBy);
    }

    @SuppressWarnings("unchecked")
    public void testEncode() throws Exception {
        final QueryType query = buildTestQuery();

        final Document dom = encode(query, WFS.Query);
        final Element root = dom.getDocumentElement();

        assertName(WFS.Query, root);
        assertEquals(8, root.getChildNodes().getLength());
       
        assertEquals("typeName1", root.getAttribute("typeName"));

        assertEquals(2, getElementsByQName(dom, WFS.PropertyName).getLength());
        assertEquals(2, getElementsByQName(dom, WFS.XlinkPropertyName).getLength());
        assertEquals(2, getElementsByQName(dom, OGC.Function).getLength());

        assertEquals("property1", getElementValueByQName(dom, WFS.PropertyName, 0));
        assertEquals("property2", getElementValueByQName(dom, WFS.PropertyName, 1));

        assertEquals("propertyA/propertyB", getElementValueByQName(dom, WFS.XlinkPropertyName, 0));
        assertEquals("propertyC/propertyD", getElementValueByQName(dom, WFS.XlinkPropertyName, 1));

        assertNotNull(getElementByQName(dom, OGC.Filter));
        assertNotNull(getElementByQName(dom, OGC.FeatureId));

        assertNotNull(getElementByQName(dom, OGC.SortBy));
    }

    /**
     * Builds a {@link QueryType} instance equivalent to the test query in the
     * file <code>test-data/QueryTypeBinding.xml</code> in the
     * <code>org.geotools.wfs.bindings</code> package of the test resources.
     *
     * @return
     */
    @SuppressWarnings("unchecked")
    private QueryType buildTestQuery() {
        FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);

        final Function function1 = ff.function("MAX", new Expression[] { ff.literal(1),
                ff.literal(2) });
        final Function function2 = ff.function("MIN", new Expression[] { ff.literal(1),
                ff.literal(2) });

        final XlinkPropertyNameType xlinkPropertyName1 = factory.createXlinkPropertyNameType();
        xlinkPropertyName1.setTraverseXlinkExpiry(BigInteger.valueOf(10));
        xlinkPropertyName1.setTraverseXlinkDepth("*");
        xlinkPropertyName1.setValue("propertyA/propertyB");

        final XlinkPropertyNameType xlinkPropertyName2 = factory.createXlinkPropertyNameType();
        xlinkPropertyName2.setTraverseXlinkDepth("1");
        xlinkPropertyName2.setValue("propertyC/propertyD");

        // The first property is a Choice[0..*] of PropertyName,
        // XLinkPropertyName and Function
        QueryType query = factory.createQueryType();
        query.setTypeName(Collections.singletonList("typeName1"));
        query.getPropertyName().add("property1");
        query.getXlinkPropertyName().add(xlinkPropertyName1);
        query.getFunction().add(function1);
        query.getPropertyName().add("property2");
        query.getXlinkPropertyName().add(xlinkPropertyName2);
        query.getFunction().add(function2);

        query.setFilter(ff.id(Collections.singleton(ff.featureId("fid"))));
        query.getSortBy().add(ff.sort("sortProperty", SortOrder.DESCENDING));

        return query;
    }
}
TOP

Related Classes of org.geotools.wfs.bindings.QueryTypeBindingTest

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.