From 585a2559ce6b47483b4ba9e9502fb3f365a6a9fe Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 27 Aug 2012 08:00:16 +0200 Subject: [PATCH] clear cache only on a post event --- .../src/main/java/sonia/scm/HandlerEvent.java | 54 ++++++++++++++++--- .../java/sonia/scm/security/ScmRealm.java | 29 ++++++---- 2 files changed, 66 insertions(+), 17 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/HandlerEvent.java b/scm-core/src/main/java/sonia/scm/HandlerEvent.java index 0bedf4be5b..a15522be33 100644 --- a/scm-core/src/main/java/sonia/scm/HandlerEvent.java +++ b/scm-core/src/main/java/sonia/scm/HandlerEvent.java @@ -44,33 +44,75 @@ public enum HandlerEvent /** * After a new object is stored by a handler. */ - CREATE, + CREATE(true), /** * After a object is modified by a handler. */ - MODIFY, + MODIFY(true), /** * After a object is removed by a handler. */ - DELETE, + DELETE(true), /** * Before a new object is stored by a handler. * @since 1.16 */ - BEFORE_CREATE, + BEFORE_CREATE(false), /** * Before a object is modified by a handler. * @since 1.16 */ - BEFORE_MODIFY, + BEFORE_MODIFY(false), /** * Before a object is removed by a handler. * @since 1.16 */ - BEFORE_DELETE + BEFORE_DELETE(false); + + /** + * Constructs ... + * + * + * @param post + */ + private HandlerEvent(boolean post) + { + this.post = post; + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Returns true if the event is fired after the action is occurred. + * + * + * @return true if the event is fired after the action is occurred + * @since 1.21 + */ + public boolean isPost() + { + return post; + } + + /** + * Returns true if the event is fired before the action is occurred. + * + * + * @return true if the event is fired before the action is occurred + * @since 1.21 + */ + public boolean isPre() + { + return !post; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private boolean post; } diff --git a/scm-webapp/src/main/java/sonia/scm/security/ScmRealm.java b/scm-webapp/src/main/java/sonia/scm/security/ScmRealm.java index 0fa474d5d4..769107ea86 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ScmRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ScmRealm.java @@ -158,13 +158,17 @@ public class ScmRealm extends AuthorizingRealm @Override public void onEvent(Repository repository, HandlerEvent event) { - if (logger.isDebugEnabled()) + if (event.isPost()) { - logger.debug("clear cache, because repository {} has changed", - repository.getName()); - } - cache.clear(); + if (logger.isDebugEnabled()) + { + logger.debug("clear cache, because repository {} has changed", + repository.getName()); + } + + cache.clear(); + } } /** @@ -177,14 +181,17 @@ public class ScmRealm extends AuthorizingRealm @Override public void onEvent(User user, HandlerEvent event) { - if (logger.isDebugEnabled()) + if (event.isPost()) { - logger.debug( - "clear cache of user {}, because user properties have changed", - user.getName()); - } + if (logger.isDebugEnabled()) + { + logger.debug( + "clear cache of user {}, because user properties have changed", + user.getName()); + } - cache.remove(user.getId()); + cache.remove(user.getId()); + } } /**