From e30f895b023e4d0b2f9e5baddfbb8739ed8cac69 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 18 Mar 2012 15:56:19 +0100 Subject: [PATCH] added modules to overrides --- .../main/java/sonia/scm/ClassOverrides.java | 70 +++++++++++++++++++ .../java/sonia/scm/ScmContextListener.java | 8 ++- .../main/java/sonia/scm/ScmServletModule.java | 6 +- 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/ClassOverrides.java b/scm-webapp/src/main/java/sonia/scm/ClassOverrides.java index b4560f0275..3169b5b4b7 100644 --- a/scm-webapp/src/main/java/sonia/scm/ClassOverrides.java +++ b/scm-webapp/src/main/java/sonia/scm/ClassOverrides.java @@ -33,6 +33,10 @@ package sonia.scm; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.inject.Module; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -172,6 +176,8 @@ public class ClassOverrides implements Iterable logger.warn("could not append ClassOverride, because it is not valid"); } } + + getModuleClasses().addAll(overrides.getModuleClasses()); } /** @@ -188,6 +194,54 @@ public class ClassOverrides implements Iterable //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @return + */ + public List> getModuleClasses() + { + if (moduleClasses == null) + { + moduleClasses = new ArrayList>(); + } + + return moduleClasses; + } + + /** + * Method description + * + * + * @return + */ + public List getModules() + { + return Lists.transform(moduleClasses, + new Function, Module>() + { + @Override + public Module apply(Class moduleClass) + { + Module module = null; + + try + { + module = moduleClass.newInstance(); + } + catch (Exception ex) + { + logger.error( + "could not create module instance of ".concat( + moduleClass.getName()), ex); + } + + return module; + } + }); + } + /** * Method description * @@ -230,6 +284,18 @@ public class ClassOverrides implements Iterable //~--- set methods ---------------------------------------------------------- + /** + * Method description + * + * + * + * @param moduleClasses + */ + public void setModuleClasses(List> moduleClasses) + { + this.moduleClasses = moduleClasses; + } + /** * Method description * @@ -243,6 +309,10 @@ public class ClassOverrides implements Iterable //~--- fields --------------------------------------------------------------- + /** Field description */ + @XmlElement(name = "module") + private List> moduleClasses; + /** Field description */ @XmlElement(name = "override") private List overrides; diff --git a/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java b/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java index 7f6050becb..48368f6536 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java @@ -134,11 +134,13 @@ public class ScmContextListener extends GuiceServletContextListener pluginLoader.processExtensions(bindExtProcessor); + ClassOverrides overrides = ClassOverrides.findOverrides(); ScmServletModule main = new ScmServletModule(pluginLoader, - bindExtProcessor); - List moduleList = - new ArrayList(bindExtProcessor.getModuleSet()); + bindExtProcessor, overrides); + List moduleList = new ArrayList(); + moduleList.addAll(bindExtProcessor.getModuleSet()); + moduleList.addAll(overrides.getModules()); moduleList.add(0, main); injector = Guice.createInjector(moduleList); diff --git a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java index 362d0eb87d..f1ad47be09 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java @@ -193,13 +193,15 @@ public class ScmServletModule extends ServletModule * * @param pluginLoader * @param bindExtProcessor + * @param overrides */ ScmServletModule(PluginLoader pluginLoader, - BindingExtensionProcessor bindExtProcessor) + BindingExtensionProcessor bindExtProcessor, + ClassOverrides overrides) { this.pluginLoader = pluginLoader; this.bindExtProcessor = bindExtProcessor; - this.overrides = ClassOverrides.findOverrides(); + this.overrides = overrides; } //~--- methods --------------------------------------------------------------