From 9912b0a97528d566ff69f0fe54bb1a89173f881f Mon Sep 17 00:00:00 2001 From: "i.nueske" <i.nueske@indiscale.com> Date: Wed, 9 Oct 2024 19:04:11 +0200 Subject: [PATCH] ENH: Add delete method and rename base deletion --- api/src/main/resources/api.yaml | 2 +- .../fdo/manager/service/fdo/FDOApiImpl.java | 31 +++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/api/src/main/resources/api.yaml b/api/src/main/resources/api.yaml index de194c5..afb2a75 100644 --- a/api/src/main/resources/api.yaml +++ b/api/src/main/resources/api.yaml @@ -248,7 +248,7 @@ paths: tags: - FDOs description: "Delete an FDO." - operationId: baseDelete + operationId: delete parameters: - $ref: '#/components/parameters/Prefix' - $ref: '#/components/parameters/Suffix' diff --git a/application/src/main/java/com/indiscale/fdo/manager/service/fdo/FDOApiImpl.java b/application/src/main/java/com/indiscale/fdo/manager/service/fdo/FDOApiImpl.java index 4bb36de..ccae30b 100644 --- a/application/src/main/java/com/indiscale/fdo/manager/service/fdo/FDOApiImpl.java +++ b/application/src/main/java/com/indiscale/fdo/manager/service/fdo/FDOApiImpl.java @@ -108,12 +108,39 @@ public class FDOApiImpl extends BaseController implements FdoApi { } @Override - public ResponseEntity<Void> baseDelete( + public ResponseEntity<Void> delete( String prefix, String suffix, Boolean purge, Boolean deleteMD) { if (purge) { return purgeFDO(prefix, suffix); } - throw new ResponseStatusException(HttpStatus.NOT_IMPLEMENTED); + return deleteFDO(prefix, suffix, deleteMD); + } + + public ResponseEntity<Void> deleteFDO(String prefix, String suffix, boolean deleteMD) { + try (Manager manager = getManager()) { + String pid = prefix + "/" + suffix; + DigitalObject fdo = manager.resolvePID(pid); + String repoId = manager.deleteFDO(pid, deleteMD); + if (repoId != null && !repoId.isEmpty()) { + RepositoryConnection repository = + manager.getRepositoryRegistry().createRepositoryConnection(repoId); + getLogger().deleteFDO(fdo, repository); + return ResponseEntity.noContent().build(); + } else { + throw new ResponseStatusException( + HttpStatus.INTERNAL_SERVER_ERROR, "Could not delete PID " + pid + " due to inability to connect to repository."); + } + } catch (PidUnresolvableException e) { + throw new ResponseStatusException( + HttpStatus.NOT_FOUND, "Not found. Could not resolve PID " + e.getPid()); + } catch (UnknownRepositoryException e) { + e.printStackTrace(); + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Not found. Repository unknown."); + } catch (UnsuccessfulOperationException e) { + e.printStackTrace(); + throw new ResponseStatusException( + HttpStatus.INTERNAL_SERVER_ERROR, "Deletion unsuccessful: " + e.getMessage()); + } } public ResponseEntity<Void> purgeFDO(String prefix, String suffix) { -- GitLab