All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mil.nga.geopackage.extension.metadata.MetadataExtension Maven / Gradle / Ivy

package mil.nga.geopackage.extension.metadata;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import mil.nga.geopackage.GeoPackageConstants;
import mil.nga.geopackage.GeoPackageCore;
import mil.nga.geopackage.GeoPackageException;
import mil.nga.geopackage.db.GeoPackageCoreConnection;
import mil.nga.geopackage.extension.BaseExtension;
import mil.nga.geopackage.extension.ExtensionScopeType;
import mil.nga.geopackage.extension.Extensions;
import mil.nga.geopackage.extension.metadata.reference.MetadataReference;
import mil.nga.geopackage.extension.metadata.reference.MetadataReferenceDao;
import mil.nga.geopackage.property.GeoPackageProperties;
import mil.nga.geopackage.property.PropertyConstants;

/**
 * Metadata extension
 * 

* https://www.geopackage.org/spec/#extension_metadata * * @author osbornb * @since 1.1.8 */ public class MetadataExtension extends BaseExtension { /** * Name */ public static final String NAME = "metadata"; /** * Extension name */ public static final String EXTENSION_NAME = GeoPackageConstants.EXTENSION_AUTHOR + Extensions.EXTENSION_NAME_DIVIDER + NAME; /** * Extension definition URL */ public static final String DEFINITION = GeoPackageProperties .getProperty(PropertyConstants.EXTENSIONS, NAME); /** * Constructor * * @param geoPackage * GeoPackage * */ public MetadataExtension(GeoPackageCore geoPackage) { super(geoPackage); } /** * Get or create the extension * * @return extensions */ public List getOrCreate() { List extensions = new ArrayList<>(); extensions.add(getOrCreate(EXTENSION_NAME, Metadata.TABLE_NAME, null, DEFINITION, ExtensionScopeType.READ_WRITE)); extensions.add(getOrCreate(EXTENSION_NAME, MetadataReference.TABLE_NAME, null, DEFINITION, ExtensionScopeType.READ_WRITE)); return extensions; } /** * Determine if the GeoPackage has the extension * * @return true if has extension */ public boolean has() { boolean exists = has(EXTENSION_NAME); return exists; } /** * Remove all trace of the extension * * @since 3.2.0 */ public void removeExtension() { if (geoPackage.isTable(MetadataReference.TABLE_NAME)) { geoPackage.dropTable(MetadataReference.TABLE_NAME); } if (geoPackage.isTable(Metadata.TABLE_NAME)) { geoPackage.dropTable(Metadata.TABLE_NAME); } try { if (extensionsDao.isTableExists()) { extensionsDao.deleteByExtension(EXTENSION_NAME); } } catch (SQLException e) { throw new GeoPackageException( "Failed to delete Metadata extension. GeoPackage: " + geoPackage.getName(), e); } } /** * Get a Metadata DAO * * @return Metadata DAO * @since 4.0.0 */ public MetadataDao getMetadataDao() { return getMetadataDao(geoPackage); } /** * Get a Metadata DAO * * @param geoPackage * GeoPackage * @return Metadata DAO * @since 4.0.0 */ public static MetadataDao getMetadataDao(GeoPackageCore geoPackage) { return MetadataDao.create(geoPackage); } /** * Get a Metadata DAO * * @param db * database connection * @return Metadata DAO * @since 4.0.0 */ public static MetadataDao getMetadataDao(GeoPackageCoreConnection db) { return MetadataDao.create(db); } /** * Create the Metadata table if it does not already exist * * @return true if created * @since 4.0.0 */ public boolean createMetadataTable() { verifyWritable(); boolean created = false; MetadataDao dao = getMetadataDao(); try { if (!dao.isTableExists()) { created = geoPackage.getTableCreator().createMetadata() > 0; if (created) { // Create the metadata extension record getOrCreate(); } } } catch (SQLException e) { throw new GeoPackageException( "Failed to check if " + Metadata.class.getSimpleName() + " table exists and create it", e); } return created; } /** * Get a Metadata Reference DAO * * @return Metadata Reference DAO * @since 4.0.0 */ public MetadataReferenceDao getMetadataReferenceDao() { return getMetadataReferenceDao(geoPackage); } /** * Get a Metadata Reference DAO * * @param geoPackage * GeoPackage * @return Metadata Reference DAO * @since 4.0.0 */ public static MetadataReferenceDao getMetadataReferenceDao( GeoPackageCore geoPackage) { return MetadataReferenceDao.create(geoPackage); } /** * Get a Metadata Reference DAO * * @param db * database connection * @return Metadata Reference DAO * @since 4.0.0 */ public static MetadataReferenceDao getMetadataReferenceDao( GeoPackageCoreConnection db) { return MetadataReferenceDao.create(db); } /** * Create the Metadata Reference table if it does not already exist * * @return true if created * @since 4.0.0 */ public boolean createMetadataReferenceTable() { verifyWritable(); boolean created = false; MetadataReferenceDao dao = getMetadataReferenceDao(); try { if (!dao.isTableExists()) { created = geoPackage.getTableCreator() .createMetadataReference() > 0; } } catch (SQLException e) { throw new GeoPackageException("Failed to check if " + MetadataReference.class.getSimpleName() + " table exists and create it", e); } return created; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy