Add configuration for levels of protection

Add the ability to enable/disable protection on specific events:
either branch deleted or on non-fast-forward.  Both are on by
default to maintain legacy behavior, but if desired, it can be
disabled.

Change-Id: I5b36476852aa7df33f8b06f71298d7b0a27898d1
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
index 714b2c6..cbaffad 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
@@ -26,9 +26,11 @@
 import static org.eclipse.jgit.lib.Constants.R_HEADS;
 import static org.eclipse.jgit.lib.Constants.R_TAGS;
 
+import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.project.ProjectControl;
@@ -53,26 +55,35 @@
   private final CurrentUser user;
   private final GitRepositoryManager repoManager;
   private final BackupRef backupRef;
+  private final boolean protectDeleted;
+  private final boolean protectFastForward;
 
   @Inject
   RefUpdateListener(ProjectControl.GenericFactory p,
       CurrentUser user,
       GitRepositoryManager repoManager,
-      BackupRef backupRef) {
+      BackupRef backupRef,
+      PluginConfigFactory cfg,
+      @PluginName String pluginName) {
     this.projectControl = p;
     this.user = user;
     this.repoManager = repoManager;
     this.backupRef = backupRef;
+    this.protectDeleted =
+        cfg.getFromGerritConfig(pluginName).getBoolean("protectDeleted", true);
+    this.protectFastForward =
+        cfg.getFromGerritConfig(pluginName).getBoolean("protectFastForward", true);
   }
 
   @Override
   public void onGitReferenceUpdated(final Event event) {
-    if (isRelevantRef(event)) {
+    if ((protectDeleted || protectFastForward) && isRelevantRef(event)) {
       Project.NameKey nameKey = new Project.NameKey(event.getProjectName());
       try {
         ProjectResource project =
             new ProjectResource(projectControl.controlFor(nameKey, user));
-        if (isRefDeleted(event) || isNonFastForwardUpdate(event, project)) {
+        if ((protectDeleted && isRefDeleted(event))
+            || (protectFastForward && isNonFastForwardUpdate(event, project))) {
           backupRef.createBackup(event, project);
         }
       } catch (NoSuchProjectException | IOException e) {