enable injection for repository hooks

This commit is contained in:
Sebastian Sdorra
2011-09-04 13:36:37 +02:00
parent db467ea2c6
commit f07404cc25
3 changed files with 136 additions and 129 deletions

View File

@@ -108,6 +108,8 @@ public class BindingExtensionProcessor implements ExtensionProcessor
Multibinder.newSetBinder(binder, ChangesetPreProcessor.class);
Multibinder<ChangesetPreProcessorFactory> changesetPreProcessorFactoryBinder =
Multibinder.newSetBinder(binder, ChangesetPreProcessorFactory.class);
Multibinder<RepositoryHook> repositoryHookBinder =
Multibinder.newSetBinder(binder, RepositoryHook.class);
// listeners
Multibinder<RepositoryListener> repositoryListenerBinder =
@@ -123,141 +125,128 @@ public class BindingExtensionProcessor implements ExtensionProcessor
for (Class extensionClass : extensions)
{
try
if (RepositoryHandler.class.isAssignableFrom(extensionClass))
{
if (RepositoryHandler.class.isAssignableFrom(extensionClass))
if (logger.isInfoEnabled())
{
if (logger.isInfoEnabled())
{
logger.info("bind RepositoryHandler {}", extensionClass.getName());
}
binder.bind(extensionClass);
repositoryHandlers.addBinding().to(extensionClass);
logger.info("bind RepositoryHandler {}", extensionClass.getName());
}
else if (EncryptionHandler.class.isAssignableFrom(extensionClass))
{
bind(binder, EncryptionHandler.class, extensionClass);
}
else if (AuthenticationHandler.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind AuthenticationHandler {}",
extensionClass.getName());
}
binder.bind(extensionClass);
authenticators.addBinding().to(extensionClass);
}
else if (GroupListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind GroupListener {}", extensionClass.getName());
}
binder.bind(extensionClass);
groupListenerBinder.addBinding().to(extensionClass);
}
else if (UserListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind UserListener {}", extensionClass.getName());
}
binder.bind(extensionClass);
userListenerBinder.addBinding().to(extensionClass);
}
else if (RepositoryListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind RepositoryListener {}", extensionClass.getName());
}
binder.bind(extensionClass);
repositoryListenerBinder.addBinding().to(extensionClass);
}
else if (AuthenticationListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind AuthenticaitonListener {}",
extensionClass.getName());
}
binder.bind(extensionClass);
authenticationListenerBinder.addBinding().to(extensionClass);
}
else if (ResourceHandler.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind ResourceHandler {}", extensionClass.getName());
}
resourceHandler.addBinding().to(extensionClass);
}
else if (FileSystem.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind FileSystem {}", extensionClass.getName());
}
fileSystemClass = extensionClass;
}
else if (ChangesetPreProcessor.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind ChangesetPreProcessor {}",
extensionClass.getName());
}
changesetPreProcessorBinder.addBinding().to(extensionClass);
}
else if (ChangesetPreProcessorFactory.class.isAssignableFrom(
extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind ChangesetPreProcessorFactory {}",
extensionClass.getName());
}
changesetPreProcessorFactoryBinder.addBinding().to(extensionClass);
}
else if (RepositoryHook.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind RepositoryHook {}", extensionClass.getName());
}
RepositoryHook hook = (RepositoryHook) extensionClass.newInstance();
hooks.add(hook);
}
else
{
if (logger.isInfoEnabled())
{
logger.info("bind {}", extensionClass.getName());
}
binder.bind(extensionClass);
}
binder.bind(extensionClass);
repositoryHandlers.addBinding().to(extensionClass);
}
catch (IllegalAccessException ex)
else if (EncryptionHandler.class.isAssignableFrom(extensionClass))
{
logger.error(ex.getMessage(), ex);
bind(binder, EncryptionHandler.class, extensionClass);
}
catch (InstantiationException ex)
else if (AuthenticationHandler.class.isAssignableFrom(extensionClass))
{
logger.error(ex.getMessage(), ex);
if (logger.isInfoEnabled())
{
logger.info("bind AuthenticationHandler {}",
extensionClass.getName());
}
binder.bind(extensionClass);
authenticators.addBinding().to(extensionClass);
}
else if (GroupListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind GroupListener {}", extensionClass.getName());
}
binder.bind(extensionClass);
groupListenerBinder.addBinding().to(extensionClass);
}
else if (UserListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind UserListener {}", extensionClass.getName());
}
binder.bind(extensionClass);
userListenerBinder.addBinding().to(extensionClass);
}
else if (RepositoryListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind RepositoryListener {}", extensionClass.getName());
}
binder.bind(extensionClass);
repositoryListenerBinder.addBinding().to(extensionClass);
}
else if (AuthenticationListener.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind AuthenticaitonListener {}",
extensionClass.getName());
}
binder.bind(extensionClass);
authenticationListenerBinder.addBinding().to(extensionClass);
}
else if (ResourceHandler.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind ResourceHandler {}", extensionClass.getName());
}
resourceHandler.addBinding().to(extensionClass);
}
else if (FileSystem.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind FileSystem {}", extensionClass.getName());
}
fileSystemClass = extensionClass;
}
else if (ChangesetPreProcessor.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind ChangesetPreProcessor {}",
extensionClass.getName());
}
changesetPreProcessorBinder.addBinding().to(extensionClass);
}
else if (ChangesetPreProcessorFactory.class.isAssignableFrom(
extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind ChangesetPreProcessorFactory {}",
extensionClass.getName());
}
changesetPreProcessorFactoryBinder.addBinding().to(extensionClass);
}
else if (RepositoryHook.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind RepositoryHook {}", extensionClass.getName());
}
repositoryHookBinder.addBinding().to(extensionClass);
}
else
{
if (logger.isInfoEnabled())
{
logger.info("bind {}", extensionClass.getName());
}
binder.bind(extensionClass);
}
}
}

