Package org.geotools.data.couchdb

Source Code of org.geotools.data.couchdb.CouchDBDataStoreTest

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

import org.geotools.data.couchdb.client.CouchDBConnectionTest;
import org.geotools.data.couchdb.client.CouchDBUtils;
import org.geotools.data.couchdb.client.CouchDBConnection;
import org.geotools.data.store.ContentFeatureCollection;
import org.junit.After;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import org.geotools.data.FeatureReader;
import org.geotools.data.Query;
import org.geotools.data.couchdb.client.CouchDBException;
import org.geotools.data.store.ContentFeatureSource;
import org.geotools.data.store.ContentFeatureStore;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geojson.feature.FeatureJSON;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
import org.opengis.feature.Feature;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.FilterFactory2;
import org.opengis.filter.PropertyIsEqualTo;
import org.opengis.filter.spatial.BBOX;

/**
*
* @author Ian Schneider (OpenGeo)
*
* @source $URL$
*/
public class CouchDBDataStoreTest extends CouchDBTestSupport {
    static CouchDBConnection db;
    private CouchDBDataStore store;

    @BeforeClass
    public static void setUpClass() throws Exception {
        CouchDBConnectionTest test = new CouchDBConnectionTest();
        test.before();
        db = test.setupDB();
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
        if (db != null) {
            db.delete();
        }
    }
   
    @Before
    public void setup() throws Exception {
        store = new CouchDBDataStore();
        store.setCouchURL(getTestHost());
        store.setDatabaseName(getTestDB());
        store.init();
    }
   
    @After
    public void tearDown() throws IOException {
    }
   
    @Test
    public void testBrokenDB() throws Exception {
        store.setDatabaseName("nonexistent");
        try {
            store.init();
            fail("expected exception");
        } catch (CouchDBException ex) {
            assertEquals("Unable to open DB 'nonexistent',not_found,no_db_file", ex.getMessage());
        }
    }
   
    @Test
    public void testBrokenHost() throws Exception {
        store.setCouchURL("http://thisshouldnotexistandifitdoesihateyou.org");
        try {
            store.init();
            fail("expected exception");
        } catch (IOException ex) {
            assertEquals("HTTP error", ex.getMessage());
            assertTrue(ex.getCause() instanceof UnknownHostException);
        }
    }

    @Test
    public void testTypeNames() throws Exception {
        String[] typeNames = store.getTypeNames();
        assertEquals(2, typeNames.length);
        assertEquals("gttestdb.counties",typeNames[0]);
        assertEquals("gttestdb.countries",typeNames[1]);
    }
   
    @Test
    public void testFeatureType() throws Exception {       
        ContentFeatureSource featureSource = store.getFeatureSource("gttestdb.counties");
        SimpleFeatureType schema = featureSource.getSchema();
        assertNotNull(schema.getDescriptor("Name"));
        assertNotNull(schema.getDescriptor("State"));
    }
   
    @Test
    public void testFeatureReader() throws Exception {
        ContentFeatureSource featureSource = store.getFeatureSource("gttestdb.counties");
        FeatureReader<SimpleFeatureType, SimpleFeature> reader = featureSource.getReader();
        int cnt = 0;
        while (reader.hasNext()) {
            SimpleFeature nf = reader.next();
            cnt++;
        }
        assertEquals(24, cnt);
    }
   
    private int count(ContentFeatureCollection c) {
        // count by forcing reads
        int cnt = 0;
        for (Iterator it = c.iterator(); it.hasNext();) {
            Object o = it.next();
            cnt++;
        }
        return cnt;
    }
   
    @Test
    public void testBBoxQuery() throws Exception {
        ContentFeatureSource featureSource = store.getFeatureSource("gttestdb.counties");
        FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
        // pueblo county
        BBOX bbox = ff.bbox("geometry", -105.050678,37.734704,-104.053921,38.522548,null);
       
        Query query = new Query("geometry", bbox);
        assertEquals(1, featureSource.getCount(query));
       
        FeatureReader<SimpleFeatureType, SimpleFeature> reader = featureSource.getReader(query);
        int cnt = 0;
        while (reader.hasNext()) {
            SimpleFeature nf = reader.next();
            cnt++;
        }
        assertEquals(1, cnt);
       
        ContentFeatureCollection features = featureSource.getFeatures(query);
        assertEquals(1, count(features));
    }
   
    @Test
    public void testFilter() throws Exception {
        ContentFeatureSource featureSource = store.getFeatureSource("gttestdb.counties");
        FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null);
        PropertyIsEqualTo isPueblo = ff.equal(ff.property("Name"),ff.literal("Pueblo"),true);
        ContentFeatureCollection features = featureSource.getFeatures(isPueblo);
        assertEquals(1, count(features));
    }

    @Test
    public void testFeatureWriterAdd() throws Exception {
        // currently require some data to exist due to construction of featuretype from existing feature...
        db.postBulk(loadJSON("morocco.json", "countries"));
       
        JSONArray data = loadJSON("italy.json", "countries");
        JSONObject italy = (JSONObject) data.get(0);
        FeatureJSON json = new FeatureJSON();
        json.setFeatureType(CouchDBUtils.createFeatureType(italy, "countries"));
        Feature feature = json.readFeature(italy.toString());
       
        ContentFeatureStore featureStore = (ContentFeatureStore) store.getFeatureSource("gttestdb.countries");
        featureStore.addFeatures(Collections.singleton(feature));
       
        // single add case
        ContentFeatureCollection features = featureStore.getFeatures();
        assertEquals(2,features.size());
       
        // double add (we can add the same features repeatedly at the moment
        // since the id is opaque to the feature
        featureStore.addFeatures(Arrays.asList(feature,feature));
        assertEquals(4,features.size());

    }
}
TOP

Related Classes of org.geotools.data.couchdb.CouchDBDataStoreTest

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.