Merge branch 'stable-2.10' into stable-2.11

* stable-2.10:
  Remove unused import and annotation
  Put exception message to logger
  Rename ChangeWorker to EventWorker
  Apply multibinding to Solver
  Rename RabbitMQManager to Manager
  Apply Provider pattern to SessionFactory
  Fix shutdown channel/connection logic
  Fix close logic for session
  Fix shutdown session
  Apply Guice Multibinder to Section injection
  Add Guice multibinding extension library
  Update gradle-shadow plugin to 1.2.1 then fix build.gradle
  Update git ignore pattern
  Some improvements
  Change Solver structure
  Decoupled normalize() from fromConfig()
  Structured configuration classes
  Cleanup codes
  Create some packages then move classes
  Roughly support multi config
  Add MessagePublishers to listen ChangeEvent
  Add dependency: commons-io
  Get plugin name then assume config filename
  Remove unnecessary codes

Conflicts:
	src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
	src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMQManager.java

Change-Id: I8d590c735c8bd81acf30a30c1f0feb97e101e1cd
diff --git a/gradle.properties b/gradle.properties
index f475d25..84e72a9 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,2 +1,2 @@
 apiType=plugin
-apiVersion=2.10
+apiVersion=2.11-SNAPSHOT
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index d19b4c3..a78e513 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -14,7 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq;
 
-import com.google.gerrit.common.ChangeListener;
+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;
@@ -63,6 +63,6 @@
     install(new FactoryModuleBuilder().implement(EventWorker.class, UserEventWorker.class).build(EventWorkerFactory.class));
 
     DynamicSet.bind(binder(), LifecycleListener.class).to(Manager.class);
-    DynamicSet.bind(binder(), ChangeListener.class).to(DefaultEventWorker.class);
+    DynamicSet.bind(binder(), EventListener.class).to(DefaultEventWorker.class);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
index 5d31adc..201f0ac 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
@@ -15,11 +15,10 @@
 package com.googlesource.gerrit.plugins.rabbitmq.message;
 
 import com.google.gerrit.extensions.events.LifecycleListener;
-import com.google.gerrit.server.events.ChangeEvent;
+import com.google.gerrit.server.events.Event;
 import com.google.gson.Gson;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
-
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Monitor;
 import com.googlesource.gerrit.plugins.rabbitmq.session.Session;
@@ -78,7 +77,7 @@
   }
 
   @Override
-  public void onChangeEvent(ChangeEvent event) {
+  public void onEvent(Event event) {
     if (available && session.isOpen()) {
       session.publish(gson.toJson(event));
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/Publisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/Publisher.java
index 77d4962..8cc38cb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/Publisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/Publisher.java
@@ -1,11 +1,11 @@
 package com.googlesource.gerrit.plugins.rabbitmq.message;
 
-import com.google.gerrit.common.ChangeListener;
+import com.google.gerrit.common.EventListener;
 
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
 import com.googlesource.gerrit.plugins.rabbitmq.session.Session;
 
-public interface Publisher extends ChangeListener {
+public interface Publisher extends EventListener {
   public void start();
   public void stop();
   public void enable();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java
index 6ebfb0d..2d2e5ba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java
@@ -14,10 +14,9 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.worker;
 
-import com.google.gerrit.common.ChangeListener;
-import com.google.gerrit.server.events.ChangeEvent;
+import com.google.gerrit.common.EventListener;
+import com.google.gerrit.server.events.Event;
 import com.google.inject.Singleton;
-
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 
 import org.slf4j.Logger;
@@ -27,7 +26,7 @@
 import java.util.concurrent.CopyOnWriteArraySet;
 
 @Singleton
-public class DefaultEventWorker implements ChangeListener, EventWorker {
+public class DefaultEventWorker implements EventListener, EventWorker {
 
   private static final Logger LOGGER = LoggerFactory.getLogger(DefaultEventWorker.class);
 
@@ -54,9 +53,9 @@
   }
 
   @Override
-  public void onChangeEvent(ChangeEvent event) {
+  public void onEvent(Event event) {
     for (Publisher publisher : publishers) {
-      publisher.onChangeEvent(event);
+      publisher.onEvent(event);
     }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
index 1f7710d..3f63b79 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
@@ -14,7 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.worker;
 
-import com.google.gerrit.common.ChangeHooks;
+import com.google.gerrit.common.EventSource;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.CurrentUser;
@@ -39,7 +39,7 @@
 
   private static final Logger LOGGER = LoggerFactory.getLogger(UserEventWorker.class);
 
-  private final ChangeHooks hooks;
+  private final EventSource source;
   private final WorkQueue workQueue;
   private final AccountResolver accountResolver;
   private final IdentifiedUser.GenericFactory userFactory;
@@ -49,14 +49,14 @@
 
   @Inject
   public UserEventWorker(
-      ChangeHooks hooks,
+      EventSource source,
       WorkQueue workQueue,
       AccountResolver accountResolver,
       IdentifiedUser.GenericFactory userFactory,
       ThreadLocalRequestContext threadLocalRequestContext,
       PluginUser pluginUser,
       SchemaFactory<ReviewDb> schemaFactory) {
-    this.hooks = hooks;
+    this.source = source;
     this.workQueue = workQueue;
     this.accountResolver = accountResolver;
     this.userFactory = userFactory;
@@ -111,7 +111,7 @@
           }
 
           IdentifiedUser user = userFactory.create(userAccount.getId());
-          hooks.addChangeListener(publisher, user);
+          source.addEventListener(publisher, user);
           LOGGER.info("Listen events as : {}", userName);
         } catch (OrmException e) {
           LOGGER.error("Could not query database for listenAs", e);
@@ -129,7 +129,7 @@
 
   @Override
   public void removePublisher(final Publisher publisher) {
-    hooks.removeChangeListener(publisher);
+    source.removeEventListener(publisher);
   }
 
   @Override