docs: public static String getPhrase(String name, String memberValue) {
  
          String rslt = null;
  
          // We can cut & run now if the element is a <literal>...
          if (name.equals("literal")) {
              return memberValue;
          }
  
          try {
  
              // Next see if it's a <channel> element...
              if (name.equals("channel")) {
                  IPortletDefinition def =
                          PortletDefinitionRegistryLocator.getPortletDefinitionRegistry()
                                  .getPortletDefinitionByFname(memberValue);
                  return String.valueOf(def.getPortletDefinitionId().getStringId());
              }
  
              // Must be a group...
              Class[] leafTypes = new Class[] {IPerson.class, IPortletDefinition.class};
              for (int i = 0; i < leafTypes.length && rslt == null; i++) {
                  EntityIdentifier[] eis =
                          GroupService.searchForGroups(
                                  memberValue, IGroupConstants.SearchMethod.DISCRETE, leafTypes[i]);
                  if (eis.length == 1) {
                      // Match!
                      IEntityGroup g = GroupService.findGroup(eis[0].getKey());
                      rslt = g.getLocalKey();
                      break;
                  } else if (eis.length > 1) {
                      String msg = "Ambiguous member name:  " + memberValue;
                      throw new RuntimeException(msg);
                  }
              }
  
          } catch (Throwable t) {
              String msg = "Error looking up the specified member:  " + memberValue;
              throw new RuntimeException(msg, t);
          }
  
          if (rslt == null) {
              String msg = "The specified member was not found:  " + memberValue;
              throw new RuntimeException(msg);
          }
  
          return rslt;
      }