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 =
@@ -122,8 +124,6 @@ public class BindingExtensionProcessor implements ExtensionProcessor
authenticators.addBinding().to(XmlAuthenticationHandler.class); authenticators.addBinding().to(XmlAuthenticationHandler.class);
for (Class extensionClass : extensions) for (Class extensionClass : extensions)
{
try
{ {
if (RepositoryHandler.class.isAssignableFrom(extensionClass)) if (RepositoryHandler.class.isAssignableFrom(extensionClass))
{ {
@@ -237,9 +237,7 @@ public class BindingExtensionProcessor implements ExtensionProcessor
logger.info("bind RepositoryHook {}", extensionClass.getName()); logger.info("bind RepositoryHook {}", extensionClass.getName());
} }
RepositoryHook hook = (RepositoryHook) extensionClass.newInstance(); repositoryHookBinder.addBinding().to(extensionClass);
hooks.add(hook);
} }
else else
{ {
@@ -251,15 +249,6 @@ public class BindingExtensionProcessor implements ExtensionProcessor
binder.bind(extensionClass); binder.bind(extensionClass);
} }
} }
catch (IllegalAccessException ex)
{
logger.error(ex.getMessage(), ex);
}
catch (InstantiationException ex)
{
logger.error(ex.getMessage(), ex);
}
}
} }
/** /**

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);
} }
} }