Remove duplicated executor creation code

Change-Id: Ie6c7c9aa56360fa083b64aa9224de90d2da4d841
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java
new file mode 100644
index 0000000..0a87074
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/ExecutorProvider.java
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 Ericsson
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.ericsson.gerrit.plugins.highavailability;
+
+import com.google.gerrit.extensions.events.LifecycleListener;
+import com.google.gerrit.server.git.WorkQueue;
+import com.google.inject.Provider;
+
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+
+public abstract class ExecutorProvider
+    implements Provider<ScheduledThreadPoolExecutor>, LifecycleListener {
+  private WorkQueue.Executor executor;
+
+  protected ExecutorProvider(WorkQueue workQueue, int threadPoolSize,
+      String threadNamePrefix) {
+    executor = workQueue.createQueue(threadPoolSize, threadNamePrefix);
+  }
+
+  @Override
+  public void start() {
+    // do nothing
+  }
+
+  @Override
+  public void stop() {
+    executor.shutdown();
+    executor.unregisterWorkQueue();
+    executor = null;
+  }
+
+  @Override
+  public ScheduledThreadPoolExecutor get() {
+    return executor;
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheExecutorProvider.java
index c427d17..98324a9 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheExecutorProvider.java
@@ -14,42 +14,20 @@
 
 package com.ericsson.gerrit.plugins.highavailability.cache;
 
-import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
 import com.ericsson.gerrit.plugins.highavailability.Configuration;
-
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import com.ericsson.gerrit.plugins.highavailability.ExecutorProvider;
 
 @Singleton
-class CacheExecutorProvider
-    implements Provider<ScheduledThreadPoolExecutor>, LifecycleListener {
-  private WorkQueue.Executor executor;
+class CacheExecutorProvider extends ExecutorProvider {
 
   @Inject
   CacheExecutorProvider(WorkQueue workQueue,
       Configuration config) {
-    executor = workQueue.createQueue(config.getCacheThreadPoolSize(),
+    super(workQueue, config.getCacheThreadPoolSize(),
         "Forward-cache-eviction-event");
   }
-
-  @Override
-  public void start() {
-    // do nothing
-  }
-
-  @Override
-  public void stop() {
-    executor.shutdown();
-    executor.unregisterWorkQueue();
-    executor = null;
-  }
-
-  @Override
-  public ScheduledThreadPoolExecutor get() {
-    return executor;
-  }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java
index 6a6c3c3..95b595d 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/event/EventExecutorProvider.java
@@ -14,42 +14,19 @@
 
 package com.ericsson.gerrit.plugins.highavailability.event;
 
-import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
 import com.ericsson.gerrit.plugins.highavailability.Configuration;
-
-import java.util.concurrent.ScheduledThreadPoolExecutor;
+import com.ericsson.gerrit.plugins.highavailability.ExecutorProvider;
 
 @Singleton
-class EventExecutorProvider
-    implements Provider<ScheduledThreadPoolExecutor>, LifecycleListener {
-  private WorkQueue.Executor executor;
+class EventExecutorProvider extends ExecutorProvider {
 
   @Inject
   EventExecutorProvider(WorkQueue workQueue,
       Configuration config) {
-    executor = workQueue.createQueue(config.getEventThreadPoolSize(),
-        "Forward-stream-event");
-  }
-
-  @Override
-  public void start() {
-    // do nothing
-  }
-
-  @Override
-  public void stop() {
-    executor.shutdown();
-    executor.unregisterWorkQueue();
-    executor = null;
-  }
-
-  @Override
-  public ScheduledThreadPoolExecutor get() {
-    return executor;
+    super(workQueue, config.getEventThreadPoolSize(), "Forward-stream-event");
   }
 }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexExecutorProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexExecutorProvider.java
index 73aa3be..f0a2b62 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexExecutorProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexExecutorProvider.java
@@ -14,41 +14,19 @@
 
 package com.ericsson.gerrit.plugins.highavailability.index;
 
-import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
 import com.ericsson.gerrit.plugins.highavailability.Configuration;
-
-import java.util.concurrent.Executor;
+import com.ericsson.gerrit.plugins.highavailability.ExecutorProvider;
 
 @Singleton
-class IndexExecutorProvider implements Provider<Executor>,
-    LifecycleListener {
-  private WorkQueue.Executor executor;
+class IndexExecutorProvider extends ExecutorProvider {
 
   @Inject
-  IndexExecutorProvider(WorkQueue workQueue, Configuration config) {
-    executor = workQueue.createQueue(config.getIndexThreadPoolSize(),
-        "Forward-index-event");
-  }
-
-  @Override
-  public void start() {
-    //do nothing
-  }
-
-  @Override
-  public void stop() {
-    executor.shutdown();
-    executor.unregisterWorkQueue();
-    executor = null;
-  }
-
-  @Override
-  public Executor get() {
-    return executor;
+  IndexExecutorProvider(WorkQueue workQueue,
+      Configuration config) {
+    super(workQueue, config.getIndexThreadPoolSize(), "Forward-index-event");
   }
 }