Merge branch 'stable-3.2'

* stable-3.2:
  Adapt to GroupReference interface on latest stable-3.2

Change-Id: I33b4c545352a7cf4c503a1dc1228aa007fdf8418
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 b491d16..93ad596 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRights.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRights.java
@@ -118,27 +118,30 @@
   private void setAccessRights(ProjectConfig config, ProjectState project) {
     for (String refName : defaultAccessRightsConfig.getSubsections(ProjectConfig.ACCESS)) {
       if (AccessSection.isValidRefSectionName(refName) && isValidRegex(refName)) {
-        AccessSection as = config.getAccessSection(refName, true);
-        getPermissions(refName, as);
-        setPermissions(refName, as, getOwnerGroupName(project));
+        config.upsertAccessSection(
+            refName,
+            as -> {
+              getPermissions(refName, as);
+              setPermissions(refName, as, getOwnerGroupName(project));
+            });
       }
     }
   }
 
-  private void getPermissions(String refName, AccessSection as) {
+  private void getPermissions(String refName, AccessSection.Builder as) {
     for (String varName :
         defaultAccessRightsConfig.getStringList(
             ProjectConfig.ACCESS, refName, "exclusiveGroupPermissions")) {
       Arrays.stream(varName.split("[, \t]{1,}"))
           .filter(Permission::isPermission)
-          .forEach(n -> as.getPermission(n, true).setExclusiveGroup(true));
+          .forEach(n -> as.upsertPermission(n).setExclusiveGroup(true));
     }
   }
 
-  private void setPermissions(String refName, AccessSection as, String ownerGroupName) {
+  private void setPermissions(String refName, AccessSection.Builder as, String ownerGroupName) {
     for (String value : defaultAccessRightsConfig.getNames(ProjectConfig.ACCESS, refName)) {
       if (Permission.isPermission(value)) {
-        Permission perm = as.getPermission(value, true);
+        Permission.Builder perm = as.upsertPermission(value);
         setPermissionRules(ownerGroupName, perm, refName, value);
       } else {
         log.error("Invalid permission {}", value);
@@ -168,15 +171,16 @@
   }
 
   private void setPermissionRules(
-      String ownerGroupName, Permission perm, String refName, String value) {
+      String ownerGroupName, Permission.Builder perm, String refName, String value) {
     for (String ruleString :
         defaultAccessRightsConfig.getStringList(ProjectConfig.ACCESS, refName, value)) {
-      PermissionRule rule;
+      PermissionRule.Builder rule;
       try {
         rule =
             PermissionRule.fromString(
-                ruleString.replaceAll(Pattern.quote(OWNER_TOKEN), ownerGroupName),
-                Permission.hasRange(value));
+                    ruleString.replaceAll(Pattern.quote(OWNER_TOKEN), ownerGroupName),
+                    Permission.hasRange(value))
+                .toBuilder();
 
       } catch (IllegalArgumentException notRule) {
         log.error(
@@ -199,7 +203,7 @@
           log.error("Group {} not found", rule.getGroup().getName());
           continue;
         }
-        rule.setGroup(new GroupReference(group.get().getGroupUUID(), rule.getGroup().getName()));
+        rule.setGroup(GroupReference.create(group.get().getGroupUUID(), rule.getGroup().getName()));
       }
       perm.add(rule);
     }
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 2f93c5b..c3f3338 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRightsIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/DefaultAccessRightsIT.java
@@ -28,6 +28,7 @@
 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.server.project.CachedProjectConfig;
 import com.google.gerrit.server.project.ProjectConfig;
 import com.google.gerrit.server.project.ProjectState;
 import com.google.inject.Inject;
@@ -88,11 +89,11 @@
 
     Optional<ProjectState> projectState = projectCache.get(Project.nameKey(projectName));
     AccountGroup.UUID ownerUUID = projectState.get().getOwners().iterator().next();
-    ProjectConfig projectConfig = projectState.get().getConfig();
+    CachedProjectConfig projectConfig = projectState.get().getConfig();
 
     assertThat(projectConfig.getAccessSections().size()).isEqualTo(2);
 
-    AccessSection refsSection = projectConfig.getAccessSection("refs/*");
+    AccessSection refsSection = projectConfig.getAccessSection("refs/*").get();
     assertThat(refsSection.getPermissions().size()).isEqualTo(3);
     assertThat(refsSection.getPermission(Permission.OWNER).getRules().get(0).getGroup().getUUID())
         .isEqualTo(ownerUUID);
@@ -102,7 +103,7 @@
     assertThat(refsSection.getPermission(Permission.PUSH).getRules().get(0).getGroup().getName())
         .isEqualTo("Administrators");
 
-    AccessSection refsHeadsSection = projectConfig.getAccessSection("refs/heads/*");
+    AccessSection refsHeadsSection = projectConfig.getAccessSection("refs/heads/*").get();
     assertThat(refsHeadsSection.getPermissions().size()).isEqualTo(4);
     assertThat(
             refsHeadsSection
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 f85ab27..2ddf589 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/projectgroupstructure/ProjectCreationValidatorIT.java
@@ -233,7 +233,7 @@
       cfg.getPluginConfig(PLUGIN_NAME)
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertCreated();
@@ -256,7 +256,7 @@
       cfg.getPluginConfig(PLUGIN_NAME)
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfgUpdate.save();
     }
 
@@ -307,7 +307,7 @@
       cfg.getPluginConfig(PLUGIN_NAME)
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfg.getPluginConfig(PLUGIN_NAME)
           .setBoolean(ProjectCreationValidator.DISABLE_GRANTING_PROJECT_OWNERSHIP, true);
       cfgUpdate.save();
@@ -387,7 +387,7 @@
       cfg.getPluginConfig(PLUGIN_NAME)
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertCreated();
@@ -422,7 +422,7 @@
       cfg.getPluginConfig(PLUGIN_NAME)
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertConflict();
@@ -455,7 +455,7 @@
       cfg.getPluginConfig(PLUGIN_NAME)
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfgUpdate.save();
     }
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertConflict();
@@ -493,11 +493,11 @@
       cfg.getPluginConfig("project-group-structure")
           .setGroupReference(
               ProjectCreationValidator.DELEGATE_PROJECT_CREATION_TO,
-              new GroupReference(AccountGroup.UUID.parse(gId), delegatingGroup));
+              GroupReference.create(AccountGroup.UUID.parse(gId), delegatingGroup));
       cfgUpdate.save();
 
       String newDelegatingGroup = name("groupC");
-      gApi.groups().id(delegatingGroup).name(newDelegatingGroup);
+      cfg.renameGroup(cfg.getGroup(delegatingGroup).getUUID(), newDelegatingGroup);
     }
 
     userRestSession.put("/projects/" + Url.encode(parent + "/childProject"), in).assertCreated();