diff --git a/deegree-core/deegree-connectionprovider-datasource/src/main/resources/META-INF/schemas/connectionprovider/datasource/example_dbcp_gpkg.xml b/deegree-core/deegree-connectionprovider-datasource/src/main/resources/META-INF/schemas/connectionprovider/datasource/example_dbcp_gpkg.xml new file mode 100644 index 00000000000..bb7dfffb3e7 --- /dev/null +++ b/deegree-core/deegree-connectionprovider-datasource/src/main/resources/META-INF/schemas/connectionprovider/datasource/example_dbcp_gpkg.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/deegree-core/deegree-core-db/pom.xml b/deegree-core/deegree-core-db/pom.xml index 185732f3cf7..19036830eac 100644 --- a/deegree-core/deegree-core-db/pom.xml +++ b/deegree-core/deegree-core-db/pom.xml @@ -39,6 +39,10 @@ junit junit + + org.xerial + sqlite-jdbc + 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 00000000000..16479abc52f --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + deegree-sqldialect-gpkg + deegree-sqldialect-gpkg + jar + SQL dialect for GeoPackage + + + rework + + + + org.deegree + deegree-core-sqldialect + 3.5.0-SNAPSHOT + + + + + 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 00000000000..ed4a3f62307 --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialect.java @@ -0,0 +1,186 @@ +/*---------------------------------------------------------------------------- + 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 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.SortCriterion; +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; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * {@link SQLDialect} for GeoPackage databases. + * + * @author Diego Migliavacca + * @since 3.5 + */ +public class GpkgDialect implements SQLDialect { + + private static Logger LOG = LoggerFactory.getLogger(GpkgDialect.class); + + private char defaultEscapeChar = Character.UNASSIGNED; + + @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, List defaultSortCriteria, boolean allowPartialMappings) + throws UnmappableException, FilterEvaluationException { + return new GpkgWhereBuilder(this, mapper, filter, sortCrit, defaultSortCriteria, 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; + } + + @Override + public boolean isRowLimitingCapable() { + // TODO Auto-generated method stub + return true; + } + + @Override + public char getTailingEscapeChar() { + // TODO Auto-generated method stub + return defaultEscapeChar; + } + + @Override + public char getLeadingEscapeChar() { + // TODO Auto-generated method stub + return defaultEscapeChar; + } + +} 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 00000000000..8f8d7ee5955 --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgDialectProvider.java @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------- + 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 + * @since 3.5 + */ +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 00000000000..34b7c06172d --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgGeometryConverter.java @@ -0,0 +1,173 @@ +/*---------------------------------------------------------------------------- + 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 + * @since 3.5 + */ +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 00000000000..ec0841418a5 --- /dev/null +++ b/deegree-core/deegree-core-sqldialect/deegree-sqldialect-gpkg/src/main/java/org/deegree/sqldialect/gpkg/GpkgWhereBuilder.java @@ -0,0 +1,108 @@ +/*---------------------------------------------------------------------------- + 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.SortCriterion; +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; + +import java.util.List; + +/** + * {@link AbstractWhereBuilder} implementation for GeoPackage databases. + * + * @author Diego Migliavacca + * @since 3.5 + */ +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 defaultSortCriteria + * @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, List defaultSortCriteria, boolean allowPartialMappings) + throws FilterEvaluationException, UnmappableException { + super(dialect, mapper, filter, sortCrit, defaultSortCriteria); + 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 00000000000..8b41e7124d1 --- /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 4a14537702b..2c45baceb35 100644 --- a/deegree-core/deegree-core-sqldialect/pom.xml +++ b/deegree-core/deegree-core-sqldialect/pom.xml @@ -13,6 +13,7 @@ deegree-sqldialect-commons + deegree-sqldialect-gpkg deegree-sqldialect-postgis deegree-sqldialect-oracle deegree-sqldialect-mssql diff --git a/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml b/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml index 05e887affeb..7692afd86fe 100644 --- a/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml +++ b/deegree-datastores/deegree-featurestores/deegree-featurestore-sql/pom.xml @@ -53,6 +53,11 @@ ${project.version} test + + 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 00000000000..6ed1d33b5a9 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/pom.xml @@ -0,0 +1,52 @@ + + 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.5.0-SNAPSHOT + + + + + + org.jvnet.jaxb2.maven2 + maven-jaxb2-plugin + + + + + + + org.deegree + deegree-tilestore-commons + ${project.version} + + + org.deegree + deegree-core-db + ${project.version} + + + com.sun.media + jai-codec + + + com.sun.media + jai_imageio + + + 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 00000000000..9199483c503 --- /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 + * @since 3.5 + */ +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 00000000000..014de0746a2 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileDataLevel.java @@ -0,0 +1,90 @@ +//$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.List; +import java.util.Map; + +/** + * A GpkgTileDataLevel + * + * @author Diego Migliavacca + * @since 3.5 + */ + +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); + } + + @Override + public List getStyles() { + // TODO Auto-generated method stub + return null; + } + +} 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 00000000000..ee5b8d52882 --- /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 + * @since 3.5 + */ +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 00000000000..962974669b8 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreBuilder.java @@ -0,0 +1,165 @@ +/*---------------------------------------------------------------------------- + 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 GeoPackage tile stores. + * + * @author Diego Migliavacca + * @since 3.5 + */ +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 00000000000..2619a4e3fef --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreMetadata.java @@ -0,0 +1,67 @@ +/*---------------------------------------------------------------------------- + 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 + * @since 3.5 + */ +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 00000000000..fa08c1e41b4 --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/java/org/deegree/tile/persistence/gpkg/GpkgTileStoreProvider.java @@ -0,0 +1,78 @@ +//$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 + * @since 3.5 + */ + +public class GpkgTileStoreProvider extends TileStoreProvider { + + private static final URL SCHEMA = GpkgTileStoreProvider.class + .getResource("/META-INF/schemas/datasource/tile/gpkg/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/example.xml b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/example.xml new file mode 100644 index 00000000000..ecc6566a50c --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/example.xml @@ -0,0 +1,14 @@ + + + + + + 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/geopackage.xsd b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/geopackage.xsd new file mode 100644 index 00000000000..3e4abbeffed --- /dev/null +++ b/deegree-datastores/deegree-tilestores/deegree-tilestore-gpkg/src/main/resources/META-INF/schemas/datasource/tile/gpkg/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 00000000000..5c555428528 --- /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 f2c1a58e69d..aa111f83f5d 100644 --- a/deegree-datastores/deegree-tilestores/pom.xml +++ b/deegree-datastores/deegree-tilestores/pom.xml @@ -17,6 +17,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 294f9098261..6e5934b8e0e 100644 --- a/deegree-services/deegree-webservices/pom.xml +++ b/deegree-services/deegree-webservices/pom.xml @@ -256,6 +256,11 @@ deegree-tilestore-remotewmts ${project.version} + + org.deegree + deegree-tilestore-gpkg + ${project.version} + org.deegree deegree-connectionprovider-datasource 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 a8c54011ce4..421c2c1b0d9 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() throws IOException { diff --git a/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.db.datasource.DataSourceConnectionProviderProvider b/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.db.datasource.DataSourceConnectionProviderProvider index a9b696a1fa3..8a0f8f0ecbe 100644 --- a/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.db.datasource.DataSourceConnectionProviderProvider +++ b/deegree-services/deegree-webservices/src/main/resources/META-INF/console/resourceprovider/org.deegree.db.datasource.DataSourceConnectionProviderProvider @@ -5,7 +5,9 @@ example2_name=Oracle (minimal) example2_location=/META-INF/schemas/connectionprovider/datasource/example_dbcp_oracle.xml example3_name=MySQL (minimal) example3_location=/META-INF/schemas/connectionprovider/datasource/example_dbcp_mssql.xml -example4_name=JNDI -example4_location=/META-INF/schemas/connectionprovider/datasource/example_jndi.xml -example5_name=UCP -example5_location=/META-INF/schemas/connectionprovider/datasource/example_ucp.xml +example4_name=GeoPackage +example4_location=/META-INF/schemas/connectionprovider/datasource/example_dbcp_gpkg.xml +example5_name=JNDI +example5_location=/META-INF/schemas/connectionprovider/datasource/example_jndi.xml +example6_name=UCP +example6_location=/META-INF/schemas/connectionprovider/datasource/example_ucp.xml 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 00000000000..455ba37e71c --- /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/example.xml diff --git a/deegree-services/deegree-webservices/src/main/resources/log4j2.properties b/deegree-services/deegree-webservices/src/main/resources/log4j2.properties index 807d2c33e35..10e9ea92da2 100644 --- a/deegree-services/deegree-webservices/src/main/resources/log4j2.properties +++ b/deegree-services/deegree-webservices/src/main/resources/log4j2.properties @@ -31,7 +31,7 @@ appender.rolling.strategy.max = 10 loggers = org.deegree, org.reflections logger.org.deegree.name = org.deegree -logger.org.deegree.level = info +logger.org.deegree.level = trace logger.org.deegree.additivity = false logger.org.deegree.appenderRef.rolling.ref = RollingFile logger.org.deegree.appenderRef.stdout.ref = STDOUT 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 bcaf358f40b..c87da2e302e 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 @@ -21,6 +21,7 @@ + diff --git a/pom.xml b/pom.xml index beb809b7d6a..9f9fd0d9982 100644 --- a/pom.xml +++ b/pom.xml @@ -870,6 +870,12 @@ mssql-jdbc 10.2.2.jre11 + + + org.xerial + sqlite-jdbc + 3.40.0.0 + org.apache.xmlgraphics