Set event.type to default routingKey

The type of the event is much more useful than a static routingKey.
Keep using the routingKey from the config if specified for backwards
compatibility.

Bug: Issue 16775
Change-Id: I38e7da53fef3ad19e2f8ea551290d09fe8db2fc9
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 0a35f54..8096556 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
@@ -181,7 +181,7 @@
   }
 
   private boolean publishEvent(Event event) {
-    return session.publish(gson.toJson(event));
+    return session.publish(gson.toJson(event), event.type);
   }
 
   private void connect() {
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 7d0669f..841ed8f 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
@@ -20,5 +20,5 @@
 
   void disconnect();
 
-  boolean publish(String message);
+  boolean publish(String message, String eventType);
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
index 5b2e0d2..e0ee829 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
@@ -163,18 +163,25 @@
   }
 
   @Override
-  public boolean publish(String messageBody) {
+  public boolean publish(String messageBody, String eventType) {
     if (channel == null || !channel.isOpen()) {
       channel = getChannel();
     }
     if (channel != null && channel.isOpen()) {
+      String routingKey;
       Message message = properties.getSection(Message.class);
+      if (message.routingKey != null && !message.routingKey.isEmpty()) {
+        // Set routingKey from configuration.
+        routingKey = message.routingKey;
+      } else {
+        routingKey = eventType;
+      }
       Exchange exchange = properties.getSection(Exchange.class);
       try {
         logger.atFine().log("Sending message.");
         channel.basicPublish(
             exchange.name,
-            message.routingKey,
+            routingKey,
             properties.getAMQProperties().getBasicProperties(),
             messageBody.getBytes(CharEncoding.UTF_8));
         return true;
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index dced3c4..76ba7ce 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -71,7 +71,8 @@
     * The priority of message. if not specified, defaults to 0.
 
 * `message.routingKey`
-    * The name of routingKey. This is stored to message property.
+    * The name of routingKey. This is stored to message property. If not specified, defaults to
+      the type of the Gerrit event (e.g. "patchset-created", "change-merged").
 
 * `gerrit.name`
     * The name of gerrit(not hostname). This is your given name to identify your gerrit.
@@ -116,7 +117,7 @@
 |exchange.name        | **gerrit.publish**
 |message.deliveryMode | 1
 |message.priority     | 0
-|message.routingKey   | *Empty*
+|message.routingKey   | **event.type**
 |gerrit.name          | *Empty*
 |gerrit.hostname      | *Empty*
 |gerrit.scheme        | **ssh**