diff --git a/modules/reconciler/src/main/kotlin/org/veupathdb/vdi/lib/reconciler/AppDBTarget.kt b/modules/reconciler/src/main/kotlin/org/veupathdb/vdi/lib/reconciler/AppDBTarget.kt index 5836800e..75d8f969 100644 --- a/modules/reconciler/src/main/kotlin/org/veupathdb/vdi/lib/reconciler/AppDBTarget.kt +++ b/modules/reconciler/src/main/kotlin/org/veupathdb/vdi/lib/reconciler/AppDBTarget.kt @@ -6,35 +6,48 @@ import org.veupathdb.vdi.lib.common.model.VDIReconcilerTargetRecord import org.veupathdb.vdi.lib.common.util.CloseableIterator import org.veupathdb.vdi.lib.db.app.AppDB import org.veupathdb.vdi.lib.db.app.withTransaction +import org.veupathdb.vdi.lib.handler.client.response.uni.UninstallBadRequestResponse +import org.veupathdb.vdi.lib.handler.client.response.uni.UninstallUnexpectedErrorResponse import org.veupathdb.vdi.lib.handler.mapping.PluginHandlers import org.veupathdb.vdi.lib.reconciler.exception.UnsupportedTypeException class AppDBTarget( - override val name: String, - private val projectID: String + override val name: String, + private val projectID: String ) : ReconcilerTarget { - private val appDB = AppDB() + private val appDB = AppDB() - override val type = ReconcilerTargetType.Install + override val type = ReconcilerTargetType.Install - override fun streamSortedSyncControlRecords(): CloseableIterator { - return appDB.accessor(projectID)!!.streamAllSyncControlRecords() - } + override fun streamSortedSyncControlRecords(): CloseableIterator { + return appDB.accessor(projectID)!!.streamAllSyncControlRecords() + } - override fun deleteDataset(datasetType: VDIDatasetType, datasetID: DatasetID) { - if (!PluginHandlers.contains(datasetType.name, datasetType.version)) { - throw UnsupportedTypeException("Unable to delete unknown dataset type $datasetType from target database " + - "for project $projectID") - } - PluginHandlers[datasetType.name, datasetType.version]!!.client.postUninstall(datasetID, projectID) - appDB.withTransaction(projectID) { - it.deleteDatasetVisibilities(datasetID) - it.deleteDatasetProjectLinks(datasetID) - it.deleteSyncControl(datasetID) - it.deleteInstallMessages(datasetID) - it.deleteDatasetMeta(datasetID) - it.deleteDataset(datasetID) - } + override fun deleteDataset(datasetType: VDIDatasetType, datasetID: DatasetID) { + if (!PluginHandlers.contains(datasetType.name, datasetType.version)) { + throw UnsupportedTypeException( + "Unable to delete unknown dataset type $datasetType from target database " + + "for project $projectID" + ) } + + val res = PluginHandlers[datasetType.name, datasetType.version]!!.client.postUninstall(datasetID, projectID) + + if (!res.isSuccessResponse) + when (res) { + is UninstallBadRequestResponse -> throw Exception("Failed to uninstall dataset $datasetID from project $projectID: ${res.message}") + is UninstallUnexpectedErrorResponse -> throw Exception("Failed to uninstall dataset $datasetID from project $projectID: ${res.message}") + else -> throw Exception("Failed to uninstall dataset $datasetID from project $projectID") + } + + appDB.withTransaction(projectID) { + it.deleteDatasetVisibilities(datasetID) + it.deleteDatasetProjectLinks(datasetID) + it.deleteSyncControl(datasetID) + it.deleteInstallMessages(datasetID) + it.deleteDatasetMeta(datasetID) + it.deleteDataset(datasetID) + } + } } \ No newline at end of file