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

mil.nga.geopackage.dgiwg.DGIWGMetadata Maven / Gradle / Ivy

package mil.nga.geopackage.dgiwg;

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

import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;

import mil.nga.geopackage.GeoPackageCore;
import mil.nga.geopackage.GeoPackageException;
import mil.nga.geopackage.extension.metadata.Metadata;
import mil.nga.geopackage.extension.metadata.MetadataDao;
import mil.nga.geopackage.extension.metadata.MetadataExtension;
import mil.nga.geopackage.extension.metadata.MetadataScopeType;
import mil.nga.geopackage.extension.metadata.reference.MetadataReference;
import mil.nga.geopackage.extension.metadata.reference.MetadataReferenceDao;
import mil.nga.geopackage.extension.metadata.reference.ReferenceScopeType;

/**
 * DGIWG (Defence Geospatial Information Working Group) Metadata utilities
 * 
 * @author osbornb
 * @since 6.6.0
 */
public class DGIWGMetadata {

	/**
	 * Create a new metadata object with a series scope
	 * 
	 * @param uri
	 *            URI
	 * @param metadata
	 *            metadata
	 * @return metadata
	 */
	public static Metadata createSeriesMetadata(String uri, String metadata) {
		return createMetadata(MetadataScopeType.SERIES, uri, metadata);
	}

	/**
	 * Create a new metadata object with a dataset scope
	 * 
	 * @param uri
	 *            URI
	 * @param metadata
	 *            metadata
	 * @return metadata
	 */
	public static Metadata createDatasetMetadata(String uri, String metadata) {
		return createMetadata(MetadataScopeType.DATASET, uri, metadata);
	}

	/**
	 * Create a new metadata object
	 * 
	 * @param scope
	 *            metadata scope type
	 * @param uri
	 *            URI
	 * @param metadata
	 *            metadata
	 * @return metadata
	 */
	public static Metadata createMetadata(MetadataScopeType scope, String uri,
			String metadata) {

		Metadata md = new Metadata();
		md.setMetadataScope(scope);
		md.setStandardUri(uri);
		md.setMimeType(DGIWGConstants.METADATA_MIME_TYPE);
		md.setMetadata(metadata);

		return md;
	}

	/**
	 * Create a new metadata reference object with a GeoPackage scope
	 * 
	 * @return metadata reference
	 */
	public static MetadataReference createGeoPackageMetadataReference() {
		return createMetadataReference(ReferenceScopeType.GEOPACKAGE);
	}

	/**
	 * Create a new metadata reference object
	 * 
	 * @param scope
	 *            metadata reference scope type
	 * @return metadata reference
	 */
	public static MetadataReference createMetadataReference(
			ReferenceScopeType scope) {

		MetadataReference reference = new MetadataReference();
		reference.setReferenceScope(scope);

		return reference;
	}

	/**
	 * Query for GeoPackage DGIWG Metadata Foundation (DMF) metadata
	 * 
	 * @param geoPackage
	 *            GeoPackage
	 * @return metadata references
	 */
	public static List queryGeoPackageDMFMetadata(
			GeoPackageCore geoPackage) {
		return queryGeoPackageMetadata(geoPackage, DGIWGConstants.DMF_BASE_URI);
	}

	/**
	 * Query for GeoPackage NSG Metadata Foundation (NMF) NSG Application Schema
	 * (NAS) metadata
	 * 
	 * @param geoPackage
	 *            GeoPackage
	 * @return metadata references
	 */
	public static List queryGeoPackageNASMetadata(
			GeoPackageCore geoPackage) {
		return queryGeoPackageMetadata(geoPackage,
				DGIWGConstants.NMIS_BASE_URI);
	}

	/**
	 * Query for GeoPackage metadata
	 * 
	 * @param geoPackage
	 *            GeoPackage
	 * @param baseURI
	 *            base URI
	 * @return metadata references
	 */
	public static List queryGeoPackageMetadata(
			GeoPackageCore geoPackage, String baseURI) {

		List results = null;

		MetadataExtension metadataExtension = new MetadataExtension(geoPackage);

		if (metadataExtension.has()) {

			MetadataDao metadataDao = metadataExtension.getMetadataDao();
			MetadataReferenceDao referenceDao = metadataExtension
					.getMetadataReferenceDao();

			try {

				if (metadataDao.isTableExists()
						&& referenceDao.isTableExists()) {

					QueryBuilder metadataBuilder = metadataDao
							.queryBuilder();
					QueryBuilder referenceBuilder = referenceDao
							.queryBuilder();

					metadataBuilder.where().like(Metadata.COLUMN_STANDARD_URI,
							baseURI + "%");

					referenceBuilder.where().like(
							MetadataReference.COLUMN_REFERENCE_SCOPE,
							ReferenceScopeType.GEOPACKAGE.getValue());

					referenceBuilder.leftJoin(metadataBuilder);

					PreparedQuery preparedQuery = referenceBuilder
							.prepare();

					results = referenceDao.query(preparedQuery);

				}

			} catch (SQLException e) {
				throw new GeoPackageException("Failed to query for metadata",
						e);
			}

		}

		return results;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy