package org.webpieces.webserver.api;
import org.webpieces.router.api.ProdRouterModule;
import org.webpieces.router.api.RouterConfig;
import org.webpieces.templating.api.ProdTemplateModule;
import org.webpieces.templating.api.TemplateConfig;
import org.webpieces.webserver.impl.WebServerModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.util.Modules;
public abstract class WebServerFactory {
protected WebServerFactory() {}
public static WebServer create(WebServerConfig config, RouterConfig routerConfig, TemplateConfig templateConfig) {
Module allModules = getModules(config, routerConfig, templateConfig);
Module platformOverrides = config.getPlatformOverrides();
if(platformOverrides != null)
allModules = Modules.override(allModules).with(platformOverrides);
Injector injector = Guice.createInjector(allModules);
return injector.getInstance(WebServer.class);
}
private static Module getModules(WebServerConfig config, RouterConfig routerConfig, TemplateConfig templateConfig) {
return Modules.combine(
new WebServerModule(config),
new ProdRouterModule(routerConfig),
new ProdTemplateModule(templateConfig)
);
}
}