diff --git a/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java b/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java index aa27425283..b94ce934f6 100644 --- a/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java @@ -50,6 +50,17 @@ public class ManagerDaoAdapter { return newObject; } + public void delete(T toDelete, Supplier permissionCheck, AroundHandler beforeDelete, AroundHandler afterDelete) throws E { + permissionCheck.get().check(); + if (dao.contains(toDelete)) { + beforeDelete.handle(toDelete); + dao.delete(toDelete); + afterDelete.handle(toDelete); + } else { + throw notFoundException.apply(toDelete); + } + } + @FunctionalInterface public interface AroundHandler { void handle(T notModified) throws E; diff --git a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java index b083f9adfe..4f39fd3196 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java +++ b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java @@ -125,37 +125,15 @@ public class DefaultGroupManager extends AbstractGroupManager ); } - /** - * Method description - * - * - * @param group - * - * @throws GroupException - * @throws IOException - */ @Override - public void delete(Group group) throws GroupException - { - if (logger.isInfoEnabled()) - { - logger.info("delete group {} of type {}", group.getName(), - group.getType()); - } - - String name = group.getName(); - GroupPermissions.delete().check(name); - - if (groupDAO.contains(name)) - { - fireEvent(HandlerEventType.BEFORE_DELETE, group); - groupDAO.delete(group); - fireEvent(HandlerEventType.DELETE, group); - } - else - { - throw new GroupNotFoundException(group); - } + public void delete(Group group) throws GroupException { + logger.info("delete group {} of type {}", group.getName(), group.getType()); + managerDaoAdapter.delete( + group, + () -> GroupPermissions.delete(group.getName()), + toDelete -> fireEvent(HandlerEventType.BEFORE_DELETE, toDelete), + toDelete -> fireEvent(HandlerEventType.DELETE, toDelete) + ); } /** diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index cfa21b1adc..7a078ddfa5 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -158,38 +158,23 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { ); } - /** - * Method description - * - * - * @param repository - * - * @throws IOException - * @throws RepositoryException - */ @Override - public void delete(Repository repository) - throws RepositoryException { - if (logger.isInfoEnabled()) { - logger.info("delete repository {} of type {}", repository.getName(), - repository.getType()); - } + public void delete(Repository repository) throws RepositoryException { + logger.info("delete repository {} of type {}", repository.getName(), repository.getType()); + managerDaoAdapter.delete( + repository, + () -> RepositoryPermissions.delete(repository), + this::preDelete, + toDelete -> fireEvent(HandlerEventType.DELETE, toDelete) + ); + } - RepositoryPermissions.delete(repository).check(); - - if (configuration.isEnableRepositoryArchive() && !repository.isArchived()) { - throw new RepositoryIsNotArchivedException( - "Repository could not deleted, because it is not archived."); - } - - if (repositoryDAO.contains(repository)) { - fireEvent(HandlerEventType.BEFORE_DELETE, repository); - getHandler(repository).delete(repository); - repositoryDAO.delete(repository); - fireEvent(HandlerEventType.DELETE, repository); - } else { - throw new RepositoryNotFoundException(repository); + private void preDelete(Repository toDelete) throws RepositoryException { + if (configuration.isEnableRepositoryArchive() && !toDelete.isArchived()) { + throw new RepositoryIsNotArchivedException("Repository could not deleted, because it is not archived."); } + fireEvent(HandlerEventType.BEFORE_DELETE, toDelete); + getHandler(toDelete).delete(toDelete); } /** diff --git a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java index 81e3918ccb..c59ec40d4f 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java @@ -157,36 +157,15 @@ public class DefaultUserManager extends AbstractUserManager ); } - /** - * Method description - * - * - * @param user - * - * @throws IOException - * @throws UserException - */ @Override - public void delete(User user) throws UserException - { - if (logger.isInfoEnabled()) - { - logger.info("delete user {} of type {}", user.getName(), user.getType()); - } - - String name = user.getName(); - UserPermissions.delete(name).check(); - - if (userDAO.contains(name)) - { - fireEvent(HandlerEventType.BEFORE_DELETE, user); - userDAO.delete(user); - fireEvent(HandlerEventType.DELETE, user); - } - else - { - throw new UserNotFoundException(user); - } + public void delete(User user) throws UserException { + logger.info("delete user {} of type {}", user.getName(), user.getType()); + managerDaoAdapter.delete( + user, + () -> UserPermissions.delete(user.getName()), + toDelete -> fireEvent(HandlerEventType.BEFORE_DELETE, toDelete), + toDelete -> fireEvent(HandlerEventType.DELETE, toDelete) + ); } /**