diff --git a/deegree-core/deegree-core-db/pom.xml b/deegree-core/deegree-core-db/pom.xml index 020181c1ed..949614b643 100644 --- a/deegree-core/deegree-core-db/pom.xml +++ b/deegree-core/deegree-core-db/pom.xml @@ -52,6 +52,10 @@ junit junit + + org.xerial + sqlite-jdbc + diff --git a/deegree-core/deegree-core-db/src/main/java/org/deegree/db/ConnectionProviderManager.java b/deegree-core/deegree-core-db/src/main/java/org/deegree/db/ConnectionProviderManager.java index 6b497a556a..5784269097 100644 --- a/deegree-core/deegree-core-db/src/main/java/org/deegree/db/ConnectionProviderManager.java +++ b/deegree-core/deegree-core-db/src/main/java/org/deegree/db/ConnectionProviderManager.java @@ -69,6 +69,14 @@ public ConnectionProviderManager() { @Override public void startup( Workspace workspace ) { + this.workspace = workspace; + try { + for ( Driver d : ServiceLoader.load( Driver.class, workspace.getModuleClassLoader() ) ) { + registerDriver( new DriverWrapper( d ) ); + LOG.info( "Found and loaded {}", d.getClass().getName() ); + } + } catch ( SQLException e ) { + LOG.debug( "Unable to load driver: {}", e.getLocalizedMessage() ); // Check for legacy JDBC drivers and warn if some are found in modules directory ClassLoader moduleClassLoader = workspace.getModuleClassLoader(); for ( Driver d : ServiceLoader.load( Driver.class, moduleClassLoader ) ) { diff --git a/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/pom.xml b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/pom.xml new file mode 100644 index 0000000000..1324e21308 --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/pom.xml @@ -0,0 +1,47 @@ + + 4.0.0 + deegree-sqldialect-gpkg + deegree-sqldialect-gpkg + jar + SQL dialect for GeoPackage + + + rework + + + + org.deegree + deegree-core-sqldialect + 3.4-pre17-SNAPSHOT + + + + + deegree-repo + http://repo.deegree.org/content/groups/public + + never + + + true + + + + + + + org.deegree + deegree-sqldialect-commons + ${project.version} + + + org.deegree + deegree-core-db + ${project.version} + + + org.xerial + sqlite-jdbc + + + diff --git a/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialect.java b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialect.java new file mode 100644 index 0000000000..c8bb090f98 --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialect.java @@ -0,0 +1,168 @@ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2010 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.sqldialect.gpkg; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +import org.deegree.commons.jdbc.SQLIdentifier; +import org.deegree.commons.jdbc.TableName; +import org.deegree.commons.tom.primitive.PrimitiveType; +import org.deegree.commons.tom.sql.DefaultPrimitiveConverter; +import org.deegree.commons.tom.sql.PrimitiveParticleConverter; +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.filter.FilterEvaluationException; +import org.deegree.filter.OperatorFilter; +import org.deegree.filter.sort.SortProperty; +import org.deegree.geometry.Envelope; +import org.deegree.geometry.utils.GeometryParticleConverter; +import org.deegree.sqldialect.SQLDialect; +import org.deegree.sqldialect.filter.AbstractWhereBuilder; +import org.deegree.sqldialect.filter.PropertyNameMapper; +import org.deegree.sqldialect.filter.UnmappableException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * {@link SQLDialect} for GeoPackage databases. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgDialect implements SQLDialect { + + private static Logger LOG = LoggerFactory.getLogger( GpkgDialect.class ); + + @Override + public int getMaxColumnNameLength() { + return 2000; + } + + @Override + public int getMaxTableNameLength() { + return 2000; + } + + public String getDefaultSchema() { + return "main"; + } + + public String stringPlus() { + return "||"; + } + + public String stringIndex( String pattern, String string ) { + return "INSTR(" + string + "," + pattern + ")"; + } + + public String cast( String expr, String type ) { + return "CAST(" + expr + " AS " + type + ")"; + } + + @Override + public String geometryMetadata( TableName qTable, String column, boolean isGeographical ) { + return null; + } + + @Override + public AbstractWhereBuilder getWhereBuilder( PropertyNameMapper mapper, OperatorFilter filter, + SortProperty[] sortCrit, boolean allowPartialMappings ) + throws UnmappableException, FilterEvaluationException { + return new GpkgWhereBuilder( this, mapper, filter, sortCrit, allowPartialMappings ); + } + + @Override + public String getUndefinedSrid() { + return "-1"; + } + + @Override + public String getBBoxAggregateSnippet( String column ) { + return null; + } + + @Override + public Envelope getBBoxAggregateValue( ResultSet rs, int colIdx, ICRS crs ) + throws SQLException { + return null; + } + + @Override + public GeometryParticleConverter getGeometryConverter( String column, ICRS crs, String srid, boolean is2D ) { + return new GpkgGeometryConverter( column, crs, srid ); + } + + @Override + public PrimitiveParticleConverter getPrimitiveConverter( String column, PrimitiveType pt ) { + return new DefaultPrimitiveConverter( pt, column ); + } + + @Override + public void createDB( Connection adminConn, String dbName ) + throws SQLException { + } + + @Override + public void dropDB( Connection adminConn, String dbName ) + throws SQLException { + } + + @Override + public void createAutoColumn( StringBuffer currentStmt, List additionalSmts, SQLIdentifier column, + SQLIdentifier table ) { + currentStmt.append( column ); + } + + @Override + public ResultSet getTableColumnMetadata( DatabaseMetaData md, TableName qTable ) + throws SQLException { + String schema = qTable.getSchema() != null ? qTable.getSchema() : getDefaultSchema(); + String table = qTable.getTable(); + return md.getColumns( null, schema.toLowerCase(), table.toLowerCase(), null ); + } + + @Override + public boolean requiresTransactionForCursorMode() { + return false; + } + + @Override + public String getSelectSequenceNextVal( String sequence ) { + return null; + } +} diff --git a/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialectProvider.java b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialectProvider.java new file mode 100644 index 0000000000..9fdfb0019e --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialectProvider.java @@ -0,0 +1,71 @@ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2012 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.sqldialect.gpkg; + +import java.sql.Connection; + +import org.deegree.sqldialect.SQLDialect; +import org.deegree.db.dialect.SqlDialectProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * {@link SqlDialectProvider} for GeoPackage databases. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgDialectProvider implements SqlDialectProvider { + + private static Logger LOG = LoggerFactory.getLogger( GpkgDialectProvider.class ); + + @Override + public boolean supportsConnection( final Connection connection ) { + String url; + try { + url = connection.getMetaData().getURL(); + } catch ( Exception e ) { + LOG.debug( "Could not determine metadata/url of connection: {}", e.getLocalizedMessage() ); + LOG.trace( "Stack trace:", e ); + return false; + } + return url.startsWith( "jdbc:sqlite:" ); + } + + @Override + public SQLDialect createDialect( final Connection conn ) { + return new GpkgDialect(); + } +} diff --git a/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgGeometryConverter.java b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgGeometryConverter.java new file mode 100644 index 0000000000..7796cdcb28 --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgGeometryConverter.java @@ -0,0 +1,176 @@ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2011 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.sqldialect.gpkg; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.geometry.Geometry; +import org.deegree.geometry.io.WKBReader; +import org.deegree.geometry.utils.GeometryParticleConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * {@link GeometryParticleConverter} for GeoPackage databases. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgGeometryConverter implements GeometryParticleConverter { + + private static Logger LOG = LoggerFactory.getLogger( GpkgGeometryConverter.class ); + + private final String column; + + private final ICRS crs; + + private final String srid; + + /** + * Creates a new {@link GpkgGeometryConverter} instance. + * + * @param column (unqualified) column that stores the geometry, must not be null + * @param crs CRS of the stored geometries, can be null + * @param srid PostGIS spatial reference identifier, must not be null + */ + public GpkgGeometryConverter( String column, ICRS crs, String srid ) { + this.column = column; + this.crs = crs; + this.srid = srid; + } + + @Override + public String getSelectSnippet( String tableAlias ) { + if ( tableAlias != null ) { + return tableAlias + "." + column; + } + return column; + } + + @Override + public String getSetSnippet( Geometry particle ) { + return null; + } + + @Override + public Geometry toParticle( ResultSet rs, int colIndex ) + throws SQLException { + ByteBuffer bb = ByteBuffer.wrap( rs.getBytes( colIndex ) ); + if ( bb == null ) { + return null; + } + try { + int[] header = parseGpkgHeader( bb ); + int headerLength = header[0]; + int endian = header[1]; + return parseGpkgGeometry( bb, headerLength, endian ); + } catch ( Throwable t ) { + throw new IllegalArgumentException( t.getMessage(), t ); + } + } + + private int[] parseGpkgHeader( ByteBuffer pgb ) + throws Exception { + byte bytes = pgb.get( 3 ); + int endian = bytes & 0x01; + int headerLength = getFlags( bytes ); + return new int[] { headerLength, endian }; + } + + private int getFlags( byte bytes ) + throws Exception { + int flags = ( bytes & 0x0E ) >> 1; + return getHeaderLength( flags ); + } + + @SuppressWarnings("unchecked") + private int getHeaderLength( int flag ) + throws Exception { + Map eb = new HashMap(); + eb.put( 0, 8 ); + eb.put( 1, 40 ); + eb.put( 2, 56 ); + eb.put( 3, 56 ); + eb.put( 4, 72 ); + + int envelopeLength = 0; + try { + envelopeLength = eb.get( flag ); + } catch ( Exception e ) { + System.out.println( "Invalid envelope code value:" + flag ); + } + return envelopeLength; + } + + private Geometry parseGpkgGeometry( ByteBuffer byb, int headerLength, int endian ) + throws Exception { + WKBReader wkbReader = new WKBReader(); + if ( endian == 0 ) + byb.order( ByteOrder.BIG_ENDIAN ); + else { + byb.order( ByteOrder.LITTLE_ENDIAN ); + } + byte[] wkb = new byte[byb.capacity() - headerLength]; + byb.position( headerLength ); + byb.get( wkb, 0, wkb.length ); + Geometry gpkgGeom = wkbReader.read( wkb, crs ); + if ( gpkgGeom == null ) { + throw new Exception( "Unable to parse the GeoPackage geometry" ); + } + return gpkgGeom; + } + + @Override + public void setParticle( PreparedStatement stmt, Geometry particle, int paramIndex ) + throws SQLException { + } + + @Override + public String getSrid() { + return srid; + } + + @Override + public ICRS getCrs() { + return crs; + } +} diff --git a/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgWhereBuilder.java b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgWhereBuilder.java new file mode 100644 index 0000000000..d9355cec3a --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgWhereBuilder.java @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2009 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.sqldialect.gpkg; + +import org.deegree.filter.FilterEvaluationException; +import org.deegree.filter.OperatorFilter; +import org.deegree.filter.comparison.PropertyIsLike; +import org.deegree.filter.expression.ValueReference; +import org.deegree.filter.sort.SortProperty; +import org.deegree.filter.spatial.SpatialOperator; +import org.deegree.sqldialect.filter.AbstractWhereBuilder; +import org.deegree.sqldialect.filter.PropertyNameMapper; +import org.deegree.sqldialect.filter.UnmappableException; +import org.deegree.sqldialect.filter.expression.SQLExpression; +import org.deegree.sqldialect.filter.expression.SQLOperation; +import org.deegree.sqldialect.filter.expression.SQLOperationBuilder; + +/** + * {@link AbstractWhereBuilder} implementation for GeoPackage databases. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgWhereBuilder extends AbstractWhereBuilder { + + /** + * Creates a new {@link GpkgWhereBuilder} instance. + * + * @param dialect SQL dialect + * @param mapper provides the mapping from {@link ValueReference}s to DB columns, must not be null + * @param filter Filter to use for generating the WHERE clause, can be null + * @param sortCrit criteria to use for generating the ORDER BY clause, can be null + * @param allowPartialMappings if false, any unmappable expression will cause an {@link UnmappableException} to be thrown + * @throws FilterEvaluationException if the expression contains invalid {@link ValueReference}s + * @throws UnmappableException if allowPartialMappings is false and an expression could not be mapped to the db + */ + public GpkgWhereBuilder( GpkgDialect dialect, PropertyNameMapper mapper, OperatorFilter filter, + SortProperty[] sortCrit, boolean allowPartialMappings ) + throws FilterEvaluationException, + UnmappableException { + super( dialect, mapper, filter, sortCrit ); + build( allowPartialMappings ); + } + + /** + * Translates the given {@link PropertyIsLike} into an {@link SQLOperation} + * + * @param op comparison operator to be translated, must not be null + * @return corresponding SQL expression, never null + * @throws UnmappableException if translation is not possible (usually due to unmappable property names) + * @throws FilterEvaluationException if the expression contains invalid {@link ValueReference}s + */ + @Override + protected SQLOperation toProtoSQL( PropertyIsLike op ) + throws UnmappableException, FilterEvaluationException { + return null; + } + + @Override + protected SQLOperation toProtoSQL( SpatialOperator op ) + throws UnmappableException, FilterEvaluationException { + return null; + } + + @Override + protected void addExpression( SQLOperationBuilder builder, SQLExpression expr, Boolean matchCase ) { + } +} diff --git a/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/resources/META-INF/services/org.deegree.db.dialect.SqlDialectProvider b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/resources/META-INF/services/org.deegree.db.dialect.SqlDialectProvider new file mode 100644 index 0000000000..8b41e7124d --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/resources/META-INF/services/org.deegree.db.dialect.SqlDialectProvider @@ -0,0 +1 @@ +org.deegree.sqldialect.gpkg.GpkgDialectProvider diff --git a/deegree-core/deegree-core-sqldialect/pom.xml b/deegree-core/deegree-core-sqldialect/pom.xml index a60c39c3de..10f800d07d 100644 --- a/deegree-core/deegree-core-sqldialect/pom.xml +++ b/deegree-core/deegree-core-sqldialect/pom.xml @@ -41,6 +41,7 @@ deegree-sqldialect-commons + deegree-sqldialect-gpkg deegree-sqldialect-postgis diff --git a/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml b/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml index d649273a50..a26a5dc20e 100644 --- a/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml +++ b/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml @@ -59,6 +59,11 @@ org.deegree ${project.version} + + deegree-sqldialect-gpkg + org.deegree + ${project.version} + junit junit diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/pom.xml b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/pom.xml new file mode 100644 index 0000000000..7b80a64a3f --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/pom.xml @@ -0,0 +1,69 @@ + + 4.0.0 + deegree-tilestore-gpkg + deegree-tilestore-gpkg + jar + Tile store implementation that accesses tiles stored in GeoPackage databases + + + ok + + + + org.deegree + deegree-tilestores + 3.4-pre17-SNAPSHOT + + + + + deegree-repo + http://repo.deegree.org/content/groups/public + + never + + + true + + + + + + + + org.jvnet.jaxb2.maven2 + maven-jaxb2-plugin + + + + + + + org.deegree + deegree-tilestore-commons + ${project.version} + + + org.deegree + deegree-core-db + ${project.version} + + + jai + jai-codec + + + jai + jai-imageio + + + jai + jai-mlibwrapper + + + junit + junit + + + + diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTile.java b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTile.java new file mode 100644 index 0000000000..7fd59b5e8e --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTile.java @@ -0,0 +1,105 @@ +//$HeadURL$ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2010 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + Occam Labs UG (haftungsbeschränkt) + Godesberger Allee 139, 53175 Bonn + Germany + http://www.occamlabs.de/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ + +package org.deegree.tile.persistence.gpkg; + +import org.deegree.feature.FeatureCollection; +import org.deegree.geometry.Envelope; +import org.deegree.tile.Tile; +import org.deegree.tile.TileIOException; +import org.deegree.tile.TileMatrix; +import org.slf4j.Logger; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * A GpkgTile. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgTile implements Tile { + + private static final Logger LOG = getLogger( GpkgTile.class ); + + private TileMatrix tm; + + private byte[] bytes; + + public GpkgTile( TileMatrix tm, byte[] bytes ) { + this.tm = tm; + this.bytes = bytes; + } + + @Override + public BufferedImage getAsImage() + throws TileIOException { + try { + return ImageIO.read( new ByteArrayInputStream( bytes ) ); + } catch ( IOException e ) { + String msg = "Error decoding image from byte array: " + e.getMessage(); + LOG.trace( msg, e ); + throw new TileIOException( e.getMessage(), e ); + } + } + + @Override + public InputStream getAsStream() { + return new ByteArrayInputStream( bytes ); + } + + @Override + public Envelope getEnvelope() { + return tm.getSpatialMetadata().getEnvelope(); + } + + @Override + public FeatureCollection getFeatures( int i, int j, int limit ) + throws UnsupportedOperationException { + throw new UnsupportedOperationException( "Feature retrieval is not supported by the GpkgTileStore." ); + } +} diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataLevel.java b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataLevel.java new file mode 100644 index 0000000000..5f0d12d485 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataLevel.java @@ -0,0 +1,82 @@ +//$HeadURL$ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2010 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + Occam Labs UG (haftungsbeschränkt) + Godesberger Allee 139, 53175 Bonn + Germany + http://www.occamlabs.de/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ + +package org.deegree.tile.persistence.gpkg; + +import org.deegree.commons.utils.Pair; +import org.deegree.tile.Tile; +import org.deegree.tile.TileDataLevel; +import org.deegree.tile.TileMatrix; + +import java.util.Map; + +/** + * A GpkgTileDataLevel + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ + +public class GpkgTileDataLevel implements TileDataLevel { + + private final TileMatrix tm; + + private Map, byte[]> tileMap; + + public GpkgTileDataLevel( TileMatrix tm, Map, byte[]> tileMap ) { + this.tm = tm; + this.tileMap = tileMap; + } + + @Override + public TileMatrix getMetadata() { + return tm; + } + + @Override + public Tile getTile( long x, long y ) { + Pair k = new Pair(); + k.setFirst( x ); + k.setSecond( y ); + byte[] byteArr = tileMap.get( k ); + return new GpkgTile( tm, byteArr ); + } +} diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataSetBuilder.java b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataSetBuilder.java new file mode 100644 index 0000000000..916f82221f --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataSetBuilder.java @@ -0,0 +1,124 @@ +//$HeadURL$ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2012 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + and + - Occam Labs UG (haftungsbeschränkt) - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + Occam Labs UG (haftungsbeschränkt) + Godesberger Allee 139, 53175 Bonn + Germany + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.tile.persistence.gpkg; + +import org.deegree.commons.config.ResourceInitException; +import org.deegree.commons.utils.Pair; +import org.deegree.db.legacy.LegacyConnectionProvider; +import org.deegree.tile.*; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.*; + +/** + * Builds tile data sets from jaxb config beans. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +class GpkgTileDataSetBuilder { + + private final org.deegree.tile.persistence.gpkg.jaxb.GpkgTileStoreJAXB cfg; + + private String format; + + private String identifier; + + private TileMatrixSet tms; + + GpkgTileDataSetBuilder( org.deegree.tile.persistence.gpkg.jaxb.GpkgTileStoreJAXB cfg, TileMatrixSet tms ) { + this.cfg = cfg; + this.tms = tms; + this.format = cfg.getTileDataSet().getImageFormat(); + this.identifier = cfg.getTileDataSet().getIdentifier(); + } + + Map extractTileDataSets() + throws ResourceInitException { + Map tileDataSet = new HashMap(); + tileDataSet.put( identifier, buildTileDataSet() ); + return tileDataSet; + } + + public TileDataSet buildTileDataSet() + throws ResourceInitException { + List list = new ArrayList(); + for ( TileMatrix tm : tms.getTileMatrices() ) { + String idTm = tm.getIdentifier(); + Map, byte[]> ts = getTileData( idTm ); + TileDataLevel tdl = new GpkgTileDataLevel( tm, ts ); + list.add( tdl ); + } + // if ( format == null ) { + // format = "image/jpg"; + // } + return new DefaultTileDataSet( list, tms, format ); + } + + public Map, byte[]> getTileData( String id ) { + Map, byte[]> mapTile = new LinkedHashMap, byte[]>(); + try { + LegacyConnectionProvider connProvider = new LegacyConnectionProvider( "jdbc:sqlite:/" + cfg.getTileDataSet().getFile(), "", + "", false, null ); + Connection conn = connProvider.getConnection(); + Statement stmt = conn.createStatement(); + String table = cfg.getTileDataSet().getTileMapping().getTable(); + String query = "select * from " + table + " where zoom_level = " + id; + ResultSet rs = stmt.executeQuery( query ); + while ( rs.next() ) { + long row = rs.getLong( 4 ); + long column = rs.getLong( 3 ); + byte[] imgBytes = rs.getBytes( 5 ); + Pair keyTile = new Pair(); + keyTile.setFirst( row ); + keyTile.setSecond( column ); + mapTile.put( keyTile, imgBytes ); + } + } catch ( SQLException e ) { + e.printStackTrace(); + } + return mapTile; + } +} diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreBuilder.java b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreBuilder.java new file mode 100644 index 0000000000..56664c86ff --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreBuilder.java @@ -0,0 +1,159 @@ +/*---------------------------------------------------------------------------- + This file is part of deegree + Copyright (C) 2001-2013 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + and + - Occam Labs UG (haftungsbeschränkt) - + and others + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + e-mail: info@deegree.org + website: http://www.deegree.org/ +----------------------------------------------------------------------------*/ +package org.deegree.tile.persistence.gpkg; + +import org.deegree.cs.coordinatesystems.ICRS; +import org.deegree.cs.exceptions.UnknownCRSException; +import org.deegree.cs.persistence.CRSManager; +import org.deegree.db.legacy.LegacyConnectionProvider; +import org.deegree.geometry.Envelope; +import org.deegree.geometry.GeometryFactory; +import org.deegree.geometry.metadata.SpatialMetadata; +import org.deegree.tile.TileDataSet; +import org.deegree.tile.TileMatrix; +import org.deegree.tile.TileMatrixSet; +import org.deegree.tile.persistence.GenericTileStore; +import org.deegree.tile.persistence.TileStore; +import org.deegree.workspace.ResourceBuilder; +import org.deegree.workspace.ResourceInitException; +import org.deegree.workspace.ResourceMetadata; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static java.util.Collections.singletonList; + +/** + * This class is responsible for building geotiff tile stores. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgTileStoreBuilder implements ResourceBuilder { + + private org.deegree.tile.persistence.gpkg.jaxb.GpkgTileStoreJAXB cfg; + + private ResourceMetadata metadata; + + private String table; + + private Connection conn = null; + + private List matrices; + + private final GeometryFactory fac = new GeometryFactory(); + + public GpkgTileStoreBuilder( org.deegree.tile.persistence.gpkg.jaxb.GpkgTileStoreJAXB cfg, + ResourceMetadata metadata ) { + this.cfg = cfg; + this.metadata = metadata; + } + + @Override + public TileStore build() { + try { + table = cfg.getTileDataSet().getTileMapping().getTable(); + String id; + LegacyConnectionProvider connProvider = new LegacyConnectionProvider( "jdbc:sqlite:/" + cfg.getTileDataSet().getFile(), "", + "", false, null ); + conn = connProvider.getConnection(); + TileMatrix tm; + matrices = new ArrayList(); + try { + Statement stmt = conn.createStatement(); + String query = "select * from gpkg_tile_matrix where table_name = '" + table + "'"; + ResultSet rs = stmt.executeQuery( query ); + if ( rs == null ) { + throw new ResourceInitException( + "No information could be read from gpkg_tile_matrix table. Please add the table to the GeoPackage." ); + } + SpatialMetadata sm = getTileMatrixSet().getSpatialMetadata(); + while ( rs.next() ) { + id = rs.getString( 2 ); + long numx = rs.getLong( 3 ); + long numy = rs.getLong( 4 ); + long tileWidth = rs.getLong( 5 ); + long tsx = rs.getLong( 7 ); + long tsy = rs.getLong( 8 ); + double res = (double) ( tsx / tileWidth ); + tm = new TileMatrix( id, sm, tsx, tsy, res, numx, numy ); + matrices.add( tm ); + } + } catch ( SQLException e ) { + e.printStackTrace(); + } + GpkgTileDataSetBuilder builder = new GpkgTileDataSetBuilder( cfg, getTileMatrixSet() ); + Map map = builder.extractTileDataSets(); + return new GenericTileStore( map, metadata ); + } catch ( Exception e ) { + throw new ResourceInitException( "Error when parsing configuration: " + e.getLocalizedMessage(), e ); + } + } + + public TileMatrixSet getTileMatrixSet() { + String id = null; + SpatialMetadata spatialMetadata = null; + try { + Statement stmt = conn.createStatement(); + String query = "select * from gpkg_tile_matrix_set where table_name = '" + table + "'"; + ResultSet rs = stmt.executeQuery( query ); + if ( rs == null ) { + throw new ResourceInitException( + "No information could be read from gpkg_tile_matrix_set table. Please add the table to the GeoPackage." ); + } + id = rs.getString( 1 ); + ICRS srs = CRSManager.lookup( "EPSG:" + rs.getString( 2 ) ); + if ( srs == null ) { + throw new ResourceInitException( + "No SRS information could be read from GeoPackage. Please add one to the GeoPackage." ); + } + double minx = rs.getDouble( 3 ); + double miny = rs.getDouble( 4 ); + double maxx = rs.getDouble( 5 ); + double maxy = rs.getDouble( 6 ); + Envelope env = fac.createEnvelope( minx, miny, maxx, maxy, srs ); + if ( env == null ) { + throw new ResourceInitException( + "No envelope information could be read from GeoPackage. Please add one to the GeoPackage." ); + } + spatialMetadata = new SpatialMetadata( env, singletonList( env.getCoordinateSystem() ) ); + } catch ( SQLException e ) { + e.printStackTrace(); + } catch ( UnknownCRSException e ) { + e.printStackTrace(); + } catch ( ResourceInitException e ) { + e.printStackTrace(); + } + return new TileMatrixSet( id, null, matrices, spatialMetadata, null ); + } +} diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreMetadata.java b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreMetadata.java new file mode 100644 index 0000000000..64eeb878a6 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreMetadata.java @@ -0,0 +1,69 @@ +/*---------------------------------------------------------------------------- + This file is part of deegree + Copyright (C) 2001-2013 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + and + - Occam Labs UG (haftungsbeschränkt) - + and others + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + e-mail: info@deegree.org + website: http://www.deegree.org/ +----------------------------------------------------------------------------*/ +package org.deegree.tile.persistence.gpkg; + +import org.deegree.tile.persistence.TileStore; +import org.deegree.workspace.ResourceBuilder; +import org.deegree.workspace.ResourceInitException; +import org.deegree.workspace.ResourceLocation; +import org.deegree.workspace.Workspace; +import org.deegree.workspace.standard.AbstractResourceMetadata; +import org.deegree.workspace.standard.AbstractResourceProvider; + +import static org.deegree.commons.xml.jaxb.JAXBUtils.unmarshall; + +/** + * Resource metadata implementation for geotiff tile stores. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ +public class GpkgTileStoreMetadata extends AbstractResourceMetadata { + + public GpkgTileStoreMetadata( Workspace workspace, ResourceLocation location, + AbstractResourceProvider provider ) { + super( workspace, location, provider ); + } + + @Override + public ResourceBuilder prepare() { + try { + org.deegree.tile.persistence.gpkg.jaxb.GpkgTileStoreJAXB cfg = (org.deegree.tile.persistence.gpkg.jaxb.GpkgTileStoreJAXB) unmarshall( + "org.deegree.tile.persistence.gpkg.jaxb", + provider.getSchema(), + location.getAsStream(), + workspace ); + + return new GpkgTileStoreBuilder( cfg, this ); + } catch ( Exception e ) { + throw new ResourceInitException( "Unable to prepare resource " + getIdentifier() + ": " + + e.getLocalizedMessage(), e ); + } + } + +} diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreProvider.java b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreProvider.java new file mode 100644 index 0000000000..9ef813b67b --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreProvider.java @@ -0,0 +1,77 @@ +//$HeadURL$ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2010 by: + - Department of Geography, University of Bonn - + and + - lat/lon GmbH - + + 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; either version 2.1 of the License, or (at your option) + any later version. + 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. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + Occam Labs UG (haftungsbeschränkt) + Godesberger Allee 139, 53175 Bonn + Germany + http://www.occamlabs.de/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.tile.persistence.gpkg; + +import org.deegree.tile.persistence.TileStore; +import org.deegree.tile.persistence.TileStoreProvider; +import org.deegree.workspace.ResourceLocation; +import org.deegree.workspace.ResourceMetadata; +import org.deegree.workspace.Workspace; + +import java.net.URL; + +/** + * The GpkgTileStoreProvider provides a TileSet out of a GeoPackage database. + * + * @author Diego Migliavacca + * @author last edited by: $Author: dmigliavacca $ + */ + +public class GpkgTileStoreProvider extends TileStoreProvider { + + private static final URL SCHEMA = GpkgTileStoreProvider.class.getResource( + "/META-INF/schemas/datasource/tile/gpkg/3.2.0/geopackage.xsd" ); + + @Override + public String getNamespace() { + return "http://www.deegree.org/datasource/tile/gpkg"; + } + + @Override + public ResourceMetadata createFromLocation( Workspace workspace, ResourceLocation location ) { + return new GpkgTileStoreMetadata( workspace, location, this ); + } + + @Override + public URL getSchema() { + return SCHEMA; + } +} diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/3.2.0/example.xml b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/3.2.0/example.xml new file mode 100644 index 0000000000..98dea483f7 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/3.2.0/example.xml @@ -0,0 +1,15 @@ + + + + + + test + home/user/World.gpkg + + + image/jpg + + + diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/3.2.0/geopackage.xsd b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/3.2.0/geopackage.xsd new file mode 100644 index 0000000000..147886e05d --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/3.2.0/geopackage.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/services/org.deegree.tile.persistence.TileStoreProvider b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/services/org.deegree.tile.persistence.TileStoreProvider new file mode 100644 index 0000000000..5c55542852 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/services/org.deegree.tile.persistence.TileStoreProvider @@ -0,0 +1 @@ +org.deegree.tile.persistence.gpkg.GpkgTileStoreProvider diff --git a/deegree-datastores/deegree-tilestores/pom.xml b/deegree-datastores/deegree-tilestores/pom.xml index 9f4b08cc3d..d48ff8f5a5 100644 --- a/deegree-datastores/deegree-tilestores/pom.xml +++ b/deegree-datastores/deegree-tilestores/pom.xml @@ -30,6 +30,7 @@ deegree-tilestore-filesystem deegree-tilestore-gdal deegree-tilestore-geotiff + deegree-tilestore-gpkg deegree-tilestore-merge deegree-tilestore-remotewms deegree-tilestore-remotewmts diff --git a/deegree-services/deegree-webservices/pom.xml b/deegree-services/deegree-webservices/pom.xml index e245c20a1a..6e75f24415 100644 --- a/deegree-services/deegree-webservices/pom.xml +++ b/deegree-services/deegree-webservices/pom.xml @@ -273,6 +273,11 @@ deegree-tilestore-geotiff ${project.version} + + org.deegree + deegree-tilestore-gpkg + ${project.version} + org.deegree deegree-tilestore-filesystem diff --git a/deegree-services/deegree-webservices/src/main/java/org/deegree/console/connection/sql/JdbcBean.java b/deegree-services/deegree-webservices/src/main/java/org/deegree/console/connection/sql/JdbcBean.java index a54f544298..ae62e3e76a 100644 --- a/deegree-services/deegree-webservices/src/main/java/org/deegree/console/connection/sql/JdbcBean.java +++ b/deegree-services/deegree-webservices/src/main/java/org/deegree/console/connection/sql/JdbcBean.java @@ -90,6 +90,10 @@ public void setDbType( String dbType ) { dbConn = "jdbc:postgresql://" + dbHost + ":" + dbPort + "/" + dbName; return; } + if ( dbType.equals( "sqlite" ) ) { + dbConn = "jdbc:sqlite:" + dbName; + return; + } } public void setDbPort( String dbPort ) { @@ -144,6 +148,10 @@ public void update() { dbConn = "jdbc:postgresql://" + dbHost + ":" + dbPort + "/" + dbName; return; } + if ( dbType.equals( "sqlite" ) ) { + dbConn = "jdbc:sqlite:" + dbName; + return; + } } public String editAsXml() diff --git a/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.tile.persistence.gpkg.GpkgTileStoreProvider b/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.tile.persistence.gpkg.GpkgTileStoreProvider new file mode 100644 index 0000000000..b0da27e899 --- /dev/null +++ b/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.tile.persistence.gpkg.GpkgTileStoreProvider @@ -0,0 +1,2 @@ +name=GpkgTilestore +example1_location=/META-INF/schemas/datasource/tile/gpkg/3.2.0/example.xml diff --git a/deegree-services/deegree-webservices/src/main/webapp/console/connection/sql/jdbcparams.xhtml b/deegree-services/deegree-webservices/src/main/webapp/console/connection/sql/jdbcparams.xhtml index cd434669c0..9a5c20024a 100644 --- a/deegree-services/deegree-webservices/src/main/webapp/console/connection/sql/jdbcparams.xhtml +++ b/deegree-services/deegree-webservices/src/main/webapp/console/connection/sql/jdbcparams.xhtml @@ -1,81 +1,126 @@ + xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" + xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fn="http://java.sun.com/jsp/jstl/functions" + xmlns:dg="http://deegree.org/jsf" xmlns:dgc="http://java.sun.com/jsf/composite/deegree">
- + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+
+
- - - - -
- - - - -
- -
- -
- -

-
+ + + + + + + + + +
-
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+ + + + + +
+ + + + + +
+ + + +

+ + +
+
+
+
- + - + action="#{jdbcBean.cancel}"> +
diff --git a/pom.xml b/pom.xml index 12ee2ca045..f91cd62423 100644 --- a/pom.xml +++ b/pom.xml @@ -752,6 +752,12 @@ xmlparserv2_sans_jaxp_services 12.2.0.1 + + + org.xerial + sqlite-jdbc + 3.7.2 + org.apache.xmlgraphics