Implement delete in ManagerDaoAdapter

This commit is contained in:
René Pfeuffer
2018-07-12 10:30:33 +02:00
parent 42543f6a47
commit 9131764fbb
4 changed files with 41 additions and 88 deletions

View File

@@ -50,6 +50,17 @@ public class ManagerDaoAdapter<T extends ModelObject, E extends Exception> {
return newObject; return newObject;
} }
public void delete(T toDelete, Supplier<PermissionCheck> permissionCheck, AroundHandler<T, E> beforeDelete, AroundHandler<T, E> 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 @FunctionalInterface
public interface AroundHandler<T extends ModelObject, E extends Exception> { public interface AroundHandler<T extends ModelObject, E extends Exception> {
void handle(T notModified) throws E; void handle(T notModified) throws E;

View File

@@ -125,37 +125,15 @@ public class DefaultGroupManager extends AbstractGroupManager
); );
} }
/**
* Method description
*
*
* @param group
*
* @throws GroupException
* @throws IOException
*/
@Override @Override
public void delete(Group group) throws GroupException public void delete(Group group) throws GroupException {
{ logger.info("delete group {} of type {}", group.getName(), group.getType());
if (logger.isInfoEnabled()) managerDaoAdapter.delete(
{ group,
logger.info("delete group {} of type {}", group.getName(), () -> GroupPermissions.delete(group.getName()),
group.getType()); toDelete -> fireEvent(HandlerEventType.BEFORE_DELETE, toDelete),
} toDelete -> fireEvent(HandlerEventType.DELETE, toDelete)
);
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);
}
} }
/** /**

View File

@@ -158,38 +158,23 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
); );
} }
/**
* Method description
*
*
* @param repository
*
* @throws IOException
* @throws RepositoryException
*/
@Override @Override
public void delete(Repository repository) public void delete(Repository repository) throws RepositoryException {
throws RepositoryException { logger.info("delete repository {} of type {}", repository.getName(), repository.getType());
if (logger.isInfoEnabled()) { managerDaoAdapter.delete(
logger.info("delete repository {} of type {}", repository.getName(), repository,
repository.getType()); () -> RepositoryPermissions.delete(repository),
this::preDelete,
toDelete -> fireEvent(HandlerEventType.DELETE, toDelete)
);
} }
RepositoryPermissions.delete(repository).check(); private void preDelete(Repository toDelete) throws RepositoryException {
if (configuration.isEnableRepositoryArchive() && !toDelete.isArchived()) {
if (configuration.isEnableRepositoryArchive() && !repository.isArchived()) { throw new RepositoryIsNotArchivedException("Repository could not deleted, because it is not archived.");
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);
} }
fireEvent(HandlerEventType.BEFORE_DELETE, toDelete);
getHandler(toDelete).delete(toDelete);
} }
/** /**

View File

@@ -157,36 +157,15 @@ public class DefaultUserManager extends AbstractUserManager
); );
} }
/**
* Method description
*
*
* @param user
*
* @throws IOException
* @throws UserException
*/
@Override @Override
public void delete(User user) throws UserException public void delete(User user) throws UserException {
{
if (logger.isInfoEnabled())
{
logger.info("delete user {} of type {}", user.getName(), user.getType()); logger.info("delete user {} of type {}", user.getName(), user.getType());
} managerDaoAdapter.delete(
user,
String name = user.getName(); () -> UserPermissions.delete(user.getName()),
UserPermissions.delete(name).check(); toDelete -> fireEvent(HandlerEventType.BEFORE_DELETE, toDelete),
toDelete -> fireEvent(HandlerEventType.DELETE, toDelete)
if (userDAO.contains(name)) );
{
fireEvent(HandlerEventType.BEFORE_DELETE, user);
userDAO.delete(user);
fireEvent(HandlerEventType.DELETE, user);
}
else
{
throw new UserNotFoundException(user);
}
} }
/** /**