docs: public IPersonAttributesGroupDefinition createPagsDefinition(
              IPerson person, IEntityGroup parent, String groupName, String description) {
  
          // What's the target of the upcoming permissions check?
          String target =
                  parent != null
                          ? parent.getEntityIdentifier().getKey()
                          : IPermission
                                  .ALL_GROUPS_TARGET; // Must have blanket permission to create one
          // w/o a parent
  
          // Verify permission
          if (!hasPermission(person, IPermission.CREATE_GROUP_ACTIVITY, target)) {
              throw new RuntimeAuthorizationException(
                      person, IPermission.CREATE_GROUP_ACTIVITY, target);
          }
  
          // VALIDATION STEP:  The group name & description are allowable
          if (StringUtils.isBlank(groupName)) {
              throw new IllegalArgumentException("Specified groupName is blank:  " + groupName);
          }
          if (!GROUP_NAME_VALIDATOR_PATTERN.matcher(groupName).matches()) {
              throw new IllegalArgumentException(
                      "Specified groupName is too long, too short, or contains invalid characters:  "
                              + groupName);
          }
          if (!StringUtils.isBlank(description)) { // Blank description is allowable
              if (!GROUP_DESC_VALIDATOR_PATTERN.matcher(description).matches()) {
                  throw new IllegalArgumentException(
                          "Specified description is too long or contains invalid characters:  "
                                  + description);
              }
          }
  
          // VALIDATION STEP:  We don't have a group by that name already
          EntityIdentifier[] people =
                  GroupService.searchForGroups(
                          groupName, IGroupConstants.SearchMethod.DISCRETE_CI, IPerson.class);
          EntityIdentifier[] portlets =
                  GroupService.searchForGroups(
                          groupName,
                          IGroupConstants.SearchMethod.DISCRETE_CI,
                          IPortletDefinition.class);
          if (people.length != 0 || portlets.length != 0) {
              throw new IllegalArgumentException("Specified groupName already in use:  " + groupName);
          }
  
          IPersonAttributesGroupDefinition rslt =
                  pagsGroupDefDao.createPersonAttributesGroupDefinition(groupName, description);
          if (parent != null) {
              // Should refactor this switch to instead choose a service and invoke a method on it
              switch (parent.getServiceName().toString()) {
                  case SERVICE_NAME_LOCAL:
                      IEntityGroup member =
                              GroupService.findGroup(
                                      rslt.getCompositeEntityIdentifierForGroup().getKey());
                      if (member == null) {
                          String msg =
                                  "The specified group was created, but is not present in the store:  "
                                          + rslt.getName();
                          throw new RuntimeException(msg);
                      }
                      parent.addChild(member);
                      parent.updateMembers();
                      break;
                  case SERVICE_NAME_PAGS:
                      IPersonAttributesGroupDefinition parentDef =
                              getPagsGroupDefByName(parent.getName());
                      Set<IPersonAttributesGroupDefinition> members =
                              new HashSet<>(parentDef.getMembers());
                      members.add(rslt);
                      parentDef.setMembers(members);
                      pagsGroupDefDao.updatePersonAttributesGroupDefinition(parentDef);
                      break;
                  default:
                      String msg =
                              "The specified group service does not support adding members:  "
                                      + parent.getServiceName();
                      throw new UnsupportedOperationException(msg);
              }
          }
  
          return rslt;
      }