diff --git a/scm-core/src/main/java/sonia/scm/HandlerEvent.java b/scm-core/src/main/java/sonia/scm/HandlerEvent.java index ca3f7a3b57..0bedf4be5b 100644 --- a/scm-core/src/main/java/sonia/scm/HandlerEvent.java +++ b/scm-core/src/main/java/sonia/scm/HandlerEvent.java @@ -41,12 +41,36 @@ package sonia.scm; public enum HandlerEvent { - /** The type of the event, if a new object is stored by a handler. */ + /** + * After a new object is stored by a handler. + */ CREATE, - /** The type of the event, if a object is modified by a handler. */ + /** + * After a object is modified by a handler. + */ MODIFY, - /** The type of the event, if a object is removed by a handler. */ - DELETE + /** + * After a object is removed by a handler. + */ + DELETE, + + /** + * Before a new object is stored by a handler. + * @since 1.16 + */ + BEFORE_CREATE, + + /** + * Before a object is modified by a handler. + * @since 1.16 + */ + BEFORE_MODIFY, + + /** + * Before a object is removed by a handler. + * @since 1.16 + */ + BEFORE_DELETE } 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 30a8803662..50e0fe90a9 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java +++ b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java @@ -144,6 +144,7 @@ public class DefaultGroupManager extends AbstractGroupManager } group.setCreationDate(System.currentTimeMillis()); + fireEvent(group, HandlerEvent.BEFORE_CREATE); groupDAO.add(group); fireEvent(group, HandlerEvent.CREATE); } @@ -172,6 +173,7 @@ public class DefaultGroupManager extends AbstractGroupManager if (groupDAO.contains(name)) { + fireEvent(group, HandlerEvent.BEFORE_DELETE); groupDAO.delete(group); fireEvent(group, HandlerEvent.DELETE); } @@ -223,6 +225,7 @@ public class DefaultGroupManager extends AbstractGroupManager if (groupDAO.contains(name)) { group.setLastModified(System.currentTimeMillis()); + fireEvent(group, HandlerEvent.BEFORE_MODIFY); groupDAO.modify(group); fireEvent(group, HandlerEvent.MODIFY); } 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 84793f6451..1d1351d402 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -46,25 +46,7 @@ import sonia.scm.ConfigurationException; import sonia.scm.HandlerEvent; import sonia.scm.SCMContextProvider; import sonia.scm.Type; - import sonia.scm.config.ScmConfiguration; -import sonia.scm.repository.AbstractRepositoryManager; -import sonia.scm.repository.BlameViewer; -import sonia.scm.repository.ChangesetViewer; -import sonia.scm.repository.DiffViewer; -import sonia.scm.repository.PermissionType; -import sonia.scm.repository.PermissionUtil; -import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryAllreadyExistExeption; -import sonia.scm.repository.RepositoryBrowser; -import sonia.scm.repository.RepositoryException; -import sonia.scm.repository.RepositoryHandler; -import sonia.scm.repository.RepositoryHandlerNotFoundException; -import sonia.scm.repository.RepositoryHook; -import sonia.scm.repository.RepositoryHookEvent; -import sonia.scm.repository.RepositoryListener; -import sonia.scm.repository.RepositoryNotFoundException; - import sonia.scm.security.ScmSecurityException; import sonia.scm.util.AssertUtil; import sonia.scm.util.CollectionAppender; @@ -194,6 +176,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager getHandler(repository).create(repository); } + fireEvent(repository, HandlerEvent.BEFORE_CREATE); repositoryDAO.add(repository); fireEvent(repository, HandlerEvent.CREATE); } @@ -243,6 +226,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager if (repositoryDAO.contains(repository)) { + fireEvent(repository, HandlerEvent.BEFORE_DELETE); getHandler(repository).delete(repository); repositoryDAO.delete(repository); } @@ -369,8 +353,9 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager if (notModifiedRepository != null) { assertIsOwner(notModifiedRepository); - getHandler(repository).modify(repository); + fireEvent(repository, HandlerEvent.BEFORE_MODIFY); repository.setLastModified(System.currentTimeMillis()); + getHandler(repository).modify(repository); repositoryDAO.modify(repository); } else 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 6851f67054..2b5a89357d 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java @@ -180,6 +180,7 @@ public class DefaultUserManager extends AbstractUserManager AssertUtil.assertIsValid(user); user.setCreationDate(System.currentTimeMillis()); + fireEvent(user, HandlerEvent.BEFORE_CREATE); userDAO.add(user); fireEvent(user, HandlerEvent.CREATE); } @@ -207,6 +208,7 @@ public class DefaultUserManager extends AbstractUserManager if (userDAO.contains(name)) { + fireEvent(user, HandlerEvent.BEFORE_DELETE); userDAO.delete(user); fireEvent(user, HandlerEvent.DELETE); } @@ -270,6 +272,7 @@ public class DefaultUserManager extends AbstractUserManager { AssertUtil.assertIsValid(user); user.setLastModified(System.currentTimeMillis()); + fireEvent(user, HandlerEvent.BEFORE_MODIFY); userDAO.modify(user); fireEvent(user, HandlerEvent.MODIFY); }