Merge branch 'stable-2.14'

* stable-2.14:
  Add config option to ignore drafts
  Remove explicit package declaration in listener methods
  Bind DraftPublishedListener
  Update bazlets to use released API version 2.14

Change-Id: I5257d532d4261c2f833e1991eb9963df1ca0b997
diff --git a/WORKSPACE b/WORKSPACE
index 5716471..b8aa9d1 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,28 +3,28 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "3bec81727c69207e591ae1761d5a78d8ec418a0b",
+    commit = "8e0bb37977452a66141833370430f307e959acfb",
     #    local_path = "/home/<user>/projects/bazlets",
 )
 
 # Release Plugin API
-#load("@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-#     "gerrit_api")
+load("@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+     "gerrit_api")
 
 # Snapshot Plugin API
-load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-    "gerrit_api_maven_local",
-)
+#load(
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+#    "gerrit_api_maven_local",
+#)
 load(
     "@com_googlesource_gerrit_bazlets//:gerrit_gwt.bzl",
     "gerrit_gwt",
 )
 
 # Load release Plugin API
-# gerrit_api()
+gerrit_api()
 
 # Load snapshot Plugin API
-gerrit_api_maven_local()
+# gerrit_api_maven_local()
 
 gerrit_gwt()
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java
index f0419ab..9da4247 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java
@@ -21,6 +21,8 @@
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
 import com.google.gerrit.common.errors.NoSuchGroupException;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.client.ChangeStatus;
 import com.google.gerrit.extensions.common.ChangeInfo;
 import com.google.gerrit.extensions.events.DraftPublishedListener;
 import com.google.gerrit.extensions.events.RevisionCreatedListener;
@@ -34,6 +36,7 @@
 import com.google.gerrit.server.account.AccountByEmailCache;
 import com.google.gerrit.server.account.AccountResolver;
 import com.google.gerrit.server.account.GroupMembers;
+import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.gerrit.server.group.GroupsCollection;
@@ -76,6 +79,7 @@
   private final ReviewersConfig.Factory configFactory;
   private final Provider<CurrentUser> user;
   private final ChangeQueryBuilder queryBuilder;
+  private final boolean ignoreDrafts;
 
   @Inject
   ChangeEventListener(
@@ -92,7 +96,9 @@
       final ChangeData.Factory changeDataFactory,
       final ReviewersConfig.Factory configFactory,
       final Provider<CurrentUser> user,
-      final ChangeQueryBuilder queryBuilder) {
+      final ChangeQueryBuilder queryBuilder,
+      final PluginConfigFactory cfgFactory,
+      @PluginName String pluginName) {
     this.accountResolver = accountResolver;
     this.byEmailCache = byEmailCache;
     this.groupsCollection = groupsCollection;
@@ -107,18 +113,24 @@
     this.configFactory = configFactory;
     this.user = user;
     this.queryBuilder = queryBuilder;
+    this.ignoreDrafts =
+        cfgFactory
+            .getGlobalPluginConfig(pluginName)
+            .getBoolean(pluginName, null, "ignoreDrafts", false);
   }
 
   @Override
-  public void onRevisionCreated(
-      com.google.gerrit.extensions.events.RevisionCreatedListener.Event event) {
+  public void onRevisionCreated(RevisionCreatedListener.Event event) {
     ChangeInfo c = event.getChange();
+    if (ignoreDrafts && c.status == ChangeStatus.DRAFT) {
+      log.debug("Ignoring draft change");
+      return;
+    }
     onEvent(new Project.NameKey(c.project), c._number, event.getWho().email);
   }
 
   @Override
-  public void onDraftPublished(
-      com.google.gerrit.extensions.events.DraftPublishedListener.Event event) {
+  public void onDraftPublished(DraftPublishedListener.Event event) {
     ChangeInfo c = event.getChange();
     onEvent(new Project.NameKey(c.project), c._number, event.getWho().email);
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
index 98dad1b..0764524 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
@@ -18,6 +18,7 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.config.FactoryModule;
+import com.google.gerrit.extensions.events.DraftPublishedListener;
 import com.google.gerrit.extensions.events.RevisionCreatedListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
@@ -52,6 +53,7 @@
     }
 
     DynamicSet.bind(binder(), RevisionCreatedListener.class).to(ChangeEventListener.class);
+    DynamicSet.bind(binder(), DraftPublishedListener.class).to(ChangeEventListener.class);
     factory(DefaultReviewers.Factory.class);
     factory(ReviewersConfig.Factory.class);
 
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 6782350..5fe2cb8 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -8,6 +8,7 @@
   [reviewers]
     enableREST = true
     enableUI = false
+    ignoreDrafts = true
 ```
 
 reviewers.enableREST
@@ -18,6 +19,11 @@
 :	Enable the UI.  When set to false, the 'Reviewers' menu is not displayed
 	on the project screen. Defaults to true, or false when `enableREST` is false.
 
+reviewers.ignoreDrafts
+:	Ignore draft changes. When set to true draft changes are not considered when
+	adding reviewers. Defaults to false. To ignore drafts on a per-project basis
+	set this value to false and add "-status:draft" to filter in relevant projects.
+
 
 Per project configuration of the @PLUGIN@ plugin is done in the
 `reviewers.config` file of the project. Missing values are inherited