View File

@@ -113,17 +113,20 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
* @param storeFactory
* @param handlerSet
* @param repositoryListenersProvider
* @param repositoryHooksProvider
*/
@Inject
public XmlRepositoryManager(
SCMContextProvider contextProvider,
Provider<WebSecurityContext> securityContextProvider,
StoreFactory storeFactory, Set<RepositoryHandler> handlerSet,
Provider<Set<RepositoryListener>> repositoryListenersProvider)
Provider<Set<RepositoryListener>> repositoryListenersProvider,
Provider<Set<RepositoryHook>> repositoryHooksProvider)
{
this.securityContextProvider = securityContextProvider;
this.store = storeFactory.getStore(XmlRepositoryDatabase.class, STORE_NAME);
this.repositoryListenersProvider = repositoryListenersProvider;
this.repositoryHooksProvider = repositoryHooksProvider;
handlerMap = new HashMap<String, RepositoryHandler>();
types = new HashSet<Type>();
@@ -299,6 +302,13 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
{
addListeners(listeners);
}
Set<RepositoryHook> hooks = repositoryHooksProvider.get();
if (Util.isNotEmpty(hooks))
{
addHooks(hooks);
}
}
/**
@@ -775,6 +785,9 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
/** Field description */
private XmlRepositoryDatabase repositoryDB;
/** Field description */
private Provider<Set<RepositoryHook>> repositoryHooksProvider;
/** Field description */
private Provider<Set<RepositoryListener>> repositoryListenersProvider;

View File

@@ -76,8 +76,13 @@ public class XmlRepositoryManagerTest extends RepositoryManagerTestBase
when(listenerProvider.get()).thenReturn(new HashSet<RepositoryListener>());
Provider<Set<RepositoryHook>> hookProvider = mock(Provider.class);
when(hookProvider.get()).thenReturn(new HashSet<RepositoryHook>());
return new XmlRepositoryManager(contextProvider,
MockUtil.getAdminSecurityContextProvider(),
factory, handlerSet, listenerProvider);
factory, handlerSet, listenerProvider,
hookProvider);
}
}