improve listener support

This commit is contained in:
Sebastian Sdorra
2011-01-02 14:33:26 +01:00
parent a73fa8d79f
commit a8f216f178
11 changed files with 193 additions and 7 deletions

View File

@@ -42,10 +42,13 @@ import com.google.inject.multibindings.Multibinder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.group.GroupListener;
import sonia.scm.plugin.ext.Extension;
import sonia.scm.plugin.ext.ExtensionProcessor;
import sonia.scm.repository.RepositoryHandler;
import sonia.scm.repository.RepositoryListener;
import sonia.scm.security.EncryptionHandler;
import sonia.scm.user.UserListener;
import sonia.scm.web.security.AuthenticationHandler;
import sonia.scm.web.security.XmlAuthenticationHandler;
@@ -125,6 +128,40 @@ public class BindingExtensionProcessor implements ExtensionProcessor
binder.bind(extensionClass);
authenticators.addBinding().to(extensionClass);
}
else if (GroupListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind GroupListener {}", extensionClass.getName());
}
GroupListener listener = (GroupListener) extensionClass.newInstance();
groupListeners.add(listener);
}
else if (UserListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind UserListener {}", extensionClass.getName());
}
UserListener listener = (UserListener) extensionClass.newInstance();
userListeners.add(listener);
}
else if (RepositoryListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind RepositoryListener {}", extensionClass.getName());
}
RepositoryListener listener =
(RepositoryListener) extensionClass.newInstance();
repositoryListeners.add(listener);
}
else
{
if (logger.isInfoEnabled())
@@ -169,6 +206,17 @@ public class BindingExtensionProcessor implements ExtensionProcessor
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @return
*/
public Set<GroupListener> getGroupListeners()
{
return groupListeners;
}
/**
* Method description
*
@@ -180,6 +228,28 @@ public class BindingExtensionProcessor implements ExtensionProcessor
return moduleSet;
}
/**
* Method description
*
*
* @return
*/
public Set<RepositoryListener> getRepositoryListeners()
{
return repositoryListeners;
}
/**
* Method description
*
*
* @return
*/
public Set<UserListener> getUserListeners()
{
return userListeners;
}
//~--- methods --------------------------------------------------------------
/**
@@ -219,8 +289,7 @@ public class BindingExtensionProcessor implements ExtensionProcessor
{
if (logger.isDebugEnabled())
{
logger.debug("bind Authenticator {}", type.getName(),
bindingType.getName());
logger.debug("bind {} of type {}", type.getName(), bindingType.getName());
}
binder.bind(type).to(bindingType);
@@ -233,4 +302,14 @@ public class BindingExtensionProcessor implements ExtensionProcessor
/** Field description */
private Set<Module> moduleSet;
/** Field description */
private Set<RepositoryListener> repositoryListeners =
new HashSet<RepositoryListener>();
/** Field description */
private Set<UserListener> userListeners = new HashSet<UserListener>();
/** Field description */
private Set<GroupListener> groupListeners = new HashSet<GroupListener>();
}

View File

@@ -125,13 +125,23 @@ public class ScmContextListener extends GuiceServletContextListener
injector.getInstance(StoreFactory.class).init(context);
// init RepositoryManager
injector.getInstance(RepositoryManager.class).init(context);
RepositoryManager repositoryManager =
injector.getInstance(RepositoryManager.class);
repositoryManager.addListeners(bindExtProcessor.getRepositoryListeners());
repositoryManager.init(context);
// init UserManager
injector.getInstance(UserManager.class).init(context);
UserManager userManager = injector.getInstance(UserManager.class);
userManager.addListeners(bindExtProcessor.getUserListeners());
userManager.init(context);
// init GroupManager
injector.getInstance(GroupManager.class).init(context);
GroupManager groupManager = injector.getInstance(GroupManager.class);
groupManager.addListeners(bindExtProcessor.getGroupListeners());
groupManager.init(context);
// init Authenticator
injector.getInstance(AuthenticationManager.class).init(context);