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.newSetBinder(binder, ChangesetPreProcessor.class);
Multibinder<ChangesetPreProcessorFactory> changesetPreProcessorFactoryBinder = Multibinder<ChangesetPreProcessorFactory> changesetPreProcessorFactoryBinder =
Multibinder.newSetBinder(binder, ChangesetPreProcessorFactory.class); Multibinder.newSetBinder(binder, ChangesetPreProcessorFactory.class);
Multibinder<RepositoryHook> repositoryHookBinder =
Multibinder.newSetBinder(binder, RepositoryHook.class);
// listeners // listeners
Multibinder<RepositoryListener> repositoryListenerBinder = Multibinder<RepositoryListener> repositoryListenerBinder =
@@ -123,141 +125,128 @@ public class BindingExtensionProcessor implements ExtensionProcessor
for (Class extensionClass : extensions) 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());
{
logger.info("bind RepositoryHandler {}", extensionClass.getName());
}
binder.bind(extensionClass);
repositoryHandlers.addBinding().to(extensionClass);
} }
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); binder.bind(extensionClass);
authenticators.addBinding().to(extensionClass); repositoryHandlers.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);
}
} }
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 storeFactory
* @param handlerSet * @param handlerSet
* @param repositoryListenersProvider * @param repositoryListenersProvider
* @param repositoryHooksProvider
*/ */
@Inject @Inject
public XmlRepositoryManager( public XmlRepositoryManager(
SCMContextProvider contextProvider, SCMContextProvider contextProvider,
Provider<WebSecurityContext> securityContextProvider, Provider<WebSecurityContext> securityContextProvider,
StoreFactory storeFactory, Set<RepositoryHandler> handlerSet, StoreFactory storeFactory, Set<RepositoryHandler> handlerSet,
Provider<Set<RepositoryListener>> repositoryListenersProvider) Provider<Set<RepositoryListener>> repositoryListenersProvider,
Provider<Set<RepositoryHook>> repositoryHooksProvider)
{ {
this.securityContextProvider = securityContextProvider; this.securityContextProvider = securityContextProvider;
this.store = storeFactory.getStore(XmlRepositoryDatabase.class, STORE_NAME); this.store = storeFactory.getStore(XmlRepositoryDatabase.class, STORE_NAME);
this.repositoryListenersProvider = repositoryListenersProvider; this.repositoryListenersProvider = repositoryListenersProvider;
this.repositoryHooksProvider = repositoryHooksProvider;
handlerMap = new HashMap<String, RepositoryHandler>(); handlerMap = new HashMap<String, RepositoryHandler>();
types = new HashSet<Type>(); types = new HashSet<Type>();
@@ -299,6 +302,13 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
{ {
addListeners(listeners); addListeners(listeners);
} }
Set<RepositoryHook> hooks = repositoryHooksProvider.get();
if (Util.isNotEmpty(hooks))
{
addHooks(hooks);
}
} }
/** /**
@@ -775,6 +785,9 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
/** Field description */ /** Field description */
private XmlRepositoryDatabase repositoryDB; private XmlRepositoryDatabase repositoryDB;
/** Field description */
private Provider<Set<RepositoryHook>> repositoryHooksProvider;
/** Field description */ /** Field description */
private Provider<Set<RepositoryListener>> repositoryListenersProvider; private Provider<Set<RepositoryListener>> repositoryListenersProvider;

View File

@@ -76,8 +76,13 @@ public class XmlRepositoryManagerTest extends RepositoryManagerTestBase
when(listenerProvider.get()).thenReturn(new HashSet<RepositoryListener>()); 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, return new XmlRepositoryManager(contextProvider,
MockUtil.getAdminSecurityContextProvider(), MockUtil.getAdminSecurityContextProvider(),
factory, handlerSet, listenerProvider); factory, handlerSet, listenerProvider,
hookProvider);
} }
} }