Merge branch 'stable-2.15'

* stable-2.15:
  Upgrade bazlets to the latest stable-2.15 revision
  Replace Apache commons-dbcp with HikariCP
  Periodically remove older database entries
  Do not remove entries from local DB
  Remove entries from deleted projects asynchronously
  Upgrade mockito to latest version
  Convert local variable to field
  Remove unneeded JDBC driver class name
  Remove unneeded annotation
  Use already defined constant
  Inline one-time use variables
  Update bazlets to latest stable-2.14 to use 2.14.11 API
  Fix index creation
  Update bazlets to latest stable-2.14 to use 2.14.10 API
  Add indexes to speed up queries
  Configure DB connection pool
  Simplify sorting of query events result
  Avoid using non portable separator character
  Use Java Files instead of Guava one
  Simplify configuration
  Make default query more readable
  Format build files with buildifier 0.12.0
  Use built-in log formatter
  SQLQueryMaker: add order-by clause to the query
  EventsLogIT: Format with google-java-format 1.6
  Change copyright to AOSP
  Inline private method
  Upgrade bazlets to latest stable-2.14 revision
  Automate the SonarQube analysis with bazel
  Format all files with google-java-format
  Compile against Gerrit 2.15
  Fix errorprone issue about tearDown method
  Update bazlets to latest stable-2.14 to use 2.14.7 release API
  Upgrade Mockito to 2.15.0
  Format all Java files with google-java-format
  SQLStoreTest: Fix Spotbugs warning about return value ignored
  SQLEntryTest: Suppress 'unlikely argument type' warning
  SQLStoreTest: Reduce visibility of tearDown method
  Update bazlets to latest revision on stable-2.14
  Build with API version 2.11.7

Change-Id: Iabfa051b2257f5665cfc9f24e53eff3ff677c2b2
diff --git a/WORKSPACE b/WORKSPACE
index b57d59c..6e37ab4 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,27 +3,27 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "3995849fe742201d93e40f2b109dcff13dd0a4ed",
+    commit = "44557bf2f571c233d9df6cd670e0250c14fef341",
     #    local_path = "/home/<user>/projects/bazlets",
 )
 
 #Snapshot Plugin API
-#load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
 load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
+    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+    "gerrit_api_maven_local",
 )
 
+# Load snapshot Plugin API
+gerrit_api_maven_local()
+
+# Release Plugin API
+#load(
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#    "gerrit_api",
+#)
+
 # Load release Plugin API
