Package org.geotools.data.ws

Source Code of org.geotools.data.ws.AppSchemaWithBackendDataAccessIntegrationTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2004-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.data.ws;

import java.io.Serializable;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import org.geotools.data.DataAccessFinder;
import org.geotools.data.FeatureSource;
import org.geotools.data.Query;
import org.geotools.data.complex.AppSchemaDataAccess;
import org.geotools.data.complex.DataAccessRegistry;
import org.geotools.data.complex.FeatureChainingTest;
import org.geotools.data.complex.XmlDataStoreTest;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.geotools.feature.Types;
import org.geotools.filter.FilterFactoryImplNamespaceAware;

import org.junit.BeforeClass;

import org.opengis.feature.Feature;
import org.opengis.feature.type.FeatureType;
import org.opengis.feature.type.Name;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;
import org.xml.sax.helpers.NamespaceSupport;

/**
* This is to test the integration of a data access (which does not necessarily have to be an
* app-schema data access) that produces complex features of a certain XML form as an input to an
* app-schema data access of a different XML form. A new app-schema data access would be created to
* remap the non-app-schema data access into the output XML form. Then the features can chain or be
* chained as per normal. See FeatureChainingTest.java to see feature chaining in action.
*
* @author Rini Angreani, Curtin University of Technology
*
*
*
* @source $URL$
*/
public class AppSchemaWithBackendDataAccessIntegrationTest extends TestCase {

    static FilterFactory ff;

    private final int MAX_FEATURES = 5;

    private Name typeName;

    private static final String schemaBase = "/test-data/";

    /**
     * Remapped Geologic Unit data access in GSML form
     */
    private static AppSchemaDataAccess newGuDataAccess;

    /**
     * Create the input data access containing complex features of MO form.
     */
    @BeforeClass
    protected void setUp() throws Exception {
        super.setUp();
        setFilterFactory();
        typeName = Types.typeName("GeologicUnit1");
        URL url = XmlDataStoreTest.class.getResource(schemaBase
                + "xmlDataAccessConfig.xml");

        assertNotNull(url);

        Map<String, Serializable> dsParams = new HashMap<String, Serializable>();
        dsParams.put("dbtype", "app-schema");
        dsParams.put("url", url.toExternalForm());
        newGuDataAccess = (AppSchemaDataAccess) DataAccessFinder.getDataStore(dsParams);
        assertNotNull(newGuDataAccess);
    }

    protected void tearDown() throws Exception {
        DataAccessRegistry.unregisterAndDisposeAll();
        super.tearDown();
    }

    public void testSimplePropertyFilter() throws Exception {
        final Filter filter = ff.equals(ff.property("gml:name/@codeSpace"), ff
                .literal("gsv:NameSpace"));
        runAppSchemaBackendTests(filter);
    }

    public void testComplexPropertyFilter() throws Exception {
        final Filter filter = ff.equals(ff
                .property("gsml:observationMethod/gsml:CGI_TermValue/gsml:value"), ff
                .literal("CONSTANT"));
        runAppSchemaBackendTests(filter);
    }

    private void runAppSchemaBackendTests(Filter filter) throws Exception {
        final Name GEOLOGIC_UNIT1 = Types.typeName("GeologicUnit1");
        FeatureSource<FeatureType, Feature> guFeatureSource = newGuDataAccess
                .getFeatureSourceByName(GEOLOGIC_UNIT1);
        assertNotNull(guFeatureSource);
        List<Feature> results = new ArrayList<Feature>();

        FeatureCollection<FeatureType, Feature> features = getFeatures(MAX_FEATURES, filter);
        FeatureIterator<Feature> it = features.features();
        for (; it.hasNext();) {
            results.add((Feature) it.next());
        }
        it.close();
    }

    private void setFilterFactory() {
        NamespaceSupport namespaces = new NamespaceSupport();
        namespaces.declarePrefix("gsml", FeatureChainingTest.GSMLNS);
        namespaces.declarePrefix("gml", FeatureChainingTest.GMLNS);
        ff = new FilterFactoryImplNamespaceAware(namespaces);
    }

    private FeatureCollection<FeatureType, Feature> getFeatures(final int maxFeatures,
            Filter inputFilter) throws Exception {
        FeatureSource<FeatureType, Feature> fSource = newGuDataAccess
                .getFeatureSourceByName(typeName);
        FeatureCollection<FeatureType, Feature> features = fSource.getFeatures(namedQuery(
                inputFilter, new Integer(maxFeatures)));
        return features;
    }

    private Query namedQuery(Filter filter, int count) throws Exception {
        return new Query("GeologicUnit", new URI(FeatureChainingTest.GSMLNS), filter, count, new String[] {}, "test");
    }
}
TOP

Related Classes of org.geotools.data.ws.AppSchemaWithBackendDataAccessIntegrationTest

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.