Skip to content

Commit

Permalink
abstract user dao by table, set user custom dao contents
Browse files Browse the repository at this point in the history
  • Loading branch information
bosborn committed Feb 13, 2024
1 parent d12b039 commit 6d511d8
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ Adheres to [Semantic Versioning](http://semver.org/).

* geopackage-core version 6.6.7
* sqlite-jdbc version 3.45.1.0
* Get abstract User DAO by table name
* Set User Custom DAO contents

## [6.6.4](https://github.com/ngageoint/geopackage-java/releases/tag/6.6.4) (11-29-2023)

Expand Down
11 changes: 11 additions & 0 deletions src/main/java/mil/nga/geopackage/GeoPackage.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import mil.nga.geopackage.tiles.matrixset.TileMatrixSet;
import mil.nga.geopackage.tiles.user.TileDao;
import mil.nga.geopackage.tiles.user.TileTable;
import mil.nga.geopackage.user.UserDao;
import mil.nga.geopackage.user.custom.UserCustomDao;
import mil.nga.geopackage.user.custom.UserCustomTable;

Expand Down Expand Up @@ -146,6 +147,16 @@ public interface GeoPackage extends GeoPackageCore {
*/
public UserCustomDao getUserCustomDao(UserCustomTable table);

/**
* Get a User DAO from a table
*
* @param tableName
* table name
* @return user dao
* @since 6.6.5
*/
public UserDao<?, ?, ?, ?> getUserDao(String tableName);

/**
* Perform a query on the database
*
Expand Down
50 changes: 50 additions & 0 deletions src/main/java/mil/nga/geopackage/GeoPackageImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import mil.nga.geopackage.tiles.user.TileDao;
import mil.nga.geopackage.tiles.user.TileTable;
import mil.nga.geopackage.tiles.user.TileTableReader;
import mil.nga.geopackage.user.UserDao;
import mil.nga.geopackage.user.custom.UserCustomDao;
import mil.nga.geopackage.user.custom.UserCustomTable;
import mil.nga.geopackage.user.custom.UserCustomTableReader;
Expand Down Expand Up @@ -417,9 +418,58 @@ public UserCustomDao getUserCustomDao(String tableName) {
*/
@Override
public UserCustomDao getUserCustomDao(UserCustomTable table) {

if (table.getContents() == null) {
ContentsDao contentsDao = getContentsDao();
Contents contents = null;
try {
contents = contentsDao.queryForId(table.getTableName());
} catch (SQLException e) {
throw new GeoPackageException(
"Failed to retrieve " + Contents.class.getSimpleName()
+ " for table name: " + table.getTableName(),
e);
}
table.setContents(contents);
}
return new UserCustomDao(getName(), database, table);
}

/**
* {@inheritDoc}
*/
@Override
public UserDao<?, ?, ?, ?> getUserDao(String tableName) {

UserDao<?, ?, ?, ?> dao = null;

if (!isContentsTable(tableName)) {
throw new GeoPackageException(
"No contents for user table: " + tableName);
}
ContentsDataType dataType = getTableCoreDataType(tableName);
if (dataType != null) {
switch (dataType) {
case ATTRIBUTES:
dao = getAttributesDao(tableName);
break;
case FEATURES:
dao = getFeatureDao(tableName);
break;
case TILES:
dao = getTileDao(tableName);
break;
default:
throw new GeoPackageException("Unsupported data type: "
+ dataType + ", table: " + tableName);
}
} else {
dao = getUserCustomDao(tableName);
}

return dao;
}

/**
* {@inheritDoc}
*/
Expand Down
13 changes: 13 additions & 0 deletions src/test/java/mil/nga/geopackage/GeoPackageCreateTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,17 @@ public void testTableTypes() throws SQLException {

}

/**
* Test user daos
*
* @throws SQLException
* upon error
*/
@Test
public void testUserDao() throws SQLException {

GeoPackageTestUtils.testUserDao(geoPackage);

}

}
13 changes: 13 additions & 0 deletions src/test/java/mil/nga/geopackage/GeoPackageImportTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,17 @@ public void testTableTypes() throws SQLException {

}

/**
* Test user daos
*
* @throws SQLException
* upon error
*/
@Test
public void testUserDao() throws SQLException {

GeoPackageTestUtils.testUserDao(geoPackage);

}

}
54 changes: 54 additions & 0 deletions src/test/java/mil/nga/geopackage/GeoPackageTestUtils.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package mil.nga.geopackage;

import static org.junit.Assert.fail;

import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
Expand All @@ -10,11 +12,13 @@
import java.util.Set;

import junit.framework.TestCase;
import mil.nga.geopackage.attributes.AttributesDao;
import mil.nga.geopackage.contents.Contents;
import mil.nga.geopackage.contents.ContentsDao;
import mil.nga.geopackage.contents.ContentsDataType;
import mil.nga.geopackage.db.GeoPackageDataType;
import mil.nga.geopackage.db.TableColumnKey;
import mil.nga.geopackage.db.table.TableInfo;
import mil.nga.geopackage.extension.coverage.CoverageData;
import mil.nga.geopackage.features.columns.GeometryColumns;
import mil.nga.geopackage.features.columns.GeometryColumnsDao;
Expand All @@ -29,6 +33,8 @@
import mil.nga.geopackage.tiles.matrixset.TileMatrixSet;
import mil.nga.geopackage.tiles.matrixset.TileMatrixSetDao;
import mil.nga.geopackage.tiles.user.TileDao;
import mil.nga.geopackage.user.UserDao;
import mil.nga.geopackage.user.custom.UserCustomDao;
import mil.nga.proj.Projection;
import mil.nga.proj.ProjectionConstants;
import mil.nga.proj.ProjectionFactory;
Expand Down Expand Up @@ -723,4 +729,52 @@ public static void testTableTypes(GeoPackage geoPackage)

}

/**
* Test user daos
*
* @param geoPackage
* GeoPackage
* @throws SQLException
* upon error
*/
public static void testUserDao(GeoPackage geoPackage) throws SQLException {

List<String> tables = geoPackage.getTables();
for (String table : tables) {
UserDao<?, ?, ?, ?> dao = geoPackage.getUserDao(table);
TestCase.assertNotNull(dao);
ContentsDataType dataType = geoPackage.getTableCoreDataType(table);
TableInfo tableInfo = TableInfo.info(geoPackage.getConnection(),
table);
TestCase.assertEquals(tableInfo.numColumns(), dao.columnCount());
Contents contents = dao.getContents();
TestCase.assertNotNull(contents);
if (dataType == null) {
TestCase.assertTrue(dao instanceof UserCustomDao);
TestCase.assertNotNull(contents.getDataTypeName());
} else {
switch (dataType) {
case ATTRIBUTES:
TestCase.assertTrue(dao instanceof AttributesDao);
TestCase.assertEquals(ContentsDataType.ATTRIBUTES,
contents.getDataType());
break;
case FEATURES:
TestCase.assertTrue(dao instanceof FeatureDao);
TestCase.assertEquals(ContentsDataType.FEATURES,
contents.getDataType());
break;
case TILES:
TestCase.assertTrue(dao instanceof TileDao);
TestCase.assertEquals(ContentsDataType.TILES,
contents.getDataType());
break;
default:
fail("Unsupported data type: " + dataType);
}
}
}

}

}

0 comments on commit 6d511d8

Please sign in to comment.