added modules to overrides

This commit is contained in:
Sebastian Sdorra
2012-03-18 15:56:19 +01:00
parent 15d420ff4a
commit e30f895b02
3 changed files with 79 additions and 5 deletions

View File

@@ -33,6 +33,10 @@ package sonia.scm;
//~--- non-JDK imports -------------------------------------------------------- //~--- 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -172,6 +176,8 @@ public class ClassOverrides implements Iterable<ClassOverride>
logger.warn("could not append ClassOverride, because it is not valid"); logger.warn("could not append ClassOverride, because it is not valid");
} }
} }
getModuleClasses().addAll(overrides.getModuleClasses());
} }
/** /**
@@ -188,6 +194,54 @@ public class ClassOverrides implements Iterable<ClassOverride>
//~--- get methods ---------------------------------------------------------- //~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @return
*/
public List<Class<? extends Module>> getModuleClasses()
{
if (moduleClasses == null)
{
moduleClasses = new ArrayList<Class<? extends Module>>();
}
return moduleClasses;
}
/**
* Method description
*
*
* @return
*/
public List<? extends Module> getModules()
{
return Lists.transform(moduleClasses,
new Function<Class<? extends Module>, Module>()
{
@Override
public Module apply(Class<? extends Module> 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 * Method description
* *
@@ -230,6 +284,18 @@ public class ClassOverrides implements Iterable<ClassOverride>
//~--- set methods ---------------------------------------------------------- //~--- set methods ----------------------------------------------------------
/**
* Method description
*
*
*
* @param moduleClasses
*/
public void setModuleClasses(List<Class<? extends Module>> moduleClasses)
{
this.moduleClasses = moduleClasses;
}
/** /**
* Method description * Method description
* *
@@ -243,6 +309,10 @@ public class ClassOverrides implements Iterable<ClassOverride>
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */
@XmlElement(name = "module")
private List<Class<? extends Module>> moduleClasses;
/** Field description */ /** Field description */
@XmlElement(name = "override") @XmlElement(name = "override")
private List<ClassOverride> overrides; private List<ClassOverride> overrides;

View File

@@ -134,11 +134,13 @@ public class ScmContextListener extends GuiceServletContextListener
pluginLoader.processExtensions(bindExtProcessor); pluginLoader.processExtensions(bindExtProcessor);
ClassOverrides overrides = ClassOverrides.findOverrides();
ScmServletModule main = new ScmServletModule(pluginLoader, ScmServletModule main = new ScmServletModule(pluginLoader,
bindExtProcessor); bindExtProcessor, overrides);
List<Module> moduleList = List<Module> moduleList = new ArrayList<Module>();
new ArrayList<Module>(bindExtProcessor.getModuleSet());
moduleList.addAll(bindExtProcessor.getModuleSet());
moduleList.addAll(overrides.getModules());
moduleList.add(0, main); moduleList.add(0, main);
injector = Guice.createInjector(moduleList); injector = Guice.createInjector(moduleList);

View File

@@ -193,13 +193,15 @@ public class ScmServletModule extends ServletModule
* *
* @param pluginLoader * @param pluginLoader
* @param bindExtProcessor * @param bindExtProcessor
* @param overrides
*/ */
ScmServletModule(PluginLoader pluginLoader, ScmServletModule(PluginLoader pluginLoader,
BindingExtensionProcessor bindExtProcessor) BindingExtensionProcessor bindExtProcessor,
ClassOverrides overrides)
{ {
this.pluginLoader = pluginLoader; this.pluginLoader = pluginLoader;
this.bindExtProcessor = bindExtProcessor; this.bindExtProcessor = bindExtProcessor;
this.overrides = ClassOverrides.findOverrides(); this.overrides = overrides;
} }
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------