From 465d1eb01bd50ed9027805a6d75fdcbeba64af9e Mon Sep 17 00:00:00 2001 From: Brian Osborn Date: Mon, 12 Feb 2024 15:00:11 -0700 Subject: [PATCH] ignored internal databases support (including ue3.db) --- CHANGELOG.md | 1 + .../mil/nga/geopackage/GeoPackageManager.java | 33 +++++++++++++++ .../nga/geopackage/GeoPackageManagerImpl.java | 42 ++++++++++++++++++- .../src/main/res/values/strings.xml | 4 ++ 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fec0e9e2..d438a3d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ Adheres to [Semantic Versioning](http://semver.org/). ## 6.7.4 (TBD) * geopackage-core version 6.6.7 +* Ignored internal databases support for non GeoPackages (preconfigured to ignore ue3.db for Google Maps) ## [6.7.3](https://github.com/ngageoint/geopackage-android/releases/tag/6.7.3) (11-30-2023) diff --git a/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManager.java b/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManager.java index 839aaf1b..1f0b2c58 100644 --- a/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManager.java +++ b/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManager.java @@ -877,6 +877,39 @@ public boolean importGeoPackage(String name, URL url, boolean override, */ public void setSqliteWriteAheadLogging(boolean enabled); + /** + * Get the ignored internal databases + * + * @return databases + * @since 6.7.4 + */ + public Set getIgnoredInternals(); + + /** + * Is the database an ignored internal database by name + * + * @param database database name + * @return true if ignored + * @since 6.7.4 + */ + public boolean isIgnoredInternal(String database); + + /** + * Ignore an internal database by name + * + * @param database database name + * @since 6.7.4 + */ + public void ignoreInternal(String database); + + /** + * Do not ignore an internal database by name + * + * @param database database name + * @since 6.7.4 + */ + public void includeInternal(String database); + /** * Validate the database header and integrity. * diff --git a/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManagerImpl.java b/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManagerImpl.java index ac8bedd5..6503541d 100644 --- a/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManagerImpl.java +++ b/geopackage-sdk/src/main/java/mil/nga/geopackage/GeoPackageManagerImpl.java @@ -26,6 +26,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -82,6 +83,11 @@ public class GeoPackageManagerImpl implements GeoPackageManager { */ private boolean sqliteWriteAheadLogging = false; + /** + * Ignore internal database names + */ + private Set ignoredInternals = new HashSet<>(); + /** * Constructor * @@ -97,6 +103,11 @@ protected GeoPackageManagerImpl(Context context) { openHeaderValidation = resources.getBoolean(R.bool.manager_validation_open_header); openIntegrityValidation = resources.getBoolean(R.bool.manager_validation_open_integrity); sqliteWriteAheadLogging = resources.getBoolean(R.bool.sqlite_write_ahead_logging); + + ignoreInternal(GeoPackageMetadataDb.DATABASE_NAME); + for (String database: resources.getStringArray(R.array.geopackage_ignored_internals)) { + ignoreInternal(database); + } } } @@ -1245,6 +1256,34 @@ public void setSqliteWriteAheadLogging(boolean enabled) { this.sqliteWriteAheadLogging = enabled; } + /** + * {@inheritDoc} + */ + public Set getIgnoredInternals(){ + return Collections.unmodifiableSet(ignoredInternals); + } + + /** + * {@inheritDoc} + */ + public boolean isIgnoredInternal(String database){ + return ignoredInternals.contains(database.toLowerCase()); + } + + /** + * {@inheritDoc} + */ + public void ignoreInternal(String database){ + ignoredInternals.add(database.toLowerCase()); + } + + /** + * {@inheritDoc} + */ + public void includeInternal(String database){ + ignoredInternals.remove(database.toLowerCase()); + } + /** * {@inheritDoc} */ @@ -1544,8 +1583,7 @@ private void addInternalDatabases(Collection databases) { String[] databaseArray = getRequiredContext().databaseList(); for (String database : databaseArray) { if (!isTemporary(database) - && !database - .equalsIgnoreCase(GeoPackageMetadataDb.DATABASE_NAME)) { + && !isIgnoredInternal(database)) { databases.add(database); } } diff --git a/geopackage-sdk/src/main/res/values/strings.xml b/geopackage-sdk/src/main/res/values/strings.xml index 7c7c4251..2fc53c2b 100644 --- a/geopackage-sdk/src/main/res/values/strings.xml +++ b/geopackage-sdk/src/main/res/values/strings.xml @@ -6,6 +6,10 @@ -wal -shm + + ue3.db + + \\{z\\} \\{x\\} \\{y\\}