Merge branch 'stable-3.0'

* stable-3.0:
  Upgrade bazlets to latest stable-2.16 to build with 2.16.17 API
  Upgrade bazlets to latest stable-3.0 to build with 3.0.8 API

Change-Id: I95f83f70dc04fe8a5be1e9291a648426fc606644
diff --git a/WORKSPACE b/WORKSPACE
index e101f49..51723e0 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,24 +3,24 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "97eef86854b0fb68b9287831f3075b6f6218ff41",
+    commit = "2add9fecf8bec8634bddf354815bd0fa93f58dd5",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
 # Snapshot Plugin API
-#load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
 load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
+    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+    "gerrit_api_maven_local",
 )
 
+# Load snapshot Plugin API
+gerrit_api_maven_local()
+
+# Release Plugin API
+#load(
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#    "gerrit_api",
+#)
+
 # Load release Plugin API
-gerrit_api()
+#gerrit_api()
diff --git a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRights.java b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRights.java
index 2b7e337..01b983a 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRights.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRights.java
@@ -17,11 +17,11 @@
 import com.google.gerrit.common.data.AccessSection;
 import com.google.gerrit.common.data.Permission;
 import com.google.gerrit.common.data.PermissionRule;
+import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.exceptions.InvalidNameException;
 import com.google.gerrit.extensions.annotations.PluginData;
 import com.google.gerrit.extensions.events.NewProjectCreatedListener;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.account.GroupCache;
 import com.google.gerrit.server.git.meta.MetaDataUpdate;
 import com.google.gerrit.server.group.InternalGroup;
@@ -97,15 +97,16 @@
       return;
     }
 
