diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/LockManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/LockManager.java index d9cc0a41f..d3f7308af 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/LockManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/LockManager.java @@ -95,12 +95,15 @@ public class LockManager { LockCriteria criteria = new LockCriteria(); criteria.setTarget(UUID.fromString(targetId)); Long availableLocks = this.apiContext.getOperationsContext().getDatabaseRepository().getLockDao().getWithCriteria(criteria).count(); - if (availableLocks > 0) { + if (availableLocks == 1) { eu.eudat.data.entities.Lock lock = this.apiContext.getOperationsContext().getDatabaseRepository().getLockDao().getWithCriteria(criteria).getSingle(); if (!lock.getLockedBy().getId().equals(principal.getId())) { throw new Exception("Only the user who created that lock can delete it"); } this.apiContext.getOperationsContext().getDatabaseRepository().getLockDao().delete(lock); + } else if (availableLocks > 1) { + List locks = this.apiContext.getOperationsContext().getDatabaseRepository().getLockDao().getWithCriteria(criteria).toList(); + locks.stream().filter(lock -> lock.getLockedBy().getId().equals(principal.getId())).forEach(lock -> this.apiContext.getOperationsContext().getDatabaseRepository().getLockDao().delete(lock)); } }