@Test
  public void test() throws Exception {
    SSOToken adminToken = (SSOToken) AccessController.doPrivileged(AdminTokenAction.getInstance());
    PolicyManager pm = new PolicyManager(adminToken, "/");
    Policy policy = new Policy("IdentityGroupToEntitlementGroupTest", "desc", false);
    policy.addRule(createRule());
    policy.addSubject("subject", createSubject(pm));

    Set<IPrivilege> privileges = PrivilegeUtils.policyObjectToPrivileges(policy);
    if ((privileges == null) || privileges.isEmpty()) {
      throw new Exception("IdentityGroupToEntitlementGroupTest, set is empty");
    }

    Privilege p = (Privilege) privileges.iterator().next();
    // uncomment after the groupsubject mapping is done
    /*        EntitlementSubject subject = p.getSubject();
    if (!(subject instanceof OrSubject)) {
        throw new Exception(
            "IdentityGroupToEntitlementGroupTest, orSubject not found");
    }

    OrSubject orSubject = (OrSubject)subject;
    Set<EntitlementSubject> subjects = orSubject.getESubjects();
    if ((subjects == null) || (subjects.size() != 2)) {
        throw new Exception(
            "IdentityGroupToEntitlementGroupTest, subjects collection is incorrect");
    }

    for (EntitlementSubject s : subjects) {
        if (!(s instanceof GroupSubject)) {
            throw new Exception(
                "IdentityGroupToEntitlementGroupTest, no group subject");
        }
    }*/
  }
  protected Set getDefaultValues() {
    Set values = null;
    try {
      CachedPolicy cachedPolicy = getCachedPolicy();
      Policy policy = cachedPolicy.getPolicy();
      String referralName = (String) getPageSessionAttribute(PG_SESSION_REFERRAL_NAME);

      Referral referral = policy.getReferral(referralName);
      values = referral.getValues();
    } catch (NameNotFoundException e) {
      debug.warning("ReferralEditViewBean.getDefaultValues", e);
    } catch (AMConsoleException e) {
      debug.warning("ReferralEditViewBean.getDefaultValues", e);
    }
    return values;
  }
  private void handleButton1Request(CachedPolicy cachedPolicy) throws ModelControlException {
    Referral deleted = null;
    String origName = (String) getPageSessionAttribute(EDIT_REFERRAL_NAME);
    Policy policy = cachedPolicy.getPolicy();

    try {
      Referral referral = createReferral();
      if (referral != null) {
        String name = (String) propertySheetModel.getValue(REFERRAL_NAME);

        if (origName.equals(name)) {
          policy.replaceReferral(name, referral);
        } else {
          deleted = policy.removeReferral(origName);
          policy.addReferral(name, referral);
        }

        deleted = null;
        setInlineAlertMessage(CCAlert.TYPE_INFO, "message.information", "policy.referral.updated");
        cachedPolicy.setPolicyModified(true);
      }
    } catch (NameAlreadyExistsException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", getModel().getErrorString(e));
    } catch (InvalidNameException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", getModel().getErrorString(e));
    } catch (NameNotFoundException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", getModel().getErrorString(e));
    } catch (AMConsoleException e) {
      setInlineAlertMessage(CCAlert.TYPE_ERROR, "message.error", e.getMessage());
    } finally {
      if (deleted != null) {
        try {
          policy.addReferral(origName, deleted);
        } catch (NameAlreadyExistsException e) {
          debug.warning("ReferralEditViewBean.handleButton1Request", e);
        } catch (InvalidNameException e) {
          debug.warning("ReferralEditViewBean.handleButton1Request", e);
        }
      }
    }
    forwardTo();
  }