/* Copyright (c) 2001 - 2013 OpenPlans - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wps.gs;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import java.io.IOException;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.wps.WPSTestSupport;
import org.geotools.data.Query;
import org.geotools.data.crs.ForceCoordinateSystemFeatureResults;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.referencing.CRS;
import org.junit.After;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.filter.FilterFactory;
public class ImportProcessTest extends WPSTestSupport {
@After
public void removeNewLayers() {
removeLayer(SystemTestData.CITE_PREFIX, "Buildings2");
}
/**
* Try to re-import buildings as another layer (different name, different projection)
*/
@Test
public void testImportBuildings() throws Exception {
FeatureTypeInfo ti = getCatalog().getFeatureTypeByName(getLayerId(SystemTestData.BUILDINGS));
SimpleFeatureCollection rawSource = (SimpleFeatureCollection) ti.getFeatureSource(null,
null).getFeatures();
ForceCoordinateSystemFeatureResults forced = new ForceCoordinateSystemFeatureResults(
rawSource, CRS.decode("EPSG:4326"));
ImportProcess importer = new ImportProcess(getCatalog());
String result = importer.execute(forced, null, SystemTestData.CITE_PREFIX, SystemTestData.CITE_PREFIX,
"Buildings2", null, null, null);
checkBuildings2(result);
}
/**
* Try to re-import buildings as another layer (different name, different projection)
*/
@Test
public void testImportBuildingsForceCRS() throws Exception {
FeatureTypeInfo ti = getCatalog().getFeatureTypeByName(getLayerId(SystemTestData.BUILDINGS));
SimpleFeatureCollection rawSource = (SimpleFeatureCollection) ti.getFeatureSource(null,
null).getFeatures();
ImportProcess importer = new ImportProcess(getCatalog());
String result = importer.execute(rawSource, null, SystemTestData.CITE_PREFIX, SystemTestData.CITE_PREFIX,
"Buildings2", CRS.decode("EPSG:4326"), null, null);
checkBuildings2(result);
}
private void checkBuildings2(String result) throws IOException {
assertEquals(SystemTestData.CITE_PREFIX + ":" + "Buildings2", result);
// check the layer
LayerInfo layer = getCatalog().getLayerByName(result);
assertNotNull(layer);
assertEquals("polygon", layer.getDefaultStyle().getName());
// check the feature type info
FeatureTypeInfo fti = (FeatureTypeInfo) layer.getResource();
assertEquals("EPSG:4326", fti.getSRS());
SimpleFeatureSource fs = (SimpleFeatureSource) fti.getFeatureSource(null, null);
assertEquals(2, fs.getCount(Query.ALL));
// _=the_geom:MultiPolygon,FID:String,ADDRESS:String
// Buildings.1107531701010=MULTIPOLYGON (((0.0008 0.0005, 0.0008 0.0007,
// 0.0012 0.0007, 0.0012 0.0005, 0.0008 0.0005)))|113|123 Main Street
// Buildings.1107531701011=MULTIPOLYGON (((0.002 0.0008, 0.002 0.001,
// 0.0024 0.001, 0.0024 0.0008, 0.002 0.0008)))|114|215 Main Street
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
SimpleFeatureIterator fi = fs.getFeatures(ff.equals(ff.property("FID"), ff.literal("113")))
.features();
SimpleFeature f = fi.next();
fi.close();
assertEquals("113", f.getAttribute("FID"));
assertEquals("123 Main Street", f.getAttribute("ADDRESS"));
fi = fs.getFeatures(ff.equals(ff.property("FID"), ff.literal("114"))).features();
f = fi.next();
fi.close();
assertEquals("114", f.getAttribute("FID"));
assertEquals("215 Main Street", f.getAttribute("ADDRESS"));
}
}