@Override public EvaluatedSituationTriggerType toEvaluatedPolicyRuleTriggerType(PolicyRuleExternalizationOptions options, PrismContext prismContext) { EvaluatedSituationTriggerType rv = new EvaluatedSituationTriggerType(); fillCommonContent(rv); if (!options.isRespectFinalFlag() || !isFinal()) { sourceRules.forEach(r -> r.addToEvaluatedPolicyRuleTypes(rv.getSourceRule(), options, null, prismContext)); } return rv; } }
public Collection<EvaluatedPolicyRuleTrigger<?>> getAllTriggers() { List<EvaluatedPolicyRuleTrigger<?>> rv = new ArrayList<>(); rv.add(this); getAllSourceRules().forEach(r -> rv.addAll(r.getTriggers())); return rv; }
@NotNull @Override public Collection<EvaluatedPolicyRuleTrigger<?>> getAllTriggers() { List<EvaluatedPolicyRuleTrigger<?>> rv = new ArrayList<>(); for (EvaluatedPolicyRuleTrigger<?> trigger : triggers) { if (trigger instanceof EvaluatedSituationTrigger) { rv.addAll(((EvaluatedSituationTrigger) trigger).getAllTriggers()); } else { rv.add(trigger); } } return rv; }
@Override public String getPolicySituation() { // TODO default situations depending on getTriggeredConstraintKinds if (policyRuleType.getPolicySituation() != null) { return policyRuleType.getPolicySituation(); } if (!triggers.isEmpty()) { EvaluatedPolicyRuleTrigger<?> firstTrigger = triggers.iterator().next(); if (firstTrigger instanceof EvaluatedSituationTrigger) { Collection<EvaluatedPolicyRule> sourceRules = ((EvaluatedSituationTrigger) firstTrigger).getSourceRules(); if (!sourceRules.isEmpty()) { // should be always the case return sourceRules.iterator().next().getPolicySituation(); } } PolicyConstraintKindType constraintKind = firstTrigger.getConstraintKind(); PredefinedPolicySituation predefinedSituation = PredefinedPolicySituation.get(constraintKind); if (predefinedSituation != null) { return predefinedSituation.getUrl(); } } PolicyConstraintsType policyConstraints = getPolicyConstraints(); return getSituationFromConstraints(policyConstraints); }
@Override public <AH extends AssignmentHolderType> EvaluatedPolicyRuleTrigger evaluate(JAXBElement<PolicySituationPolicyConstraintType> constraint, PolicyRuleEvaluationContext<AH> rctx, OperationResult result) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException { // For assignments we consider only directly attached "situation" policy rules. In the future, we might configure this. // So, if someone wants to report (forward) triggers from a target, he must ensure that a particular // "situation" constraint is present directly on it. if (rctx instanceof AssignmentPolicyRuleEvaluationContext && !((AssignmentPolicyRuleEvaluationContext) rctx).isDirect) { return null; } // Single pass only (for the time being) PolicySituationPolicyConstraintType situationConstraint = constraint.getValue(); Collection<EvaluatedPolicyRule> sourceRules = selectTriggeredRules(rctx, situationConstraint.getSituation()); if (sourceRules.isEmpty()) { return null; } return new EvaluatedSituationTrigger(situationConstraint, createMessage(sourceRules, constraint, rctx, result), createShortMessage(sourceRules, constraint, rctx, result), sourceRules); }
for (EvaluatedPolicyRule sourceRule : ((EvaluatedSituationTrigger) trigger).getSourceRules()) { sourceRule.addToEvaluatedPolicyRuleTypes(rules, options, null, prismContext);
assertEquals("Wrong # of source rules", 1, triggerSituation.getSourceRules().size()); EvaluatedPolicyRule sourceRule = triggerSituation.getSourceRules().iterator().next(); EvaluatedExclusionTrigger sourceTrigger = (EvaluatedExclusionTrigger) sourceRule.getTriggers().iterator().next(); assertNotNull("No conflicting assignment in source trigger", sourceTrigger.getConflictingAssignment());
@NotNull public Collection<EvaluatedPolicyRule> getAllSourceRules() { List<EvaluatedPolicyRule> rv = new ArrayList<>(); for (EvaluatedPolicyRule sourceRule : sourceRules) { rv.add(sourceRule); for (EvaluatedPolicyRuleTrigger trigger : sourceRule.getTriggers()) { if (trigger instanceof EvaluatedSituationTrigger) { rv.addAll(((EvaluatedSituationTrigger) trigger).getAllSourceRules()); } } } return rv; }