Ejemplo n.º 1
0
  @Override
  public AbstractResult combine(EvaluationCtx context, List parameters, List policyElements) {

    List<ObligationResult> denyObligations = new ArrayList<ObligationResult>();
    List<Advice> denyAdvices = new ArrayList<Advice>();

    for (Object policyElement : policyElements) {
      AbstractPolicy policy = ((PolicyCombinerElement) (policyElement)).getPolicy();
      MatchResult match = policy.match(context);
      if (match.getResult() == MatchResult.MATCH) {
        AbstractResult result = policy.evaluate(context);
        int value = result.getDecision();
        // if there was a value of PERMIT, then regardless of what else
        // we've seen, we always return PERMIT
        if (value == AbstractResult.DECISION_PERMIT) {
          return result;
        } else if (value == AbstractResult.DECISION_DENY) {
          denyObligations.addAll(result.getObligations());
          denyAdvices.addAll(result.getAdvices());
        }
      }
    }

    // if there is not any value of PERMIT. The return DENY
    return ResultFactory.getFactory()
        .getResult(AbstractResult.DECISION_DENY, denyObligations, denyAdvices, context);
  }