code: public static String getPhrase(String name, String memberValue) {
          String rslt = null;
  
          // We can (and must) cut & run if the element is a <literal> or a <channel>...
          if (name.equals("literal") || name.equals("channel")) {
              return "local";
          }
  
          try {
  
              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!
                      if (eis[0].getType() == IEntityGroup.class) {
                          IEntityGroup g = GroupService.findGroup(eis[0].getKey());
                          rslt = g.getServiceName().toString();
                      } else {
                          String msg = "The specified entity is not a group:  " + memberValue;
                          throw new RuntimeException(msg);
                      }
                      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;
      }
docs: Internal search, thus case sensitive.