private void updateState() { State newState = tasks.isEmpty() ? State.PENDING : State.COMPLETE; O: for (ImportTask task : tasks) { switch(task.getState()) { case COMPLETE: continue; case RUNNING: newState = State.RUNNING; break O; default: newState = State.PENDING; break O; } } state = newState; }
void run(ImportTask task) throws IOException { if (task.getState() == ImportTask.State.COMPLETE) { return; } task.setState(ImportTask.State.RUNNING); if (task.isDirect()) { // direct import, simply add configured store and layers to catalog doDirectImport(task); } else { // indirect import, read data from the source and into the target store doIndirectImport(task); } }
void run(ImportTask task) throws IOException { if (task.getState() == ImportTask.State.COMPLETE) { return; } task.setState(ImportTask.State.RUNNING); if (task.isDirect()) { //direct import, simply add configured store and layers to catalog doDirectImport(task); } else { //indirect import, read data from the source and into the target datastore doIndirectImport(task); } }
@Test public void testImportShapefilesWithExtraFiles() throws Exception { File dir = tmpDir(); unpack("shape/archsites_epsg_prj.zip", dir); // make some 'extra' files new File(dir, "archsites.sbn").createNewFile(); new File(dir, "archsites.sbx").createNewFile(); new File(dir, "archsites.shp.xml").createNewFile(); ImportContext context = importer.createContext(new Directory(dir)); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("archsites", task.getLayer().getResource().getName()); }
private void checkNoErrors(ImportContext imp) { for (ImportTask task : imp.getTasks()) { assertNull(task.getError()); assertEquals(State.COMPLETE, task.getState()); } }
@Test public void testImportUnknownFile() throws Exception { File dir = new File("./src/test/resources/org/geoserver/importer/test-data/random"); ImportContext context = importer.createContext(new Directory(dir)); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.NO_FORMAT, task.getState()); assertNull(task.getData().getFormat()); }
@Test public void testImportUnknownFileIndirect() throws Exception { DataStoreInfo ds = createH2DataStore(null, "foo"); File dir = new File("./src/test/resources/org/geoserver/importer/test-data/random"); ImportContext context = importer.createContext(new Directory(dir), ds); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.NO_FORMAT, task.getState()); assertNull(task.getData().getFormat()); }
@Test public void testImportRemoteDataFromZip() throws Exception { URL resource = ImporterTestSupport.class.getResource("test-data/shape/archsites_epsg_prj.zip"); ImportContext context = importer.createContext(new RemoteData(resource.toExternalForm())); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("archsites", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("archsites")); assertEquals(ImportTask.State.COMPLETE, task.getState()); runChecks("archsites"); }
@Test public void testImportShapefile() throws Exception { File dir = unpack("shape/archsites_epsg_prj.zip"); ImportContext context = importer.createContext(new SpatialFile(new File(dir, "archsites.shp"))); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("archsites", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("archsites")); assertEquals(ImportTask.State.COMPLETE, task.getState()); runChecks("archsites"); }
@Test public void testImportGeoTIFF() throws Exception { File dir = unpack("geotiff/EmissiveCampania.tif.bz2"); ImportContext context = importer.createContext(new SpatialFile(new File(dir, "EmissiveCampania.tif"))); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("EmissiveCampania", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("EmissiveCampania")); assertEquals(ImportTask.State.COMPLETE, task.getState()); runChecks("EmissiveCampania"); }
@Test public void testImportRemoteDataFromDirectory() throws Exception { File dir = unpack("shape/archsites_epsg_prj.zip"); ImportContext context = importer.createContext(new RemoteData(dir.getCanonicalPath())); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("archsites", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("archsites")); assertEquals(ImportTask.State.COMPLETE, task.getState()); runChecks("archsites"); }
@Test public void testImportShapefiles() throws Exception { File dir = tmpDir(); unpack("shape/archsites_epsg_prj.zip", dir); unpack("shape/bugsites_esri_prj.tar.gz", dir); ImportContext context = importer.createContext(new Directory(dir)); assertEquals(2, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("archsites", task.getLayer().getResource().getName()); task = context.getTasks().get(1); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("bugsites", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("archsites")); assertNotNull(cat.getLayerByName("bugsites")); assertEquals(ImportTask.State.COMPLETE, context.getTasks().get(0).getState()); assertEquals(ImportTask.State.COMPLETE, context.getTasks().get(1).getState()); runChecks("archsites"); runChecks("bugsites"); }
@Test public void testImportShapefilesWithError() throws Exception { File dir = tmpDir(); unpack("shape/archsites_no_crs.zip", dir); unpack("shape/bugsites_esri_prj.tar.gz", dir); ImportContext context = importer.createContext(new Directory(dir)); assertEquals(2, context.getTasks().size()); ImportTask task1 = context.getTasks().get(0); assertEquals(ImportTask.State.NO_CRS, task1.getState()); assertEquals("archsites", task1.getLayer().getResource().getName()); ImportTask task2 = context.getTasks().get(1); assertEquals(ImportTask.State.READY, task2.getState()); assertEquals("bugsites", task2.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNull(cat.getLayerByName("archsites")); assertNotNull(cat.getLayerByName("bugsites")); assertEquals(ImportTask.State.NO_CRS, task1.getState()); assertEquals(ImportTask.State.COMPLETE, task2.getState()); runChecks("bugsites"); }
@Test public void testGeoJSONImport() throws Exception { DataStoreInfo h2 = createH2DataStore(getCatalog().getDefaultWorkspace().getName(), "jsontest"); File dir = unpack("geojson/point.json.zip"); ImportContext imp = importer.createContext(new SpatialFile(new File(dir, "point.json")), h2); assertEquals(1, imp.getTasks().size()); assertEquals(ImportTask.State.READY, imp.task(0).getState()); importer.run(imp); assertEquals(ImportContext.State.COMPLETE, imp.getState()); checkNoErrors(imp); runChecks("point"); }
@Test public void testImportShapefileFromDataDir() throws Exception { File dataDir = getCatalog().getResourceLoader().getBaseDirectory(); File dir = unpack("shape/archsites_epsg_prj.zip", dataDir); ImportContext context = importer.createContext(new SpatialFile(new File(dir, "archsites.shp"))); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("archsites", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("archsites")); assertEquals(ImportTask.State.COMPLETE, task.getState()); assertEquals( "file:archsites.shp", task.getLayer().getResource().getStore().getConnectionParameters().get("url")); runChecks("archsites"); }
@Test public void testImportGeoTIFFFromDataDir() throws Exception { File dataDir = getCatalog().getResourceLoader().getBaseDirectory(); File dir = unpack("geotiff/EmissiveCampania.tif.bz2", dataDir); ImportContext context = importer.createContext(new SpatialFile(new File(dir, "EmissiveCampania.tif"))); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals("EmissiveCampania", task.getLayer().getResource().getName()); importer.run(context); Catalog cat = getCatalog(); assertNotNull(cat.getLayerByName("EmissiveCampania")); assertEquals(ImportTask.State.COMPLETE, task.getState()); assertEquals( "file:EmissiveCampania.tif", ((CoverageStoreInfo) task.getLayer().getResource().getStore()).getURL()); runChecks("EmissiveCampania"); }
@Test public void testGeoJSONImportDirectory() throws Exception { DataStoreInfo h2 = createH2DataStore(getCatalog().getDefaultWorkspace().getName(), "jsontest"); File dir = unpack("geojson/point.json.zip"); unpack("geojson/line.json.zip", dir); unpack("geojson/polygon.json.zip", dir); ImportContext imp = importer.createContext(new Directory(dir), h2); assertEquals(3, imp.getTasks().size()); assertEquals(ImportContext.State.PENDING, imp.getState()); assertEquals(ImportTask.State.READY, imp.task(0).getState()); assertEquals(ImportTask.State.READY, imp.task(1).getState()); assertEquals(ImportTask.State.READY, imp.task(2).getState()); importer.run(imp); assertEquals(ImportContext.State.COMPLETE, imp.getState()); runChecks("point"); runChecks("line"); runChecks("polygon"); }
@Test public void testImportCSV() throws Exception { File dir = unpack("csv/locations.zip"); ImportContext context = importer.createContext(new SpatialFile(new File(dir, "locations.csv"))); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.NO_CRS, task.getState()); LayerInfo layer = task.getLayer(); ResourceInfo resource = layer.getResource(); resource.setSRS("EPSG:4326"); assertTrue("Item not ready", importer.prep(task)); assertEquals(ImportTask.State.READY, task.getState()); context.updated(); assertEquals(ImportContext.State.PENDING, context.getState()); importer.run(context); assertEquals(ImportContext.State.COMPLETE, context.getState()); FeatureTypeInfo fti = (FeatureTypeInfo) resource; SimpleFeatureType featureType = (SimpleFeatureType) fti.getFeatureType(); GeometryDescriptor geometryDescriptor = featureType.getGeometryDescriptor(); assertNull("Expecting no geometry", geometryDescriptor); assertEquals(4, featureType.getAttributeCount()); }
@Test public void testIndirectToShapefile() throws Exception { File dir = tmpDir(); unpack("shape/archsites_epsg_prj.zip", dir); unpack("shape/bugsites_esri_prj.tar.gz", dir); ImportContext context = importer.createContext(new Directory(dir)); importer.run(context); runChecks("gs:archsites"); runChecks("gs:bugsites"); DataStoreInfo store = (DataStoreInfo) context.getTasks().get(0).getStore(); assertNotNull(store); assertEquals(2, getCatalog().getFeatureTypesByDataStore(store).size()); context = importer.createContext(new Database(getConnectionParams()), store); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); importer.run(context); assertEquals(ImportContext.State.COMPLETE, context.getState()); assertEquals(3, getCatalog().getFeatureTypesByDataStore(store).size()); runChecks("gs:" + tableName("widgets")); }
private void checkGMLPoiImport(File gmlFile, DataStoreInfo store) throws IOException, CQLException { SpatialFile importData = new SpatialFile(gmlFile); ImportContext context = importer.createContext(importData, store); assertEquals(1, context.getTasks().size()); ImportTask task = context.getTasks().get(0); assertEquals(ImportTask.State.READY, task.getState()); assertEquals(ImportContext.State.PENDING, context.getState()); importer.run(context); assertEquals(ImportContext.State.COMPLETE, context.getState()); FeatureTypeInfo fti = getCatalog().getResourceByName("poi", FeatureTypeInfo.class); assertNotNull(fti); SimpleFeatureType featureType = (SimpleFeatureType) fti.getFeatureType(); GeometryDescriptor geometryDescriptor = featureType.getGeometryDescriptor(); assertEquals( "Expecting a point geometry", Point.class, geometryDescriptor.getType().getBinding()); assertEquals(4, featureType.getAttributeCount()); // read the features, check they are in the right order SimpleFeatureSource fs = (SimpleFeatureSource) fti.getFeatureSource(null, null); SimpleFeatureCollection fc = fs.getFeatures(CQL.toFilter("NAME = 'museam'")); assertEquals(1, fc.size()); SimpleFeature sf = DataUtilities.first(fc); Point p = (Point) sf.getDefaultGeometry(); assertEquals(-74.0104611, p.getX(), 1e-6); assertEquals(40.70758763, p.getY(), 1e-6); }