Support for dislike warnings option

This options allows to either post -1 or 0 on patchset that has
warnings about files no longer being part of their component

Change-Id: Icc8e1933eb1d0b1eaf3de5ddc96f69baffbbccb4
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
diff --git a/README.md b/README.md
index b328169..a080e7b 100644
--- a/README.md
+++ b/README.md
@@ -20,4 +20,5 @@
  - autoaddreviewers = true - if true, automaticaly matchses pachset files under their component based of maintainers file configuration
  - allowmaintainersubmit = true - if true, automaticaly post +2 on patch after all respective component maintainers have added +1
  - autosubmit = true - if true, after previous step automaticaly submits patch
+ - dislikewarnings = true - if true, if any warnings are present, -1 review is posted on patch, no review otherwise
    
diff --git a/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java b/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java
index d0a2e90..a0df89f 100644
--- a/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java
+++ b/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java
@@ -125,7 +125,7 @@
 
             final Set<WarningGenerator.ComponentChangeWarning> warnings =
                     generateComponentChangeWarnings(index, renamedEntryToComponentsIndex);
-            warningPusher.sendWarnings(warnings, change, mostCurrentPatchSet, settings.getPluginUserName());
+            warningPusher.sendWarnings(warnings, change, mostCurrentPatchSet, settings);
             LOG.info("Warnings for change {} successfully added", change.getId());
         } catch (OrmException e) {
             throw new IllegalStateException("Unable to open review DB", e);
diff --git a/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java b/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
index 052874b..9c3f6fd 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
@@ -56,6 +56,9 @@
     private static final String AUTO_SUBMIT = "autosubmit";
     private static final boolean DEFAULT_AUTO_SUBMIT = false;
 
+    private static final String DISLIKE_WARNINGS = "dislikewarnings";
+    private static final boolean DEFAULT_DISLIKE_WARNINGS = false;
+
     @Inject
     private PluginConfigFactory cfg;
 
@@ -77,6 +80,7 @@
                 .setAllowMaintainersSubmit(allowMaintainersSubmitOrDefault(branchName, closestBranch))
                 .setAutoAddReviewers(autoAddReviewersOrDefault(branchName, closestBranch))
                 .setAutoSubmit(autoSubmitOrDefault(branchName, closestBranch))
+                .setDislikeWarnings(dislikeWarningsOrDefault(branchName, closestBranch))
                 .setBranch(globalPluginConfig().getSubsections(BRANCH_SECTION)
                         .stream()
                         .filter(subSection -> subSection.equals(branchName))
@@ -97,6 +101,10 @@
         return getKey(branch, closesBranch, ALLOW_SUBMIT, DEFAULT_ALLOW_SUBMIT, Boolean::valueOf);
     }
 
+    private Boolean dislikeWarningsOrDefault(final String branch, final String closesBranch){
+        return getKey(branch, closesBranch, DISLIKE_WARNINGS, DEFAULT_DISLIKE_WARNINGS, Boolean::valueOf);
+    }
+
     private String fileNameRefOrDefault(final String branch, final String closesBranch) {
         return getKey(branch, closesBranch, MAINTAINERS_FILE_REF, DEFAULT_MAINTAINERS_FILE_REF, String::valueOf);
     }
diff --git a/src/main/java/io/fd/maintainer/plugin/service/dto/PluginBranchSpecificSettings.java b/src/main/java/io/fd/maintainer/plugin/service/dto/PluginBranchSpecificSettings.java
index 49960ab..4005a27 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/dto/PluginBranchSpecificSettings.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/dto/PluginBranchSpecificSettings.java
@@ -29,6 +29,7 @@
     private final boolean allowMaintainersSubmit;
     private final boolean autoAddReviewers;
     private final boolean autoSubmit;
+    private final boolean dislikeWarnings;
 
     private PluginBranchSpecificSettings(final String pluginUserName,
                                          final String branch,
@@ -36,7 +37,8 @@
                                          final String localFilePath,
                                          final boolean allowMaintainersSubmit,
                                          final boolean autoAddReviewers,
-                                         final boolean autoSubmit) {
+                                         final boolean autoSubmit,
+                                         final boolean dislikeWarnings) {
         this.pluginUserName = pluginUserName;
         this.branch = branch;
         this.fileRef = fileRef;
@@ -44,10 +46,7 @@
         this.allowMaintainersSubmit = allowMaintainersSubmit;
         this.autoAddReviewers = autoAddReviewers;
         this.autoSubmit = autoSubmit;
-    }
-
-    public String getFileRef() {
-        return fileRef;
+        this.dislikeWarnings = dislikeWarnings;
     }
 
     public String getLocalFilePath() {
@@ -74,14 +73,21 @@
         return pluginUserName;
     }
 
+    public boolean isDislikeWarnings() {
+        return dislikeWarnings;
+    }
+
     @Override
     public String toString() {
         return "PluginBranchSpecificSettings{" +
-                "branch='" + branch + '\'' +
+                "pluginUserName='" + pluginUserName + '\'' +
+                ", branch='" + branch + '\'' +
                 ", fileRef='" + fileRef + '\'' +
                 ", localFilePath='" + localFilePath + '\'' +
                 ", allowMaintainersSubmit=" + allowMaintainersSubmit +
                 ", autoAddReviewers=" + autoAddReviewers +
+                ", autoSubmit=" + autoSubmit +
+                ", dislikeWarnings=" + dislikeWarnings +
                 '}';
     }
 
@@ -93,6 +99,7 @@
         private boolean allowMaintainersSubmit;
         private boolean autoAddReviewers;
         private boolean autoSubmit;
+        private boolean dislikeWarnings;
 
         private static String reduceWildcard(String input) {
             return input.contains("*")
@@ -142,9 +149,14 @@
             return this;
         }
 
+        public PluginSettingsBuilder setDislikeWarnings(final boolean dislikeWarnings) {
+            this.dislikeWarnings = dislikeWarnings;
+            return this;
+        }
+
         public PluginBranchSpecificSettings createPluginSettings() {
             return new PluginBranchSpecificSettings(pluginUserName, branch, fileRef, localFilePath,
-                    allowMaintainersSubmit, autoAddReviewers, autoSubmit);
+                    allowMaintainersSubmit, autoAddReviewers, autoSubmit, dislikeWarnings);
         }
     }
 }