-gerrit_api()
+#gerrit_api()
 
 load("//:external_plugin_deps.bzl", "external_plugin_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 15f830a..6a020c5 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
@@ -14,8 +14,8 @@
 
 package com.ericsson.gerrit.plugins.eventslog;
 
-import com.google.gerrit.common.EventListener;
 import com.google.gerrit.server.events.Event;
+import com.google.gerrit.server.events.EventListener;
 import com.google.gerrit.server.events.ProjectEvent;
 import com.google.inject.Inject;
 import java.util.concurrent.ScheduledExecutorService;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
index b888425..3f905c7 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
@@ -15,10 +15,10 @@
 package com.ericsson.gerrit.plugins.eventslog;
 
 import com.ericsson.gerrit.plugins.eventslog.sql.EventsLogCleaner;
-import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.extensions.events.ProjectDeletedListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.server.events.EventListener;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
index 8a06904..cc8b3d8 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
@@ -26,13 +26,11 @@
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.events.ProjectEvent;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.permissions.ProjectPermission;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import java.io.IOException;
 import java.net.ConnectException;
@@ -54,7 +52,6 @@
   private static final Logger log = LoggerFactory.getLogger(SQLStore.class);
   private static final String H2_DB_SUFFIX = ".h2.db";
 
-  private final Provider<CurrentUser> userProvider;
   private final EventsLogCleaner eventsLogCleaner;
   private SQLClient eventsDb;
   private SQLClient localEventsDb;
@@ -71,7 +68,6 @@
 
   @Inject
   SQLStore(
-      Provider<CurrentUser> userProvider,
       EventsLogConfig cfg,
       @EventsDb SQLClient eventsDb,
       @LocalEventsDb SQLClient localEventsDb,
@@ -83,7 +79,6 @@
     this.waitTime = cfg.getWaitTime();
     this.connectTime = cfg.getConnectTime();
     this.copyLocal = cfg.getCopyLocal();
-    this.userProvider = userProvider;
     this.eventsDb = eventsDb;
     this.localEventsDb = localEventsDb;
     this.eventsLogCleaner = eventsLogCleaner;
@@ -121,7 +116,7 @@
       String projectName = entry.getKey();
       try {
         permissionBackend
-            .user(userProvider)
+            .currentUser()
             .project(new Project.NameKey(projectName))
             .check(ProjectPermission.ACCESS);
         entries.addAll(entry.getValue());
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
index 96ce35d..b473ad9 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
@@ -29,13 +29,11 @@
 import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
 import com.google.common.collect.ImmutableList;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.events.ProjectEvent;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.permissions.ProjectPermission;
 import com.google.gson.Gson;
-import com.google.inject.Provider;
 import com.zaxxer.hikari.HikariConfig;
 import java.net.ConnectException;
 import java.sql.Connection;
@@ -70,7 +68,6 @@
   private static final String MSG = "message";
   private static final String GENERIC_QUERY = "SELECT * FROM " + TABLE_NAME;
 
-  @Mock private Provider<CurrentUser> userProviderMock;
   @Mock private EventsLogConfig cfgMock;
   @Mock private PermissionBackend permissionBackendMock;
   @Mock private PermissionBackend.ForProject forProjectMock;
@@ -110,7 +107,7 @@
 
   @Test
   public void storeThenQueryVisible() throws Exception {
-    when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+    when(permissionBackendMock.currentUser()).thenReturn(withUserMock);
     when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
     doNothing().when(forProjectMock).check(ProjectPermission.ACCESS);
     setUpClient();
@@ -122,7 +119,7 @@
 
   @Test
   public void storeThenQueryNotVisible() throws Exception {
-    when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+    when(permissionBackendMock.currentUser()).thenReturn(withUserMock);
     when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
     doThrow(new PermissionBackendException(""))
         .when(forProjectMock)
@@ -142,7 +139,7 @@
 
   @Test
   public void notReturnEventWithNoVisibilityInfo() throws Exception {
-    when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+    when(permissionBackendMock.currentUser()).thenReturn(withUserMock);
     when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
     doThrow(new PermissionBackendException(""))
         .when(forProjectMock)
@@ -163,13 +160,7 @@
     doThrow(exceptions).doNothing().when(eventsDb).queryOne();
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -185,15 +176,10 @@
     setUpClientMock();
     doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
     doThrow(exceptions).doNothing().when(eventsDb).queryOne();
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -206,15 +192,10 @@
     when(cfgMock.getMaxTries()).thenReturn(3);
     setUpClientMock();
     doThrow(new SQLException(MSG)).when(eventsDb).storeEvent(mockEvent);
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -229,15 +210,10 @@
     setUpClientMock();
     doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
     doThrow(exceptions).doNothing().when(eventsDb).queryOne();
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -249,15 +225,10 @@
     setUpClientMock();
     doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -268,7 +239,8 @@
   public void restoreEventsFromLocalDb() throws Exception {
     MockEvent mockEvent = new MockEvent();
     MockEvent mockEvent2 = new MockEvent("proj");
-    when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock);
+
+    when(permissionBackendMock.currentUser()).thenReturn(withUserMock);
     when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock);
     doNothing().when(forProjectMock).check(ProjectPermission.ACCESS);
 
@@ -278,13 +250,7 @@
     localEventsDb = new SQLClient(config);
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     localEventsDb.createDBIfNotCreated();
     localEventsDb.storeEvent(mockEvent);
@@ -295,6 +261,9 @@
     Gson gson = new Gson();
     String json = gson.toJson(mockEvent);
     String json2 = gson.toJson(mockEvent2);
+
+    assertThat(events).containsExactly(json, json2);
+
     assertThat(events).containsExactly(json, json2).inOrder();
   }
 
@@ -303,15 +272,10 @@
     setUpClientMock();
     doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     verify(localEventsDb).createDBIfNotCreated();
@@ -322,15 +286,10 @@
     setUpClientMock();
     doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -343,15 +302,10 @@
     when(cfgMock.getMaxTries()).thenReturn(0);
     doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     store.storeEvent(mockEvent);
@@ -359,17 +313,13 @@
   }
 
   private void setUpClient() {
+
     eventsDb = new SQLClient(config);
     localEventsDb = new SQLClient(config);
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
+
     store.start();
   }
 
@@ -391,15 +341,10 @@
     localEventsDb = mock(SQLClient.class);
     when(localEventsDb.dbExists()).thenReturn(true);
     when(localEventsDb.getAll()).thenReturn(ImmutableList.of(mock(SQLEntry.class)));
+
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     poolMock.scheduleWithFixedDelay(store.new CheckConnectionTask(), 0, 0, TimeUnit.MILLISECONDS);
@@ -433,13 +378,7 @@
 
     store =
         new SQLStore(
-            userProviderMock,
-            cfgMock,
-            eventsDb,
-            localEventsDb,
-            poolMock,
-            permissionBackendMock,
-            logCleanerMock);
+            cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock);
 
     store.start();
     verify(eventsDb).queryOne();