Fix binding of the DataSourceType for GWT DevMode

Starting Gerrit in GWT DevMode was failing because a binding
for DataSourceType was missing.

Change-Id: I1b018498d2a2286fcb25d7eb9f2ae58d802cb7aa
Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
diff --git a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
index 1a556c2..b352d4f 100644
--- a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
+++ b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
@@ -28,6 +28,7 @@
 import com.google.gerrit.server.config.AuthConfigModule;
 import com.google.gerrit.server.config.CanonicalWebUrlModule;
 import com.google.gerrit.server.config.GerritGlobalModule;
+import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.GerritServerConfigModule;
 import com.google.gerrit.server.config.MasterNodeStartup;
 import com.google.gerrit.server.config.SitePath;
@@ -39,7 +40,9 @@
 import com.google.gerrit.server.mail.SmtpEmailSender;
 import com.google.gerrit.server.plugins.PluginGuiceEnvironment;
 import com.google.gerrit.server.plugins.PluginModule;
+import com.google.gerrit.server.schema.DataSourceModule;
 import com.google.gerrit.server.schema.DataSourceProvider;
+import com.google.gerrit.server.schema.DataSourceType;
 import com.google.gerrit.server.schema.DatabaseModule;
 import com.google.gerrit.server.schema.SchemaModule;
 import com.google.gerrit.server.schema.SchemaVersionCheck;
@@ -56,6 +59,7 @@
 import com.google.inject.servlet.GuiceServletContextListener;
 import com.google.inject.spi.Message;
 
+import org.eclipse.jgit.lib.Config;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -144,10 +148,35 @@
   private Injector createDbInjector() {
     final List<Module> modules = new ArrayList<Module>();
     if (sitePath != null) {
-      modules.add(new LifecycleModule() {
+      Module sitePathModule = new AbstractModule() {
         @Override
         protected void configure() {
           bind(File.class).annotatedWith(SitePath.class).toInstance(sitePath);
+        }
+      };
+      modules.add(sitePathModule);
+
+      Module configModule = new GerritServerConfigModule();
+      modules.add(configModule);
+
+      Injector cfgInjector = Guice.createInjector(sitePathModule, configModule);
+      Config cfg = cfgInjector.getInstance(Key.get(Config.class,
+          GerritServerConfig.class));
+      String dbType = cfg.getString("database", null, "type");
+
+      final DataSourceType dst = Guice.createInjector(new DataSourceModule(),
+          configModule, sitePathModule).getInstance(
+            Key.get(DataSourceType.class, Names.named(dbType.toLowerCase())));
+      modules.add(new AbstractModule() {
+        @Override
+        protected void configure() {
+          bind(DataSourceType.class).toInstance(dst);
+        }
+      });
+
+      modules.add(new LifecycleModule() {
+        @Override
+        protected void configure() {
           bind(DataSourceProvider.Context.class).toInstance(
               DataSourceProvider.Context.MULTI_USER);
           bind(Key.get(DataSource.class, Names.named("ReviewDb"))).toProvider(
@@ -155,7 +184,6 @@
           listener().to(DataSourceProvider.class);
         }
       });
-      modules.add(new GerritServerConfigModule());
 
     } else {
       modules.add(new LifecycleModule() {