[Refactoring] Split processing in onChangeEvent
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
index c21c973..091d032 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -106,77 +106,81 @@
   @Inject
   Submit submitter;
 
-
   @Override
   synchronized public void onChangeEvent(final ChangeEvent event) {
     if (event instanceof TopicChangedEvent) {
-      final TopicChangedEvent newComment = (TopicChangedEvent) event;
-      final ChangeAttribute change = newComment.change;
-      processAtomicChange(change);
+      onTopicChanged((TopicChangedEvent)event);
     }
-    if (event instanceof PatchSetCreatedEvent) {
-      final PatchSetCreatedEvent newComment = (PatchSetCreatedEvent) event;
-      final ChangeAttribute change = newComment.change;
-      Integer.parseInt(change.number);
-      processAtomicChange(change);
+    else if (event instanceof PatchSetCreatedEvent) {
+      onPatchSetCreated((PatchSetCreatedEvent)event);
     }
+    else if (event instanceof CommentAddedEvent) {
+      onCommendAdded((CommentAddedEvent)event);
+    }
+  }
 
-    if (event instanceof CommentAddedEvent) {
-      final CommentAddedEvent newComment = (CommentAddedEvent) event;
-      final ChangeAttribute change = newComment.change;
-      final int reviewNumber = Integer.parseInt(change.number);
-      try {
-        api.changes().id(reviewNumber).get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
-        if (newComment.author.email == config.getBotEmail()) {
-          return;
-        }
-        final String topic = change.topic;
-        if (atomicityHelper.isSubmittable(Integer.parseInt(newComment.change.number))) {
-          log.info(String.format("Change %d is submittable. Will try to merge all related changes.", reviewNumber));
-          final List<ChangeInfo> related = Lists.newArrayList();
-          if (topic != null) {
-            related.addAll(api.changes().query("status: open AND topic: " + topic)
-                .withOption(ListChangesOption.CURRENT_REVISION).get());
-          } else {
-            related.add(api.changes().id(change.id).get(EnumSet.of(ListChangesOption.CURRENT_REVISION)));
-          }
-          boolean mergeable = true;
-          String why = null;
-          for (final ChangeInfo info : related) {
-            api.changes().id(change.id).get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
-            if (!info.mergeable) {
-              mergeable = false;
-              why = String.format("Review %s is approved but not mergeable.", info._number);
-            }
-            if (!atomicityHelper.isSubmittable(info._number)) {
-              mergeable = false;
-              // why = String.format("Review %s is not approved.",
-              // info._number);
-            }
-          }
-          if (mergeable) {
-            log.debug(String.format("Change %d is mergeable", reviewNumber));
-            for (final ChangeInfo info : related) {
-              final SubmitInput input = new SubmitInput();
-              input.waitForMerge = true;
-              final Set<Account.Id> ids = byEmailCache.get(config.getBotEmail());
-              final IdentifiedUser bot = factory.create(ids.iterator().next());
-              final ChangeControl ctl = changeFactory.controlFor(new Change.Id(info._number), bot);
-              final ChangeData changeData = changeDataFactory.create(db.get(), new Change.Id(info._number));
+  private void onTopicChanged(final TopicChangedEvent event) {
+    processAtomicChange(event.change);
+  }
 
-              final RevisionResource r = new RevisionResource(collection.parse(ctl), changeData.currentPatchSet());
-              submitter.apply(r, input);
-            }
-          } else {
-            if (why != null) {
-              reviewUpdater.commentOnReview(reviewNumber, AutomergeConfig.CANT_MERGE_COMMENT_FILE);
-            }
-          }
-        }
-      } catch (final RestApiException | NoSuchChangeException | OrmException | IOException e) {
-        log.error("An exception occured while trying to atomic merge a change.", e);
-        throw new RuntimeException(e);
+  private void onPatchSetCreated(final PatchSetCreatedEvent event) {
+    processAtomicChange(event.change);
+  }
+
+  private void onCommendAdded(final CommentAddedEvent newComment) {
+    final ChangeAttribute change = newComment.change;
+    final int reviewNumber = Integer.parseInt(change.number);
+    try {
+      api.changes().id(reviewNumber).get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
+      if (newComment.author.email == config.getBotEmail()) {
+        return;
       }
+      final String topic = change.topic;
+      if (atomicityHelper.isSubmittable(Integer.parseInt(newComment.change.number))) {
+        log.info(String.format("Change %d is submittable. Will try to merge all related changes.", reviewNumber));
+        final List<ChangeInfo> related = Lists.newArrayList();
+        if (topic != null) {
+          related.addAll(api.changes().query("status: open AND topic: " + topic)
+              .withOption(ListChangesOption.CURRENT_REVISION).get());
+        } else {
+          related.add(api.changes().id(change.id).get(EnumSet.of(ListChangesOption.CURRENT_REVISION)));
+        }
+        boolean mergeable = true;
+        String why = null;
+        for (final ChangeInfo info : related) {
+          api.changes().id(change.id).get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
+          if (!info.mergeable) {
+            mergeable = false;
+            why = String.format("Review %s is approved but not mergeable.", info._number);
+          }
+          if (!atomicityHelper.isSubmittable(info._number)) {
+            mergeable = false;
+            // why = String.format("Review %s is not approved.",
+            // info._number);
+          }
+        }
+        if (mergeable) {
+          log.debug(String.format("Change %d is mergeable", reviewNumber));
+          for (final ChangeInfo info : related) {
+            final SubmitInput input = new SubmitInput();
+            input.waitForMerge = true;
+            final Set<Account.Id> ids = byEmailCache.get(config.getBotEmail());
+            final IdentifiedUser bot = factory.create(ids.iterator().next());
+            final ChangeControl ctl = changeFactory.controlFor(new Change.Id(info._number), bot);
+            final ChangeData changeData = changeDataFactory.create(db.get(), new Change.Id(info._number));
+
+            final RevisionResource r = new RevisionResource(collection.parse(ctl), changeData.currentPatchSet());
+            submitter.apply(r, input);
+          }
+        } else {
+          if (why != null) {
+            reviewUpdater.commentOnReview(reviewNumber, AutomergeConfig.CANT_MERGE_COMMENT_FILE);
+          }
+        }
+      }
+    } catch (final RestApiException | NoSuchChangeException | OrmException | IOException e) {
+      log.error("An exception occured while trying to atomic merge a change.", e);
+      throw new RuntimeException(e);
     }
   }
 
@@ -204,7 +208,6 @@
         throw new RuntimeException(e);
       }
     }
-
   }
 
   @Override