Move sql store implementation into its own package

SQL is one implementation of EventStore but there could be others. Move
all sql related classes into their own package to unclutter the base
package.

Change-Id: Ie2a01ba5cd40a7ab1290c276ce17bc4cf00be372
diff --git a/BUCK b/BUCK
index 76ae85b..dd9dae8 100644
--- a/BUCK
+++ b/BUCK
@@ -21,7 +21,7 @@
     'Gerrit-PluginName: events-log',
     'Implementation-Vendor: Ericsson',
     'Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/events-log',
-    'Gerrit-Module: com.ericsson.gerrit.plugins.eventslog.Module',
+    'Gerrit-Module: com.ericsson.gerrit.plugins.eventslog.sql.SqlModule',
     'Gerrit-HttpModule: com.ericsson.gerrit.plugins.eventslog.HttpModule',
   ],
   provided_deps = DEPS,
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
index cf0d824..2064b3f 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
@@ -21,14 +21,17 @@
 
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
+/**
+ * Listen to Events and store them into the EventStore
+ */
 public class EventHandler implements EventListener {
 
-  private final EventStore database;
+  private final EventStore store;
   private final ScheduledThreadPoolExecutor pool;
 
   @Inject
-  EventHandler(EventStore database, @EventPool ScheduledThreadPoolExecutor pool) {
-    this.database = database;
+  EventHandler(EventStore store, @EventPool ScheduledThreadPoolExecutor pool) {
+    this.store = store;
     this.pool = pool;
   }
 
@@ -48,7 +51,7 @@
 
     @Override
     public void run() {
-      database.storeEvent(event);
+      store.storeEvent(event);
     }
 
     @Override
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/Module.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
similarity index 60%
copy from src/main/java/com/ericsson/gerrit/plugins/eventslog/Module.java
copy to src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
index a353df5..16a6125 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/Module.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
@@ -20,14 +20,11 @@
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
-import com.google.inject.Singleton;
 import com.google.inject.internal.UniqueAnnotations;
 
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
-class Module extends AbstractModule {
-
-  private static final String H2_DB_PREFIX = "jdbc:h2:";
+public class EventModule extends AbstractModule {
 
   @Override
   protected void configure() {
@@ -36,11 +33,6 @@
     bind(LifecycleListener.class)
         .annotatedWith(UniqueAnnotations.create())
         .to(EventQueue.class);
-    bind(EventStore.class).to(SQLStore.class);
-    bind(LifecycleListener.class).annotatedWith(UniqueAnnotations.create()).to(
-        SQLStore.class);
-    bind(QueryMaker.class).to(SQLQueryMaker.class);
-
     DynamicSet.bind(binder(), EventListener.class).to(EventHandler.class);
   }
 
@@ -49,26 +41,4 @@
   ScheduledThreadPoolExecutor provideEventPool(EventQueue queue) {
     return queue.getPool();
   }
-
-  @Provides
-  @Singleton
-  @EventsDb
-  SQLClient provideSqlClient(EventsLogConfig cfg) {
-    SQLClient sqlClient =
-        new SQLClient(cfg.getStoreDriver(), cfg.getStoreUrl(),
-            cfg.getUrlOptions());
-    sqlClient.setUsername(cfg.getStoreUsername());
-    sqlClient.setPassword(cfg.getStorePassword());
-    return sqlClient;
-  }
-
-  @Provides
-  @Singleton
-  @LocalEventsDb
-  SQLClient provideLocalSqlClient(EventsLogConfig cfg) {
-    String path = cfg.getLocalStorePath().toString();
-    path = path.endsWith("/") ? path : path + "/";
-    return new SQLClient(cfg.getLocalStoreDriver(), H2_DB_PREFIX
-        + path, cfg.getUrlOptions());
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
index 2759c37..9d00419 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
@@ -25,7 +25,7 @@
 import java.nio.file.Paths;
 
 @Singleton
-class EventsLogConfig {
+public class EventsLogConfig {
   static final String H2_DB_SUFFIX = ".h2.db";
   static final String CONFIG_COPY_LOCAL = "copyLocal";
   static final String CONFIG_MAX_AGE = "maxAge";
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/LocalEventsDb.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/LocalEventsDb.java
deleted file mode 100644
index 22a1247..0000000
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/LocalEventsDb.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.ericsson.gerrit.plugins.eventslog;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import com.google.inject.BindingAnnotation;
-
-import java.lang.annotation.Retention;
-
-@Retention(RUNTIME)
-@BindingAnnotation
-public @interface LocalEventsDb {
-}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsDb.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java
similarity index 62%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsDb.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java
index 9195e04..9b08bca 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsDb.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java
@@ -1,4 +1,4 @@
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
@@ -6,6 +6,9 @@
 
 import java.lang.annotation.Retention;
 
+/**
+ * Annotation applied to the SQLClient connected to the main database
+ */
 @Retention(RUNTIME)
 @BindingAnnotation
 public @interface EventsDb {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java
new file mode 100644
index 0000000..157152d
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java
@@ -0,0 +1,15 @@
+package com.ericsson.gerrit.plugins.eventslog.sql;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.google.inject.BindingAnnotation;
+
+import java.lang.annotation.Retention;
+
+/**
+ * Annotation applied to the SQLClient connected to the local database
+ */
+@Retention(RUNTIME)
+@BindingAnnotation
+@interface LocalEventsDb {
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLClient.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
similarity index 93%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLClient.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
index 65964ca..a6cd443 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLClient.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.DATE_ENTRY;
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.EVENT_ENTRY;
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.PRIMARY_ENTRY;
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.PROJECT_ENTRY;
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.TABLE_NAME;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.DATE_ENTRY;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.EVENT_ENTRY;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.PRIMARY_ENTRY;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.PROJECT_ENTRY;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
 import static java.lang.String.format;
 
 import com.google.common.collect.ArrayListMultimap;
@@ -27,6 +27,9 @@
 import com.google.gson.Gson;
 import com.google.inject.Inject;
 
+import com.ericsson.gerrit.plugins.eventslog.EventsLogException;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
+
 import org.apache.commons.dbcp.BasicDataSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -40,7 +43,7 @@
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-public class SQLClient {
+class SQLClient {
   private static final Logger log = LoggerFactory.getLogger(SQLClient.class);
 
   private BasicDataSource ds;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLEntry.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java
similarity index 92%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLEntry.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java
index e4b5d66..4f9b7d9 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLEntry.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
 import java.sql.Timestamp;
 
-public class SQLEntry implements Comparable<SQLEntry> {
+class SQLEntry implements Comparable<SQLEntry> {
   private String name;
   private Timestamp timestamp;
   private String event;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLQueryMaker.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
similarity index 85%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLQueryMaker.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
index 114e6d4..c22ef15 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLQueryMaker.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
@@ -12,15 +12,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.DATE_ENTRY;
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.PRIMARY_ENTRY;
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.TABLE_NAME;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.DATE_ENTRY;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.PRIMARY_ENTRY;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
+import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
+
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -29,7 +33,7 @@
 import java.util.Map;
 
 @Singleton
-public class SQLQueryMaker implements QueryMaker {
+class SQLQueryMaker implements QueryMaker {
   private static final String TIME_ONE = "t1";
   private static final String TIME_TWO = "t2";
   private static final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat(
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLStore.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
similarity index 94%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLStore.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
index d34c536..7db9f64 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLStore.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.TABLE_NAME;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
 
 import com.google.common.io.Files;
 import com.google.gerrit.common.TimeUtil;
@@ -28,6 +28,13 @@
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
+import com.ericsson.gerrit.plugins.eventslog.EventPool;
+import com.ericsson.gerrit.plugins.eventslog.EventStore;
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.EventsLogException;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
+import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,7 +53,7 @@
 import java.util.concurrent.TimeUnit;
 
 @Singleton
-public class SQLStore implements EventStore, LifecycleListener {
+class SQLStore implements EventStore, LifecycleListener {
   private static final Logger log = LoggerFactory.getLogger(SQLStore.class);
   public static final String H2_DB_SUFFIX = ".h2.db";
 
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLTable.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java
similarity index 94%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLTable.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java
index 563ce5b..1b0eb54 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/SQLTable.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
 final class SQLTable {
   protected static final String TABLE_NAME = "ChangeEvents";
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/Module.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SqlModule.java
similarity index 70%
rename from src/main/java/com/ericsson/gerrit/plugins/eventslog/Module.java
rename to src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SqlModule.java
index a353df5..e0f2fda 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/Module.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SqlModule.java
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Ericsson
+// Copyright (C) 2015 Ericsson
 //
 // Licensed under the Apache License, Version 2.0 (the "License"),
 // you may not use this file except in compliance with the License.
@@ -12,42 +12,30 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
-import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.events.LifecycleListener;
-import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
-import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.internal.UniqueAnnotations;
 
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import com.ericsson.gerrit.plugins.eventslog.EventModule;
+import com.ericsson.gerrit.plugins.eventslog.EventStore;
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
 
-class Module extends AbstractModule {
+class SqlModule extends AbstractModule {
 
   private static final String H2_DB_PREFIX = "jdbc:h2:";
 
   @Override
   protected void configure() {
-    bind(EventQueue.class).in(Scopes.SINGLETON);
-    bind(EventHandler.class).in(Scopes.SINGLETON);
-    bind(LifecycleListener.class)
-        .annotatedWith(UniqueAnnotations.create())
-        .to(EventQueue.class);
+    install(new EventModule());
     bind(EventStore.class).to(SQLStore.class);
     bind(LifecycleListener.class).annotatedWith(UniqueAnnotations.create()).to(
         SQLStore.class);
     bind(QueryMaker.class).to(SQLQueryMaker.class);
-
-    DynamicSet.bind(binder(), EventListener.class).to(EventHandler.class);
-  }
-
-  @Provides
-  @EventPool
-  ScheduledThreadPoolExecutor provideEventPool(EventQueue queue) {
-    return queue.getPool();
   }
 
   @Provides
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/QueryMakerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
similarity index 92%
rename from src/test/java/com/ericsson/gerrit/plugins/eventslog/QueryMakerTest.java
rename to src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
index 13ab8f9..e497a07 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/QueryMakerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
@@ -12,11 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.easymock.EasyMock.expect;
 
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
+import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
+import com.ericsson.gerrit.plugins.eventslog.sql.SQLQueryMaker;
+
 import org.easymock.EasyMockSupport;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/SQLStoreTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
similarity index 96%
rename from src/test/java/com/ericsson/gerrit/plugins/eventslog/SQLStoreTest.java
rename to src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
index a493e77..e4787e1 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/SQLStoreTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.ericsson.gerrit.plugins.eventslog;
+package com.ericsson.gerrit.plugins.eventslog.sql;
 
-import static com.ericsson.gerrit.plugins.eventslog.SQLTable.TABLE_NAME;
+import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
 import static com.google.common.truth.Truth.assertThat;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
@@ -28,6 +28,13 @@
 import com.google.gson.Gson;
 import com.google.inject.Provider;
 
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
+import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
+import com.ericsson.gerrit.plugins.eventslog.sql.SQLClient;
+import com.ericsson.gerrit.plugins.eventslog.sql.SQLEntry;
+import com.ericsson.gerrit.plugins.eventslog.sql.SQLStore;
+
 import org.easymock.EasyMock;
 import org.easymock.EasyMockSupport;
 import org.junit.Before;