/**
  * Create a GeoPackage metadata from the current cursor location
  *
  * @param cursor
  * @return
  */
 private GeoPackageMetadata createGeoPackageMetadata(Cursor cursor) {
   GeoPackageMetadata metadata = new GeoPackageMetadata();
   metadata.setId(cursor.getLong(0));
   metadata.setName(cursor.getString(1));
   metadata.setExternalPath(cursor.getString(2));
   return metadata;
 }
 /**
  * Rename the GeoPackage metadata to the new name
  *
  * @param metadata
  * @param newName
  * @return
  */
 public boolean rename(GeoPackageMetadata metadata, String newName) {
   boolean renamed = rename(metadata.getName(), newName);
   if (renamed) {
     metadata.setName(newName);
   }
   return renamed;
 }
  /**
   * Get GeoPackage metadata or create it if it does not exist
   *
   * @return
   */
  public GeoPackageMetadata getOrCreate(String geoPackage) {
    GeoPackageMetadata metadata = get(geoPackage);

    if (metadata == null) {
      metadata = new GeoPackageMetadata();
      metadata.setName(geoPackage);
      create(metadata);
    }

    return metadata;
  }
  /**
   * Delete the database
   *
   * @param database
   * @return
   */
  public boolean delete(String database) {

    GeoPackageMetadata metadata = get(database);
    if (metadata != null) {
      TableMetadataDataSource tableDs = new TableMetadataDataSource(db);
      tableDs.delete(metadata.getId());
    }

    String whereClause = GeoPackageMetadata.COLUMN_NAME + " = ?";
    String[] whereArgs = new String[] {database};
    int deleteCount = db.delete(GeoPackageMetadata.TABLE_NAME, whereClause, whereArgs);
    return deleteCount > 0;
  }
 /**
  * Create a new GeoPackage metadata
  *
  * @param metadata
  */
 public void create(GeoPackageMetadata metadata) {
   ContentValues values = new ContentValues();
   values.put(GeoPackageMetadata.COLUMN_NAME, metadata.getName());
   values.put(GeoPackageMetadata.COLUMN_EXTERNAL_PATH, metadata.getExternalPath());
   long insertId = db.insert(GeoPackageMetadata.TABLE_NAME, null, values);
   if (insertId == -1) {
     throw new GeoPackageException(
         "Failed to insert GeoPackage metadata. Name: "
             + metadata.getName()
             + ", External Path: "
             + metadata.getExternalPath());
   }
   metadata.setId(insertId);
 }
 /**
  * Delete the GeoPackage metadata
  *
  * @param metadata
  * @return
  */
 public boolean delete(GeoPackageMetadata metadata) {
   return delete(metadata.getName());
 }
 /**
  * Determine if the GeoPackage is external
  *
  * @param database
  * @return
  */
 public boolean isExternal(String database) {
   GeoPackageMetadata metadata = get(database);
   return get(database) != null && metadata.getExternalPath() != null;
 }