diff --git a/api/src/main/resources/api.yaml b/api/src/main/resources/api.yaml index de194c504a868f530a33ebbeb7b6f3efec386176..afb2a75ae372edaaaad82edf012cc8f04f380240 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 4bb36de0aa56eede18dc0a653b8ec54c9fe10073..ccae30bf01a064c6a7f9118e9e2f8282c70ff818 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) {