Merge branch 'stable-2.16'

* stable-2.16:
  Disable inputs in configuration screen for non-owners
  Fix REST API calls for projects with '/' in the name
  Add configuration menu to the repo-config screen in new UI

Change-Id: I292baaa0dc4946e1f8e646577bd3a4ee8abac48a
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
index 6a71881..c421479 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
@@ -14,11 +14,10 @@
 
 package com.googlesource.gerrit.plugins.reviewersbyblame;
 
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.entities.PatchSet;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.config.PluginConfig;
@@ -32,11 +31,7 @@
 import com.google.gerrit.server.query.change.ChangeData;
 import com.google.gerrit.server.util.RequestContext;
 import com.google.gerrit.server.util.ThreadLocalRequestContext;
-import com.google.gwtorm.server.OrmException;
-import com.google.gwtorm.server.SchemaFactory;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.ProvisionException;
 import java.io.IOException;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
@@ -54,11 +49,9 @@
   private final WorkQueue workQueue;
   private final IdentifiedUser.GenericFactory identifiedUserFactory;
   private final ThreadLocalRequestContext tl;
-  private final SchemaFactory<ReviewDb> schemaFactory;
   private final PluginConfigFactory cfg;
   private final String pluginName;
   private final ChangeData.Factory changeDataFactory;
-  private ReviewDb db;
 
   @Inject
   ChangeUpdatedListener(
@@ -67,7 +60,6 @@
       WorkQueue workQueue,
       IdentifiedUser.GenericFactory identifiedUserFactory,
       ThreadLocalRequestContext tl,
-      SchemaFactory<ReviewDb> schemaFactory,
       PluginConfigFactory cfg,
       ChangeData.Factory changeDataFactory,
       @PluginName String pluginName) {
@@ -76,7 +68,6 @@
     this.workQueue = workQueue;
     this.identifiedUserFactory = identifiedUserFactory;
     this.tl = tl;
-    this.schemaFactory = schemaFactory;
     this.cfg = cfg;
     this.changeDataFactory = changeDataFactory;
     this.pluginName = pluginName;
@@ -107,10 +98,9 @@
     }
 
     try (Repository git = repoManager.openRepository(projectName);
-        RevWalk rw = new RevWalk(git);
-        ReviewDb reviewDb = schemaFactory.open()) {
-      Change.Id changeId = new Change.Id(e.change.get().number);
-      ChangeData cd = changeDataFactory.create(reviewDb, projectName, changeId);
+        RevWalk rw = new RevWalk(git)) {
+      Change.Id changeId = Change.id(e.change.get().number);
+      ChangeData cd = changeDataFactory.create(projectName, changeId);
       if (cd == null) {
         log.warn(
             "Change with id: '{}' on project key: '{}' not found.",
@@ -119,7 +109,7 @@
         return;
       }
       Change change = cd.change();
-      PatchSet.Id psId = new PatchSet.Id(changeId, e.patchSet.get().number);
+      PatchSet.Id psId = PatchSet.id(changeId, e.patchSet.get().number);
       PatchSet ps = cd.patchSet(psId);
       if (ps == null) {
         log.warn("Patch set {} not found in change {}.", psId.get(), changeId.get());
@@ -149,36 +139,15 @@
                             public CurrentUser getUser() {
                               return identifiedUserFactory.create(change.getOwner());
                             }
-
-                            @Override
-                            public Provider<ReviewDb> getReviewDbProvider() {
-                              return new Provider<ReviewDb>() {
-                                @Override
-                                public ReviewDb get() {
-                                  if (db == null) {
-                                    try {
-                                      db = schemaFactory.open();
-                                    } catch (OrmException e) {
-                                      throw new ProvisionException("Cannot open ReviewDb", e);
-                                    }
-                                  }
-                                  return db;
-                                }
-                              };
-                            }
                           });
                   try {
                     task.run();
                   } finally {
                     tl.setContext(old);
-                    if (db != null) {
-                      db.close();
-                      db = null;
-                    }
                   }
                 }
               });
-    } catch (OrmException | IOException x) {
+    } catch (IOException x) {
       log.error(x.getMessage(), x);
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
index e929381..214c3ee 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
@@ -17,13 +17,13 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Ordering;
 import com.google.common.collect.Sets;
+import com.google.gerrit.entities.Account;
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.entities.Patch.ChangeType;
+import com.google.gerrit.entities.PatchSet;
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.AddReviewerInput;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.Patch.ChangeType;
-import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.AccountState;
 import com.google.gerrit.server.account.Emails;
@@ -31,7 +31,6 @@
 import com.google.gerrit.server.patch.PatchListCache;
 import com.google.gerrit.server.patch.PatchListEntry;
 import com.google.gerrit.server.patch.PatchListNotAvailableException;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
 import java.io.IOException;
@@ -171,7 +170,7 @@
                 })
             .greatestOf(reviewers.entrySet(), this.maxReviewers);
     for (Entry<Account, Integer> entry : entries) {
-      topReviewers.add(entry.getKey().getId());
+      topReviewers.add(entry.getKey().id());
     }
     return topReviewers;
   }
@@ -191,16 +190,16 @@
         try {
           Set<Account.Id> ids = emails.getAccountFor(commit.getAuthorIdent().getEmailAddress());
           for (Account.Id id : ids) {
-            Optional<Account> accountState = accountCache.get(id).map(AccountState::getAccount);
+            Optional<Account> accountState = accountCache.get(id).map(AccountState::account);
             if (accountState.isPresent()) {
               Account account = accountState.get();
-              if (account.isActive() && !change.getOwner().equals(account.getId())) {
+              if (account.isActive() && !change.getOwner().equals(account.id())) {
                 Integer count = reviewers.get(account);
                 reviewers.put(account, count == null ? 1 : count.intValue() + 1);
               }
             }
           }
-        } catch (IOException | OrmException e) {
+        } catch (IOException e) {
           throw new RuntimeException(
               "Unable to get account with email: " + commit.getAuthorIdent().getEmailAddress(), e);
         }
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index c6749c3..e528769 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -14,7 +14,7 @@
 The output is created in
 
 ```
-  bazel-genfiles/plugins/@PLUGIN@/@PLUGIN@.jar
+  bazel-bin/plugins/@PLUGIN@/@PLUGIN@.jar
 ```
 
 This project can be imported into the Eclipse IDE.