Some improvements
* More decoupling interface from implementation.
* Remove unnecessary imports and comments.
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 a188982..79baa9d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -30,8 +30,6 @@
import com.googlesource.gerrit.plugins.rabbitmq.config.section.Message;
import com.googlesource.gerrit.plugins.rabbitmq.config.section.Monitor;
import com.googlesource.gerrit.plugins.rabbitmq.config.section.Section;
-import com.googlesource.gerrit.plugins.rabbitmq.message.DefaultChangeListener;
-import com.googlesource.gerrit.plugins.rabbitmq.message.IdentifiedChangeListener;
import com.googlesource.gerrit.plugins.rabbitmq.message.MessagePublisher;
import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
@@ -41,16 +39,15 @@
import com.googlesource.gerrit.plugins.rabbitmq.solver.SolverImpl;
import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
import com.googlesource.gerrit.plugins.rabbitmq.solver.SolverFactory;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorker;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorkerFactory;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.DefaultChangeWorker;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.UserChangeWorker;
class Module extends AbstractModule {
@Override
protected void configure() {
- bind(Gerrit.class);
- bind(SolverImpl.class);
- bind(IdentifiedChangeListener.class);
- bind(RabbitMQManager.class);
-
bind(Section.class).annotatedWith(Names.named("amqp")).to(AMQP.class);
bind(Section.class).annotatedWith(Names.named("exchange")).to(Exchange.class);
bind(Section.class).annotatedWith(Names.named("gerrit")).to(Gerrit.class);
@@ -61,9 +58,9 @@
install(new FactoryModuleBuilder().implement(Session.class, AMQPSession.class).build(SessionFactory.class));
install(new FactoryModuleBuilder().implement(Publisher.class, MessagePublisher.class).build(PublisherFactory.class));
install(new FactoryModuleBuilder().implement(Properties.class, PluginProperties.class).build(PropertiesFactory.class));
+ install(new FactoryModuleBuilder().implement(ChangeWorker.class, UserChangeWorker.class).build(ChangeWorkerFactory.class));
DynamicSet.bind(binder(), LifecycleListener.class).to(RabbitMQManager.class);
- DynamicSet.bind(binder(), LifecycleListener.class).to(DefaultChangeListener.class);
- DynamicSet.bind(binder(), ChangeListener.class).to(DefaultChangeListener.class);
+ DynamicSet.bind(binder(), ChangeListener.class).to(DefaultChangeWorker.class);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMQManager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMQManager.java
index 043d529..d2a1dec 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMQManager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMQManager.java
@@ -23,15 +23,14 @@
import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
import com.googlesource.gerrit.plugins.rabbitmq.config.PropertiesFactory;
import com.googlesource.gerrit.plugins.rabbitmq.config.section.Gerrit;
-import com.googlesource.gerrit.plugins.rabbitmq.config.section.Section;
-import com.googlesource.gerrit.plugins.rabbitmq.message.DefaultChangeListener;
-import com.googlesource.gerrit.plugins.rabbitmq.message.IdentifiedChangeListener;
import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
import com.googlesource.gerrit.plugins.rabbitmq.solver.SolverFactory;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorker;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorkerFactory;
+import com.googlesource.gerrit.plugins.rabbitmq.worker.DefaultChangeWorker;
-import org.apache.commons.lang.builder.ToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,8 +52,8 @@
private final String pluginName;
private final Path pluginDataDir;
- private final DefaultChangeListener defaultChangeListener;
- private final IdentifiedChangeListener identifiedChangeListener;
+ private final ChangeWorker defaultChangeWorker;
+ private final ChangeWorker userChangeWorker;
private final PublisherFactory publisherFactory;
private final PropertiesFactory propFactory;
private final SolverFactory solverFactory;
@@ -64,15 +63,15 @@
public RabbitMQManager(
@PluginName final String pluginName,
@PluginData final File pluginData,
- final DefaultChangeListener defaultChangeListener,
- final IdentifiedChangeListener identifiedChangeListener,
+ final DefaultChangeWorker defaultChangeWorker,
+ final ChangeWorkerFactory changeWorkerFactory,
final PublisherFactory publisherFactory,
final PropertiesFactory propFactory,
final SolverFactory solverFactory) {
this.pluginName = pluginName;
this.pluginDataDir = pluginData.toPath();
- this.defaultChangeListener = defaultChangeListener;
- this.identifiedChangeListener = identifiedChangeListener;
+ this.defaultChangeWorker = defaultChangeWorker;
+ this.userChangeWorker = changeWorkerFactory.create();
this.publisherFactory = publisherFactory;
this.propFactory = propFactory;
this.solverFactory = solverFactory;
@@ -89,9 +88,9 @@
publisher.start();
String listenAs = properties.getSection(Gerrit.class).listenAs;
if (!listenAs.isEmpty()) {
- identifiedChangeListener.addPublisher(publisher, listenAs);
+ userChangeWorker.addPublisher(publisher, listenAs);
} else {
- defaultChangeListener.addPublisher(publisher);
+ defaultChangeWorker.addPublisher(publisher);
}
publisherList.add(publisher);
}
@@ -103,9 +102,9 @@
publisher.stop();
String listenAs = publisher.getProperties().getSection(Gerrit.class).listenAs;
if (!listenAs.isEmpty()) {
- identifiedChangeListener.removePublisher(publisher);
+ userChangeWorker.removePublisher(publisher);
} else {
- defaultChangeListener.removePublisher(publisher);
+ defaultChangeWorker.removePublisher(publisher);
}
}
publisherList.clear();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java
index 2416ff6..6cd7e81 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java
@@ -13,10 +13,7 @@
// limitations under the License.
package com.googlesource.gerrit.plugins.rabbitmq.session;
-import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
-
public interface Session {
-// public Properties getProperties();
public boolean isOpen();
public void connect();
public void disconnect();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/ChangeWorker.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/ChangeWorker.java
new file mode 100644
index 0000000..5bd7e91
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/ChangeWorker.java
@@ -0,0 +1,10 @@
+package com.googlesource.gerrit.plugins.rabbitmq.worker;
+
+import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
+
+public interface ChangeWorker {
+ public void addPublisher(Publisher publisher);
+ public void addPublisher(Publisher publisher, String userName);
+ public void removePublisher(Publisher publisher);
+ public void clear();
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/ChangeWorkerFactory.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/ChangeWorkerFactory.java
new file mode 100644
index 0000000..b6f7e0d
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/ChangeWorkerFactory.java
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// 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.googlesource.gerrit.plugins.rabbitmq.worker;
+
+public interface ChangeWorkerFactory {
+ public ChangeWorker create();
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/DefaultChangeListener.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultChangeWorker.java
similarity index 73%
rename from src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/DefaultChangeListener.java
rename to src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultChangeWorker.java
index 067a6d6..91cd705 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/DefaultChangeListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultChangeWorker.java
@@ -12,13 +12,14 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package com.googlesource.gerrit.plugins.rabbitmq.message;
+package com.googlesource.gerrit.plugins.rabbitmq.worker;
import com.google.gerrit.common.ChangeListener;
-import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.server.events.ChangeEvent;
import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,41 +27,33 @@
import java.util.concurrent.CopyOnWriteArraySet;
@Singleton
-public class DefaultChangeListener implements ChangeListener, LifecycleListener {
+public class DefaultChangeWorker implements ChangeListener, ChangeWorker {
- private static final Logger LOGGER = LoggerFactory.getLogger(DefaultChangeListener.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(DefaultChangeWorker.class);
private final Set<Publisher> publishers = new CopyOnWriteArraySet<>();
+ @Override
public void addPublisher(Publisher publisher) {
publishers.add(publisher);
}
+ @Override
+ public void addPublisher(Publisher publisher, String userName) {
+ LOGGER.warn("addPublisher() with username '{}' was called. Hence no operation.", userName);
+ }
+
+ @Override
public void removePublisher(Publisher publisher) {
publishers.remove(publisher);
}
+ @Override
public void clear() {
publishers.clear();
}
@Override
- public void start() {
- LOGGER.info("Start default listener.");
- for (Publisher publisher : publishers) {
- publisher.start();
- }
- }
-
- @Override
- public void stop() {
- LOGGER.info("Stop default listener.");
- for (Publisher publisher : publishers) {
- publisher.stop();
- }
- }
-
- @Override
public void onChangeEvent(ChangeEvent event) {
for (Publisher publisher : publishers) {
publisher.onChangeEvent(event);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/IdentifiedChangeListener.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserChangeWorker.java
similarity index 86%
rename from src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/IdentifiedChangeListener.java
rename to src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserChangeWorker.java
index 5f5a756..46efe58 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/IdentifiedChangeListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserChangeWorker.java
@@ -12,10 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package com.googlesource.gerrit.plugins.rabbitmq.message;
+package com.googlesource.gerrit.plugins.rabbitmq.worker;
import com.google.gerrit.common.ChangeHooks;
-import com.google.gerrit.common.ChangeListener;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser;
@@ -31,12 +30,14 @@
import com.google.inject.Provider;
import com.google.inject.ProvisionException;
+import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class IdentifiedChangeListener {
+public class UserChangeWorker implements ChangeWorker {
- private static final Logger LOGGER = LoggerFactory.getLogger(IdentifiedChangeListener.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(UserChangeWorker.class);
private final ChangeHooks hooks;
private final WorkQueue workQueue;
@@ -47,7 +48,7 @@
private final SchemaFactory<ReviewDb> schemaFactory;
@Inject
- public IdentifiedChangeListener(
+ public UserChangeWorker(
ChangeHooks hooks,
WorkQueue workQueue,
AccountResolver accountResolver,
@@ -64,6 +65,12 @@
this.schemaFactory = schemaFactory;
}
+ @Override
+ public void addPublisher(final Publisher publisher) {
+ LOGGER.warn("addPublisher() without username was called. Hence no operation.");
+ }
+
+ @Override
public void addPublisher(final Publisher publisher, final String userName) {
workQueue.getDefaultQueue().submit(new Runnable() {
private ReviewDb db;
@@ -120,7 +127,13 @@
});
}
- public void removePublisher(Publisher publisher) {
+ @Override
+ public void removePublisher(final Publisher publisher) {
hooks.removeChangeListener(publisher);
}
+
+ @Override
+ public void clear() {
+ // no op.
+ }
}