This is an automated email from the ASF dual-hosted git repository. bchapuis pushed a commit to branch calcite-framework in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit fa97d3cb045bfa9d3b16d2d13f9e484b56a43220 Author: Bertil Chapuis <[email protected]> AuthorDate: Sat Jan 18 14:09:51 2025 +0100 Improve GeoPackage store --- .../baremaps/geopackage/GeoPackageDataStore.java | 22 +++++++++------------- .../baremaps/geopackage/GeoPackageDataTable.java | 20 ++++++++++++++++---- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java index 74290917a..71ddb3fb2 100644 --- a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java +++ b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataStore.java @@ -29,9 +29,9 @@ import org.apache.baremaps.store.DataTable; /** * A {@link DataStore} corresponding to a GeoPackage file. */ -public class GeoPackageDataStore implements DataStore, AutoCloseable { +public class GeoPackageDataStore implements DataStore { - private final GeoPackage geoPackage; + private final Path file; /** * Constructs a {@link GeoPackageDataStore} from a GeoPackage file. @@ -39,15 +39,7 @@ public class GeoPackageDataStore implements DataStore, AutoCloseable { * @param file the path to the GeoPackage file */ public GeoPackageDataStore(Path file) { - this.geoPackage = GeoPackageManager.open(file.toFile()); - } - - /** - * {@inheritDoc} - */ - @Override - public void close() throws Exception { - geoPackage.close(); + this.file = file; } /** @@ -55,7 +47,11 @@ public class GeoPackageDataStore implements DataStore, AutoCloseable { */ @Override public List<String> list() throws DataStoreException { - return geoPackage.getFeatureTables(); + try (GeoPackage geoPackage = GeoPackageManager.open(file.toFile())) { + return geoPackage.getFeatureTables(); + } catch (Exception e) { + throw new DataStoreException(e); + } } /** @@ -63,7 +59,7 @@ public class GeoPackageDataStore implements DataStore, AutoCloseable { */ @Override public DataTable get(String name) throws DataStoreException { - return new GeoPackageDataTable(geoPackage.getFeatureDao(name)); + return new GeoPackageDataTable(file, name); } /** diff --git a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java index 8ea223665..59e91c180 100644 --- a/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java +++ b/baremaps-geopackage/src/main/java/org/apache/baremaps/geopackage/GeoPackageDataTable.java @@ -18,7 +18,10 @@ package org.apache.baremaps.geopackage; +import java.nio.file.Path; import java.util.*; +import mil.nga.geopackage.GeoPackage; +import mil.nga.geopackage.GeoPackageManager; import mil.nga.geopackage.features.user.FeatureColumn; import mil.nga.geopackage.features.user.FeatureDao; import mil.nga.geopackage.features.user.FeatureResultSet; @@ -33,6 +36,12 @@ import org.locationtech.jts.geom.*; */ public class GeoPackageDataTable implements DataTable { + private final Path file; + + private final String name; + + private final GeoPackage geoPackage; + private final FeatureDao featureDao; private final DataSchema schema; @@ -42,11 +51,14 @@ public class GeoPackageDataTable implements DataTable { /** * Constructs a {@link DataTable} from a feature DAO. * - * @param featureDao the feature DAO + * @param file the path to the GeoPackage file + * @param name the name of the data table */ - public GeoPackageDataTable(FeatureDao featureDao) { - this.featureDao = featureDao; - var name = featureDao.getTableName(); + public GeoPackageDataTable(Path file, String name) { + this.file = file; + this.name = name; + this.geoPackage = GeoPackageManager.open(file.toFile()); + this.featureDao = geoPackage.getFeatureDao(name); var columns = new ArrayList<DataColumn>(); for (FeatureColumn column : featureDao.getColumns()) { var propertyName = column.getName();
