improve modification handler events by sending old and new items to eventbus

This commit is contained in:
Sebastian Sdorra
2014-01-11 13:45:23 +01:00
parent 23d2c1f27c
commit c3100f420c
17 changed files with 361 additions and 252 deletions

View File

@@ -43,7 +43,7 @@ import com.google.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.HandlerEvent;
import sonia.scm.HandlerEventType;
import sonia.scm.SCMContextProvider;
import sonia.scm.TransformFilter;
import sonia.scm.search.SearchRequest;
@@ -138,9 +138,9 @@ public class DefaultGroupManager extends AbstractGroupManager
removeDuplicateMembers(group);
group.setCreationDate(System.currentTimeMillis());
fireEvent(group, HandlerEvent.BEFORE_CREATE);
fireEvent(HandlerEventType.BEFORE_CREATE, group);
groupDAO.add(group);
fireEvent(group, HandlerEvent.CREATE);
fireEvent(HandlerEventType.CREATE, group);
}
/**
@@ -167,9 +167,9 @@ public class DefaultGroupManager extends AbstractGroupManager
if (groupDAO.contains(name))
{
fireEvent(group, HandlerEvent.BEFORE_DELETE);
fireEvent(HandlerEventType.BEFORE_DELETE, group);
groupDAO.delete(group);
fireEvent(group, HandlerEvent.DELETE);
fireEvent(HandlerEventType.DELETE, group);
}
else
{
@@ -184,9 +184,7 @@ public class DefaultGroupManager extends AbstractGroupManager
* @param context
*/
@Override
public void init(SCMContextProvider context)
{
}
public void init(SCMContextProvider context) {}
/**
* Method description
@@ -210,13 +208,15 @@ public class DefaultGroupManager extends AbstractGroupManager
String name = group.getName();
if (groupDAO.contains(name))
Group oldGroup = groupDAO.get(name);
if (oldGroup != null)
{
removeDuplicateMembers(group);
group.setLastModified(System.currentTimeMillis());
fireEvent(group, HandlerEvent.BEFORE_MODIFY);
fireEvent(HandlerEventType.BEFORE_MODIFY, group, oldGroup);
groupDAO.modify(group);
fireEvent(group, HandlerEvent.MODIFY);
fireEvent(HandlerEventType.MODIFY, group, oldGroup);
}
else
{

View File

@@ -50,7 +50,7 @@ import org.slf4j.LoggerFactory;
import sonia.scm.ArgumentIsInvalidException;
import sonia.scm.ConfigurationException;
import sonia.scm.HandlerEvent;
import sonia.scm.HandlerEventType;
import sonia.scm.SCMContextProvider;
import sonia.scm.Type;
import sonia.scm.config.ScmConfiguration;
@@ -105,7 +105,6 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
* @param keyGenerator
* @param repositoryDAO
* @param handlerSet
* @param preProcessorUtil
*/
@Inject
public DefaultRepositoryManager(ScmConfiguration configuration,
@@ -187,9 +186,9 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
getHandler(repository).create(repository);
}
fireEvent(repository, HandlerEvent.BEFORE_CREATE);
fireEvent(HandlerEventType.BEFORE_CREATE, repository);
repositoryDAO.add(repository);
fireEvent(repository, HandlerEvent.CREATE);
fireEvent(HandlerEventType.CREATE, repository);
}
/**
@@ -237,19 +236,18 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
if (repositoryDAO.contains(repository))
{
fireEvent(repository, HandlerEvent.BEFORE_DELETE);
fireEvent(HandlerEventType.BEFORE_DELETE, repository);
getHandler(repository).delete(repository);
repositoryDAO.delete(repository);
fireEvent(HandlerEventType.DELETE, repository);
}
else
{
throw new RepositoryNotFoundException(
"repository ".concat(repository.getName()).concat(" not found"));
}
fireEvent(repository, HandlerEvent.DELETE);
}
/**
* Method description
*
@@ -273,9 +271,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
* @param context
*/
@Override
public void init(SCMContextProvider context)
{
}
public void init(SCMContextProvider context) {}
/**
* Method description
@@ -298,24 +294,23 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
AssertUtil.assertIsValid(repository);
Repository notModifiedRepository = repositoryDAO.get(repository.getType(),
repository.getName());
Repository oldRepository = repositoryDAO.get(repository.getType(),
repository.getName());
if (notModifiedRepository != null)
if (oldRepository != null)
{
assertIsOwner(notModifiedRepository);
fireEvent(repository, HandlerEvent.BEFORE_MODIFY);
assertIsOwner(oldRepository);
fireEvent(HandlerEventType.BEFORE_MODIFY, repository, oldRepository);
repository.setLastModified(System.currentTimeMillis());
getHandler(repository).modify(repository);
repositoryDAO.modify(repository);
fireEvent(HandlerEventType.MODIFY, repository, oldRepository);
}
else
{
throw new RepositoryNotFoundException(
"repository ".concat(repository.getName()).concat(" not found"));
}
fireEvent(repository, HandlerEvent.MODIFY);
}
/**
@@ -511,7 +506,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager
return validTypes;
}
/**
* Method description
*

View File

@@ -48,7 +48,7 @@ import org.apache.shiro.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.HandlerEvent;
import sonia.scm.HandlerEventType;
import sonia.scm.event.ScmEventBus;
import sonia.scm.group.GroupEvent;
import sonia.scm.store.ConfigurationEntryStore;
@@ -132,7 +132,7 @@ public class DefaultSecuritySystem implements SecuritySystem
//J-
ScmEventBus.getInstance().post(
new StoredAssignedPermissionEvent(HandlerEvent.CREATE, sap)
new StoredAssignedPermissionEvent(HandlerEventType.CREATE, sap)
);
//J+
@@ -152,7 +152,7 @@ public class DefaultSecuritySystem implements SecuritySystem
store.remove(permission.getId());
//J-
ScmEventBus.getInstance().post(
new StoredAssignedPermissionEvent(HandlerEvent.CREATE, permission)
new StoredAssignedPermissionEvent(HandlerEventType.CREATE, permission)
);
//J+
}
@@ -185,7 +185,7 @@ public class DefaultSecuritySystem implements SecuritySystem
@Subscribe
public void handleEvent(final UserEvent event)
{
if (event.getEventType() == HandlerEvent.DELETE)
if (event.getEventType() == HandlerEventType.DELETE)
{
deletePermissions(new Predicate<AssignedPermission>()
{
@@ -209,7 +209,7 @@ public class DefaultSecuritySystem implements SecuritySystem
@Subscribe
public void handleEvent(final GroupEvent event)
{
if (event.getEventType() == HandlerEvent.DELETE)
if (event.getEventType() == HandlerEventType.DELETE)
{
deletePermissions(new Predicate<AssignedPermission>()
{
@@ -243,7 +243,7 @@ public class DefaultSecuritySystem implements SecuritySystem
//J-
ScmEventBus.getInstance().post(
new StoredAssignedPermissionEvent(HandlerEvent.CREATE, permission)
new StoredAssignedPermissionEvent(HandlerEventType.CREATE, permission)
);
//J+
}

View File

@@ -58,7 +58,7 @@ import org.apache.shiro.subject.SimplePrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.HandlerEvent;
import sonia.scm.HandlerEventType;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.group.Group;
import sonia.scm.group.GroupManager;
@@ -121,9 +121,8 @@ public class ScmRealm extends AuthorizingRealm
*/
@Inject
public ScmRealm(ScmConfiguration configuration,
LoginAttemptHandler loginAttemptHandler,
AuthorizationCollector collector,UserManager userManager,
GroupManager groupManager, UserDAO userDAO,
LoginAttemptHandler loginAttemptHandler, AuthorizationCollector collector,
UserManager userManager, GroupManager groupManager, UserDAO userDAO,
AuthenticationManager authenticator, RepositoryManager manager,
Provider<HttpServletRequest> requestProvider,
Provider<HttpServletResponse> responseProvider)
@@ -149,8 +148,6 @@ public class ScmRealm extends AuthorizingRealm
// set components
setPermissionResolver(new RepositoryPermissionResolver());
}
private final LoginAttemptHandler loginAttemptHandler;
//~--- methods --------------------------------------------------------------
@@ -174,7 +171,7 @@ public class ScmRealm extends AuthorizingRealm
{
throw new UnsupportedTokenException("ScmAuthenticationToken is required");
}
loginAttemptHandler.beforeAuthentication(authToken);
UsernamePasswordToken token = (UsernamePasswordToken) authToken;
@@ -198,6 +195,7 @@ public class ScmRealm extends AuthorizingRealm
else
{
loginAttemptHandler.onUnsuccessfulAuthentication(authToken, result);
throw new AccountException("authentication failed");
}
@@ -257,9 +255,10 @@ public class ScmRealm extends AuthorizingRealm
user.setCreationDate(System.currentTimeMillis());
// TODO find a better way
UserEventHack.fireEvent(userManager, user, HandlerEvent.BEFORE_CREATE);
UserEventHack.fireEvent(userManager, HandlerEventType.BEFORE_CREATE,
user);
userDAO.add(user);
UserEventHack.fireEvent(userManager, user, HandlerEvent.CREATE);
UserEventHack.fireEvent(userManager, HandlerEventType.CREATE, user);
}
else if (logger.isErrorEnabled())
{
@@ -547,6 +546,9 @@ public class ScmRealm extends AuthorizingRealm
/** Field description */
private final GroupManager groupManager;
/** Field description */
private final LoginAttemptHandler loginAttemptHandler;
/** Field description */
private final Provider<HttpServletRequest> requestProvider;

View File

@@ -44,7 +44,7 @@ import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.HandlerEvent;
import sonia.scm.HandlerEventType;
import sonia.scm.SCMContextProvider;
import sonia.scm.TransformFilter;
import sonia.scm.search.SearchRequest;
@@ -179,9 +179,9 @@ public class DefaultUserManager extends AbstractUserManager
AssertUtil.assertIsValid(user);
user.setCreationDate(System.currentTimeMillis());
fireEvent(user, HandlerEvent.BEFORE_CREATE);
fireEvent(HandlerEventType.BEFORE_CREATE, user);
userDAO.add(user);
fireEvent(user, HandlerEvent.CREATE);
fireEvent(HandlerEventType.CREATE, user);
}
/**
@@ -207,9 +207,9 @@ public class DefaultUserManager extends AbstractUserManager
if (userDAO.contains(name))
{
fireEvent(user, HandlerEvent.BEFORE_DELETE);
fireEvent(HandlerEventType.BEFORE_DELETE, user);
userDAO.delete(user);
fireEvent(user, HandlerEvent.DELETE);
fireEvent(HandlerEventType.DELETE, user);
}
else
{
@@ -267,14 +267,16 @@ public class DefaultUserManager extends AbstractUserManager
}
String name = user.getName();
User oldUser = userDAO.get(name);
if (userDAO.contains(name))
if (oldUser != null)
{
AssertUtil.assertIsValid(user);
user.setLastModified(System.currentTimeMillis());
fireEvent(user, HandlerEvent.BEFORE_MODIFY);
fireEvent(HandlerEventType.BEFORE_MODIFY, user, oldUser);
userDAO.modify(user);
fireEvent(user, HandlerEvent.MODIFY);
fireEvent(HandlerEventType.MODIFY, user, oldUser);
}
else
{

View File

@@ -38,7 +38,7 @@ package sonia.scm.user;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.HandlerEvent;
import sonia.scm.HandlerEventType;
/**
*
@@ -71,15 +71,15 @@ public final class UserEventHack
* @param user
* @param event
*/
public static void fireEvent(UserManager userManager, User user,
HandlerEvent event)
public static void fireEvent(UserManager userManager, HandlerEventType event,
User user)
{
AbstractUserManager abstractUserManager =
getAbstractUserManager(userManager);
if (abstractUserManager != null)
{
abstractUserManager.fireEvent(user, event);
abstractUserManager.fireEvent(event, user);
}
else if (logger.isWarnEnabled())
{