From f07404cc252d1c8acbb635b9cac73a5769edd1d5 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 4 Sep 2011 13:36:37 +0200 Subject: [PATCH] enable injection for repository hooks --- .../sonia/scm/BindingExtensionProcessor.java | 243 +++++++++--------- .../repository/xml/XmlRepositoryManager.java | 15 +- .../repository/XmlRepositoryManagerTest.java | 7 +- 3 files changed, 136 insertions(+), 129 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java b/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java index d7c0fc5ba2..61278ae463 100644 --- a/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/BindingExtensionProcessor.java @@ -108,6 +108,8 @@ public class BindingExtensionProcessor implements ExtensionProcessor Multibinder.newSetBinder(binder, ChangesetPreProcessor.class); Multibinder changesetPreProcessorFactoryBinder = Multibinder.newSetBinder(binder, ChangesetPreProcessorFactory.class); + Multibinder repositoryHookBinder = + Multibinder.newSetBinder(binder, RepositoryHook.class); // listeners Multibinder 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); } } } diff --git a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java index 859e77ae63..8968174f91 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java @@ -113,17 +113,20 @@ public class XmlRepositoryManager extends AbstractRepositoryManager * @param storeFactory * @param handlerSet * @param repositoryListenersProvider + * @param repositoryHooksProvider */ @Inject public XmlRepositoryManager( SCMContextProvider contextProvider, Provider securityContextProvider, StoreFactory storeFactory, Set handlerSet, - Provider> repositoryListenersProvider) + Provider> repositoryListenersProvider, + Provider> repositoryHooksProvider) { this.securityContextProvider = securityContextProvider; this.store = storeFactory.getStore(XmlRepositoryDatabase.class, STORE_NAME); this.repositoryListenersProvider = repositoryListenersProvider; + this.repositoryHooksProvider = repositoryHooksProvider; handlerMap = new HashMap(); types = new HashSet(); @@ -299,6 +302,13 @@ public class XmlRepositoryManager extends AbstractRepositoryManager { addListeners(listeners); } + + Set 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> repositoryHooksProvider; + /** Field description */ private Provider> repositoryListenersProvider; diff --git a/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java b/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java index 65e5f57aac..a58f3f292a 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/XmlRepositoryManagerTest.java @@ -76,8 +76,13 @@ public class XmlRepositoryManagerTest extends RepositoryManagerTestBase when(listenerProvider.get()).thenReturn(new HashSet()); + Provider> hookProvider = mock(Provider.class); + + when(hookProvider.get()).thenReturn(new HashSet()); + return new XmlRepositoryManager(contextProvider, MockUtil.getAdminSecurityContextProvider(), - factory, handlerSet, listenerProvider); + factory, handlerSet, listenerProvider, + hookProvider); } }