-    ProjectState project = projectCache.get(Project.NameKey.parse(projectName));
-    if (project == null) {
+    Optional<ProjectState> project = projectCache.get(Project.NameKey.parse(projectName));
+    if (!project.isPresent()) {
       log.error("Could not retrieve projet {} from cache", projectName);
       return;
     }
 
-    try (MetaDataUpdate md = metaDataUpdateFactory.create(project.getProject().getNameKey())) {
+    try (MetaDataUpdate md =
+        metaDataUpdateFactory.create(project.get().getProject().getNameKey())) {
       ProjectConfig config = projectConfigFactory.read(md);
-      setAccessRights(config, project);
+      setAccessRights(config, project.get());
       md.setMessage("Set default access rights\n");
       config.commit(md);
     } catch (Exception e) {
@@ -191,7 +192,7 @@
         // we need to check if group exist if if it does, get its
         // uuid.
         Optional<InternalGroup> group =
-            groupCache.get(new AccountGroup.NameKey(rule.getGroup().getName()));
+            groupCache.get(AccountGroup.nameKey(rule.getGroup().getName()));
 
         if (!group.isPresent()) {
           log.error("Group {} not found", rule.getGroup().getName());
diff --git a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
index f764b9e..331c968 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidator.java
@@ -17,6 +17,8 @@
 import com.google.common.base.Charsets;
 import com.google.common.hash.Hashing;
 import com.google.gerrit.common.data.GroupReference;
+import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.annotations.PluginCanonicalWebUrl;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.api.groups.Groups;
@@ -24,8 +26,6 @@
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.account.GroupMembership;
 import com.google.gerrit.server.config.AllProjectsNameProvider;
diff --git a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRightsIT.java b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRightsIT.java
index 33a986d..7eca913 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRightsIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRightsIT.java
@@ -15,20 +15,24 @@
 package com.ericsson.gerrit.plugins.projectgroupstructure;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allowCapability;
 import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
 
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
 import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
 import com.google.gerrit.common.data.AccessSection;
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.common.data.Permission;
+import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.api.projects.ProjectInput;
 import com.google.gerrit.extensions.restapi.Url;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.project.ProjectConfig;
 import com.google.gerrit.server.project.ProjectState;
+import com.google.inject.Inject;
 import java.nio.file.Files;
+import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -37,6 +41,8 @@
     sysModule = "com.ericsson.gerrit.plugins.projectgroupstructure.Module")
 public class DefaultAccessRightsIT extends LightweightPluginDaemonTest {
 
+  @Inject private ProjectOperations projectOperations;
+
   @Override
   @Before
   public void setUpTestPlugin() throws Exception {
@@ -60,8 +66,16 @@
     super.setUpTestPlugin();
     // These access rights are mandatory configuration for this plugin as
     // documented in config.md
-    allowGlobalCapabilities(REGISTERED_USERS, GlobalCapability.CREATE_GROUP);
-    allowGlobalCapabilities(REGISTERED_USERS, GlobalCapability.CREATE_PROJECT);
+    projectOperations
+        .project(allProjects)
+        .forUpdate()
+        .add(allowCapability(GlobalCapability.CREATE_GROUP).group(REGISTERED_USERS))
+        .update();
+    projectOperations
+        .project(allProjects)
+        .forUpdate()
+        .add(allowCapability(GlobalCapability.CREATE_PROJECT).group(REGISTERED_USERS))
+        .update();
   }
 
   @Test
@@ -71,9 +85,9 @@
     String projectName = name("someProject");
     userRestSession.put("/projects/" + projectName, in).assertCreated();
 
-    ProjectState projectState = projectCache.get(new Project.NameKey(projectName));
-    AccountGroup.UUID ownerUUID = projectState.getOwners().iterator().next();
-    ProjectConfig projectConfig = projectState.getConfig();
+    Optional<ProjectState> projectState = projectCache.get(Project.nameKey(projectName));
+    AccountGroup.UUID ownerUUID = projectState.get().getOwners().iterator().next();
+    ProjectConfig projectConfig = projectState.get().getConfig();
 
     assertThat(projectConfig.getAccessSections().size()).isEqualTo(2);
 
@@ -127,7 +141,8 @@
 
     assertThat(
             projectCache
-                .get(new Project.NameKey(projectName))
+                .get(Project.nameKey(projectName))
+                .get()
                 .getConfig()
                 .getAccessSections()
                 .size())
diff --git a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
index f390a30..1f1d52c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
@@ -15,6 +15,7 @@
 package com.ericsson.gerrit.plugins.projectgroupstructure;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allowCapability;
 import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
 
 import com.google.common.base.Charsets;
@@ -23,15 +24,18 @@
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
 import com.google.gerrit.acceptance.RestResponse;
 import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.common.data.GroupReference;
+import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.api.groups.GroupApi;
 import com.google.gerrit.extensions.api.projects.ProjectInput;
 import com.google.gerrit.extensions.restapi.Url;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.project.ProjectConfig;
 import com.google.gerrit.server.project.ProjectState;
+import com.google.inject.Inject;
+import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -40,6 +44,8 @@
     sysModule = "com.ericsson.gerrit.plugins.projectgroupstructure.Module")
 public class ProjectCreationValidatorIT extends LightweightPluginDaemonTest {
 
+  @Inject private ProjectOperations projectOperations;
+
   private static final String PLUGIN_NAME = "project-group-structure";
 
   @Override
@@ -48,8 +54,16 @@
     super.setUpTestPlugin();
     // These access rights are mandatory configuration for this plugin as
     // documented in config.md
-    allowGlobalCapabilities(REGISTERED_USERS, GlobalCapability.CREATE_GROUP);
-    allowGlobalCapabilities(REGISTERED_USERS, GlobalCapability.CREATE_PROJECT);
+    projectOperations
+        .project(allProjects)
+        .forUpdate()
+        .add(allowCapability(GlobalCapability.CREATE_GROUP).group(REGISTERED_USERS))
+        .update();
+    projectOperations
+        .project(allProjects)
+        .forUpdate()
+        .add(allowCapability(GlobalCapability.CREATE_PROJECT).group(REGISTERED_USERS))
+        .update();
   }
 
   @Test
@@ -159,19 +173,19 @@
     ProjectInput in = new ProjectInput();
     in.permissionsOnly = true;
     userRestSession.put("/projects/" + rootProject, in).assertCreated();
-    ProjectState projectState = projectCache.get(new Project.NameKey(rootProject));
-    assertThat(projectState.getOwners().size()).isEqualTo(1);
-    assertThat(projectState.getOwners())
+    Optional<ProjectState> projectState = projectCache.get(Project.nameKey(rootProject));
+    assertThat(projectState.get().getOwners().size()).isEqualTo(1);
+    assertThat(projectState.get().getOwners())
         .contains(
-            groupCache.get(new AccountGroup.NameKey(rootProject + "-admins")).get().getGroupUUID());
+            groupCache.get(AccountGroup.nameKey(rootProject + "-admins")).get().getGroupUUID());
 
     // case when <project-name>-admins group already exists
     rootProject = name("rootProject2");
     String existingGroupName = rootProject + "-admins";
     gApi.groups().create(existingGroupName);
     userRestSession.put("/projects/" + rootProject, in).assertCreated();
-    projectState = projectCache.get(new Project.NameKey(rootProject));
-    assertThat(projectState.getOwners().size()).isEqualTo(1);
+    projectState = projectCache.get(Project.nameKey(rootProject));
+    assertThat(projectState.get().getOwners().size()).isEqualTo(1);
     String expectedOwnerGroup =
         existingGroupName
             + "-"
@@ -179,9 +193,8 @@
                 .hashString(existingGroupName, Charsets.UTF_8)
                 .toString()
                 .substring(0, 7);
-    assertThat(projectState.getOwners())
-        .contains(
-            groupCache.get(new AccountGroup.NameKey(expectedOwnerGroup)).get().getGroupUUID());
+    assertThat(projectState.get().getOwners())
+        .contains(groupCache.get(AccountGroup.nameKey(expectedOwnerGroup)).get().getGroupUUID());
   }
 
   @Test
@@ -213,7 +226,7 @@
     GroupApi dGroup = gApi.groups().create(delegatingGroup);
     dGroup.addMembers(user.username());
     // the group is in the project.config
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
@@ -236,7 +249,7 @@
     String delegatingGroup = name("someGroup");
     GroupApi dGroup = gApi.groups().create(delegatingGroup);
     dGroup.addMembers(user.username());
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
@@ -252,22 +265,19 @@
     in.parent = parent;
     String childProject = parent + "/childProject";
     userRestSession.put("/projects/" + Url.encode(childProject), in).assertCreated();
-    ProjectState projectState = projectCache.get(new Project.NameKey(childProject));
-    assertThat(projectState.getOwners().size()).isEqualTo(1);
-    assertThat(projectState.getOwners())
+    Optional<ProjectState> projectState = projectCache.get(Project.nameKey(childProject));
+    assertThat(projectState.get().getOwners().size()).isEqualTo(1);
+    assertThat(projectState.get().getOwners())
         .contains(
-            groupCache
-                .get(new AccountGroup.NameKey(childProject + "-admins"))
-                .get()
-                .getGroupUUID());
+            groupCache.get(AccountGroup.nameKey(childProject + "-admins")).get().getGroupUUID());
 
     // case when <project-name>-admins group already exists
     String childProject2 = parent + "/childProject2";
     String existingGroupName = childProject2 + "-admins";
     gApi.groups().create(existingGroupName);
     userRestSession.put("/projects/" + Url.encode(childProject2), in).assertCreated();
