/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-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.geoserver.data.geogit; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.geogit.api.Ref; import org.geogit.api.RevObject.TYPE; import org.geogit.api.RevTree; import org.geogit.storage.ObjectDatabase; import org.geogit.storage.RefDatabase; import org.geogit.storage.WrappedSerialisingFactory; import org.geogit.storage.hessian.HessianSimpleFeatureTypeReader; import org.geogit.test.RepositoryTestCase; import org.geotools.data.SchemaNotFoundException; import org.geotools.data.simple.SimpleFeatureSource; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.Name; public class GeoGitDataStoreTest extends RepositoryTestCase { private GeoGitDataStore dataStore; @Override protected void setUpInternal() throws Exception { dataStore = new GeoGitDataStore(repo); } public void testCreateSchema() throws IOException { final RefDatabase refDatabase = repo.getRefDatabase(); final Ref initialTypesTreeRef = refDatabase .getRef(GeoGitDataStore.TYPE_NAMES_REF_TREE); assertNotNull(initialTypesTreeRef); final SimpleFeatureType featureType = super.linesType; dataStore.createSchema(featureType); assertTypeRefs(Collections.singleton(super.linesType)); dataStore.createSchema(super.pointsType); Set<SimpleFeatureType> expected = new HashSet<SimpleFeatureType>(); expected.add(super.linesType); expected.add(super.pointsType); assertTypeRefs(expected); try { dataStore.createSchema(super.pointsType); fail("Expected IOException on existing type"); } catch (IOException e) { assertTrue(e.getMessage().contains("already exists")); } } private void assertTypeRefs(Set<SimpleFeatureType> expectedTypes) throws IOException { final RefDatabase refDatabase = repo.getRefDatabase(); for (SimpleFeatureType featureType : expectedTypes) { final Name typeName = featureType.getName(); final Ref typesTreeRef = refDatabase .getRef(GeoGitDataStore.TYPE_NAMES_REF_TREE); assertNotNull(typesTreeRef); RevTree typesTree = repo.getTree(typesTreeRef.getObjectId()); List<String> path = Arrays.asList(typeName.getNamespaceURI(), typeName.getLocalPart()); ObjectDatabase objectDatabase = repo.getObjectDatabase(); Ref typeRef = objectDatabase.getTreeChild(typesTree, path); assertNotNull(typeRef); assertEquals(TYPE.BLOB, typeRef.getType()); WrappedSerialisingFactory serialisingFactory; serialisingFactory = WrappedSerialisingFactory.getInstance(); // SimpleFeatureType readType = objectDatabase.get(typeRef // .getObjectId(), serialisingFactory // .createSimpleFeatureTypeReader(featureType.getName())); SimpleFeatureType readType = objectDatabase.get(typeRef.getObjectId(), new HessianSimpleFeatureTypeReader(featureType.getName())); assertEquals(featureType, readType); } } public void testGetNames() throws IOException { assertEquals(0, dataStore.getNames().size()); dataStore.createSchema(super.linesType); assertEquals(1, dataStore.getNames().size()); dataStore.createSchema(super.pointsType); assertEquals(2, dataStore.getNames().size()); assertTrue(dataStore.getNames().contains( RepositoryTestCase.linesTypeName)); assertTrue(dataStore.getNames().contains( RepositoryTestCase.pointsTypeName)); } public void testGetTypeNames() throws IOException { assertEquals(0, dataStore.getTypeNames().length); dataStore.createSchema(super.linesType); assertEquals(1, dataStore.getTypeNames().length); dataStore.createSchema(super.pointsType); assertEquals(2, dataStore.getTypeNames().length); List<String> simpleNames = Arrays.asList(dataStore.getTypeNames()); assertTrue(simpleNames.contains(RepositoryTestCase.linesName)); assertTrue(simpleNames.contains(RepositoryTestCase.pointsName)); } public void testGetSchemaName() throws IOException { try { dataStore.getSchema(RepositoryTestCase.linesTypeName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } dataStore.createSchema(super.linesType); SimpleFeatureType lines = dataStore .getSchema(RepositoryTestCase.linesTypeName); assertEquals(super.linesType, lines); try { dataStore.getSchema(RepositoryTestCase.pointsTypeName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } dataStore.createSchema(super.pointsType); SimpleFeatureType points = dataStore .getSchema(RepositoryTestCase.pointsTypeName); assertEquals(super.pointsType, points); } public void testGetSchemaString() throws IOException { try { dataStore.getSchema(RepositoryTestCase.linesName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } dataStore.createSchema(super.linesType); SimpleFeatureType lines = dataStore .getSchema(RepositoryTestCase.linesName); assertEquals(super.linesType, lines); try { dataStore.getSchema(RepositoryTestCase.pointsName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } dataStore.createSchema(super.pointsType); SimpleFeatureType points = dataStore .getSchema(RepositoryTestCase.pointsName); assertEquals(super.pointsType, points); } public void testGetFeatureSourceName() throws IOException { try { dataStore.getFeatureSource(RepositoryTestCase.linesTypeName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } SimpleFeatureSource source; dataStore.createSchema(super.linesType); source = dataStore.getFeatureSource(RepositoryTestCase.linesTypeName); assertTrue(source instanceof GeoGitFeatureSource); try { dataStore.getFeatureSource(RepositoryTestCase.pointsTypeName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } dataStore.createSchema(super.pointsType); source = dataStore.getFeatureSource(RepositoryTestCase.pointsTypeName); assertTrue(source instanceof GeoGitFeatureSource); } public void testGetFeatureSourceString() throws IOException { try { dataStore.getFeatureSource(RepositoryTestCase.linesName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } SimpleFeatureSource source; dataStore.createSchema(super.linesType); source = dataStore.getFeatureSource(RepositoryTestCase.linesName); assertTrue(source instanceof GeoGitFeatureSource); try { dataStore.getFeatureSource(RepositoryTestCase.pointsName); fail("Expected SchemaNotFoundException"); } catch (SchemaNotFoundException e) { assertTrue(true); } dataStore.createSchema(super.pointsType); source = dataStore.getFeatureSource(RepositoryTestCase.pointsName); assertTrue(source instanceof GeoGitFeatureSource); } }