List<EvaluatedPolicyRule> selectTriggeredApprovalActionRules(Collection<EvaluatedPolicyRule> rules) { return rules.stream() .filter(r -> r.isTriggered() && r.containsEnabledAction(ApprovalPolicyActionType.class)) .collect(Collectors.toList()); }
private Collection<CertificationPolicyActionType> getCertificationActions(Collection<EvaluatedPolicyRule> policyRules) { return policyRules.stream() .filter(r -> r.isTriggered() && r.containsEnabledAction(CertificationPolicyActionType.class)) .map(r -> r.getEnabledAction(CertificationPolicyActionType.class)) .collect(Collectors.toList()); }
private void emitPolicyEventIfPresent(EvaluatedPolicyRule rule, ModelContext<?> context, Task task, OperationResult result) { if (rule.isTriggered()) { for (NotificationPolicyActionType notificationAction : rule.getEnabledActions(NotificationPolicyActionType.class)) { emitPolicyEvent(notificationAction, rule, context, task, result); } } }
private void executeRuleScriptingActions(EvaluatedPolicyRule rule, ModelContext<?> context, Task task, OperationResult result) { if (rule.isTriggered()) { for (ScriptExecutionPolicyActionType action : rule.getEnabledActions(ScriptExecutionPolicyActionType.class)) { executeScriptingAction(action, rule, context, task, result); } } }
private <AH extends AssignmentHolderType> Collection<EvaluatedPolicyRule> selectTriggeredRules( PolicyRuleEvaluationContext<AH> rctx, List<String> situations) { Collection<EvaluatedPolicyRule> rules; if (rctx instanceof AssignmentPolicyRuleEvaluationContext) { EvaluatedAssignmentImpl<AH> evaluatedAssignment = ((AssignmentPolicyRuleEvaluationContext<AH>) rctx).evaluatedAssignment; // We consider all rules here, i.e. also those that are triggered on targets induced by this one. // Decision whether to trigger such rules lies on "primary" policy constraints. (E.g. approvals would // not trigger, whereas exclusions probably would.) Overall, our responsibility is simply to collect // all triggered rules. rules = evaluatedAssignment.getAllTargetsPolicyRules(); } else { rules = rctx.focusContext.getPolicyRules(); } return rules.stream() .filter(r -> r.isTriggered() && situations.contains(r.getPolicySituation())) .collect(Collectors.toList()); } }
private <AH extends AssignmentHolderType> void traceRuleEvaluationResult(EvaluatedPolicyRule rule, PolicyRuleEvaluationContext<AH> ctx) throws SchemaException { if (!LOGGER.isTraceEnabled()) { return; } StringBuilder sb = new StringBuilder(); sb.append("\n---[ POLICY RULE "); if (rule.isTriggered()) { sb.append("# "); } sb.append(rule.toShortString()); sb.append(" for "); sb.append(ctx.getShortDescription()); sb.append(" (").append(ctx.lensContext.getState()).append(")"); sb.append("]---------------------------"); sb.append("\n"); sb.append(rule.debugDump()); //sb.append("\nContext: ").append(ctx.debugDump()); LOGGER.trace("{}", sb.toString()); }
static void dumpRules(StringBuilder sb, String label, int indent, Collection<EvaluatedPolicyRule> policyRules) { sb.append("\n"); int triggered = getTriggeredRulesCount(policyRules); DebugUtil.debugDumpLabel(sb, label + " (total " + policyRules.size() + ", triggered " + triggered + ")", indent); // not triggered rules are dumped in one line boolean first = true; for (EvaluatedPolicyRule rule : policyRules) { if (rule.isTriggered()) { continue; } if (first) { first = false; sb.append(" "); } else { sb.append("; "); } sb.append(rule.toShortString()); } // now triggered rules, each on separate line for (EvaluatedPolicyRule rule : policyRules) { if (rule.isTriggered()) { sb.append("\n"); DebugUtil.indentDebugDump(sb, indent + 1); sb.append("- triggered: ").append(rule.toShortString()); } } if (policyRules.isEmpty()) { sb.append(" (none)"); } }
private void dumpPolicyRule(int indent, StringBuilder sb, EvaluatedPolicyRule rule, boolean alsoMessages) { if (alsoMessages) { sb.append("=============================================== RULE ===============================================\n"); } DebugUtil.indentDebugDump(sb, indent + 1); if (rule.isGlobal()) { sb.append("global "); } sb.append("rule: ").append(rule.toShortString()); dumpTriggersCollection(indent+2, sb, rule.getTriggers()); for (PolicyExceptionType exc : rule.getPolicyExceptions()) { sb.append("\n"); DebugUtil.indentDebugDump(sb, indent + 2); sb.append("exception: ").append(exc); } if (alsoMessages) { if (rule.isTriggered()) { sb.append("\n\n"); sb.append("--------------------------------------------- MESSAGES ---------------------------------------------"); List<TreeNode<LocalizableMessage>> messageTrees = rule.extractMessages(); for (TreeNode<LocalizableMessage> messageTree : messageTrees) { sb.append("\n"); sb.append(messageTree.debugDump(indent)); } } sb.append("\n"); } }
LOGGER.trace("Policy rule triggered: {}", ctx.policyRule.isTriggered()); if (ctx.policyRule.isTriggered()) { LOGGER.trace("Start to compute actions"); ((EvaluatedPolicyRuleImpl) ctx.policyRule).computeEnabledActions(ctx, ctx.getObject(), expressionFactory, prismContext, ctx.task, result);