-    projectState = projectCache.get(new Project.NameKey(childProject2));
-    assertThat(projectState.getOwners().size()).isEqualTo(1);
+    projectState = projectCache.get(Project.nameKey(childProject2));
+    assertThat(projectState.get().getOwners().size()).isEqualTo(1);
     String expectedOwnerGroup =
         existingGroupName
             + "-"
@@ -275,9 +285,8 @@
                 .hashString(existingGroupName, Charsets.UTF_8)
                 .toString()
                 .substring(0, 7);
-    assertThat(projectState.getOwners())
-        .contains(
-            groupCache.get(new AccountGroup.NameKey(expectedOwnerGroup)).get().getGroupUUID());
+    assertThat(projectState.get().getOwners())
+        .contains(groupCache.get(AccountGroup.nameKey(expectedOwnerGroup)).get().getGroupUUID());
   }
 
   @Test
@@ -291,7 +300,7 @@
     String delegatingGroup = name("someGroup");
     GroupApi dGroup = gApi.groups().create(delegatingGroup);
     dGroup.addMembers(user.username());
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
@@ -308,8 +317,8 @@
     in.parent = parent;
     String childProject = parent + "/childProject";
     userRestSession.put("/projects/" + Url.encode(childProject), in).assertCreated();
-    ProjectState projectState = projectCache.get(new Project.NameKey(childProject));
-    assertThat(projectState.getOwners().size()).isEqualTo(0);
+    Optional<ProjectState> projectState = projectCache.get(Project.nameKey(childProject));
+    assertThat(projectState.get().getOwners().size()).isEqualTo(0);
   }
 
   @Test
@@ -334,7 +343,7 @@
     GroupApi dGroup = gApi.groups().create(delegatingGroup);
     dGroup.addMembers(user.username());
     // the group is in the project.config
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       cfg.getPluginConfig(PLUGIN_NAME)
@@ -371,7 +380,7 @@
 
     dGroup.addGroups(nestedGroup);
     // the group is in the project.config
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
@@ -406,7 +415,7 @@
     gApi.groups().create(delegatingGroup);
     // The user is not added to the delegated group
     // the group is in the project.config
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = gApi.groups().id(delegatingGroup).get().id;
@@ -439,7 +448,7 @@
     // The delegating group is not created
     String delegatingGroup = name("groupB");
     // the group is in the project.config
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();
       String gId = "fake-gId";
@@ -474,7 +483,7 @@
     GroupApi dGroup = gApi.groups().create(delegatingGroup);
     dGroup.addMembers(user.username());
     // the group is in the project.config
-    Project.NameKey parentNameKey = new Project.NameKey(parent);
+    Project.NameKey parentNameKey = Project.nameKey(parent);
     try (ProjectConfigUpdate cfgUpdate = updateProject(parentNameKey)) {
       ProjectConfig cfg = cfgUpdate.getConfig();