diff --git a/src/main/java/io/fd/maintainer/plugin/service/push/WarningPusher.java b/src/main/java/io/fd/maintainer/plugin/service/push/WarningPusher.java
index 464a016..e194988 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/push/WarningPusher.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/push/WarningPusher.java
@@ -33,6 +33,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
+import io.fd.maintainer.plugin.service.dto.PluginBranchSpecificSettings;
 import io.fd.maintainer.plugin.util.CommonTasks;
 import io.fd.maintainer.plugin.util.WarningGenerator;
 import java.io.IOException;
@@ -71,7 +72,7 @@
     public void sendWarnings(@Nonnull final Set<ComponentChangeWarning> comments,
                              @Nonnull final Change change,
                              @Nonnull final PatchSet patchSet,
-                             @Nonnull final String onBehalfOf) throws OrmException {
+                             @Nonnull final PluginBranchSpecificSettings settings) throws OrmException {
         if (comments.isEmpty()) {
             LOG.warn("No warnings");
             return;
@@ -81,9 +82,15 @@
             ChangeResource changeResource = changesCollection.parse(change.getId());
             final RevisionResource revisionResource = revisions.parse(changeResource, IdString.fromUrl("current"));
 
-            ReviewInput review = ReviewInput.dislike()
-                    .message(formatComments(comments));// review -1
-            review.onBehalfOf = onBehalfOf;
+            ReviewInput review;
+            if (settings.isDislikeWarnings()) {
+                review = ReviewInput.dislike();// review -1
+            } else {
+                review = ReviewInput.noScore();// review 0
+            }
+
+            review.message(formatComments(comments));
+            review.onBehalfOf = settings.getPluginUserName();
 
             reviewProvider.get().apply(revisionResource, review);
         } catch (IOException | RestApiException | UpdateException e) {