public static <AD extends AdditionalData> List<TreeNode<AugmentedTrigger<AD>>> arrangeForPresentationExt( List<AugmentedTrigger<AD>> triggers, AdditionalFilter<AD> additionalFilter) { TreeNode<AugmentedTrigger<AD>> root = new TreeNode<>(); for (AugmentedTrigger<AD> trigger : triggers) { arrangeForPresentationExt(root, trigger, additionalFilter); } sortTriggersExt(root); return root.getChildren(); }
@NotNull public static List<TreeNode<LocalizableMessage>> extractMessages(Collection<EvaluatedPolicyRuleTrigger<?>> triggers, MessageKind kind) { return extractMessages(arrangeForPresentationInt(triggers), kind); }
@NotNull public static List<TreeNode<LocalizableMessage>> extractMessages(List<TreeNode<EvaluatedPolicyRuleTrigger<?>>> triggerTreeList, MessageKind kind) { List<TreeNode<LocalizableMessage>> messageTreeList = new ArrayList<>(); for (TreeNode<EvaluatedPolicyRuleTrigger<?>> tree : triggerTreeList) { messageTreeList.add(tree.tranform(trigger -> getMessage(trigger, kind))); } return messageTreeList; }
/** * Arranges triggers into trees according to presentation instructions (hidden, final, displayOrder). */ public static List<TreeNode<EvaluatedPolicyRuleTrigger<?>>> arrangeForPresentationInt(Collection<EvaluatedPolicyRuleTrigger<?>> triggers) { TreeNode<EvaluatedPolicyRuleTrigger<?>> root = new TreeNode<>(); for (EvaluatedPolicyRuleTrigger<?> trigger : triggers) { arrangeForPresentationInt(root, trigger); } sortTriggersInt(root); return root.getChildren(); }
private static <AD extends AdditionalData> void arrangeForPresentationExt(TreeNode<AugmentedTrigger<AD>> root, AugmentedTrigger<AD> trigger, AdditionalFilter<AD> additionalFilter) { boolean hidden = isHidden(trigger.trigger); boolean isFinal = Boolean.TRUE.equals(trigger.trigger.isFinal()); if (!hidden) { if (additionalFilter != null && !additionalFilter.accepts(trigger)) { return; } TreeNode<AugmentedTrigger<AD>> newNode = new TreeNode<>(trigger); root.add(newNode); root = newNode; } if (!isFinal) { // it's possible that this was pre-filtered e.g. by policy enforcer hook for (EvaluatedPolicyRuleTriggerType innerTrigger : getChildTriggers(trigger.trigger)) { arrangeForPresentationExt(root, new AugmentedTrigger<>(innerTrigger, trigger.additionalData), additionalFilter); } } }
@Override public List<TreeNode<LocalizableMessage>> extractMessages() { return EvaluatedPolicyRuleUtil.extractMessages(triggers, EvaluatedPolicyRuleUtil.MessageKind.NORMAL); }
public static List<TreeNode<EvaluatedPolicyRuleTriggerType>> arrangeForPresentationExt(List<EvaluatedPolicyRuleTriggerType> triggers) { // augment List<AugmentedTrigger<AdditionalData>> augmentedTriggers = triggers.stream() .map(t -> new AugmentedTrigger<>(t, null)) .collect(Collectors.toList()); List<TreeNode<AugmentedTrigger<AdditionalData>>> trees = arrangeForPresentationExt(augmentedTriggers, null); // de-augment return trees.stream() .map(tree -> tree.tranform(at -> at.trigger)) .collect(Collectors.toList()); }
private static void arrangeForPresentationInt(TreeNode<EvaluatedPolicyRuleTrigger<?>> root, EvaluatedPolicyRuleTrigger<?> trigger) { PolicyConstraintPresentationType presentation = trigger.getConstraint().getPresentation(); boolean hidden = isHidden(presentation, trigger.getConstraintKind()); boolean isFinal = presentation != null && Boolean.TRUE.equals(presentation.isFinal()); if (!hidden) { TreeNode<EvaluatedPolicyRuleTrigger<?>> newNode = new TreeNode<>(trigger); root.add(newNode); root = newNode; } if (!isFinal) { for (EvaluatedPolicyRuleTrigger<?> innerTrigger : trigger.getInnerTriggers()) { arrangeForPresentationInt(root, innerTrigger); } } }
private static boolean isHidden(PolicyConstraintPresentationType presentation, PolicyConstraintKindType kind) { if (presentation != null && presentation.isHidden() != null) { return presentation.isHidden(); } else { return isHiddenByDefault(kind); } }
private static <AD extends AdditionalData> void sortTriggersExt(TreeNode<AugmentedTrigger<AD>> node) { Comparator<? super TreeNode<AugmentedTrigger<AD>>> comparator = (t1, t2) -> { int o1 = defaultIfNull(t1.getUserObject().trigger.getPresentationOrder(), Integer.MAX_VALUE); int o2 = defaultIfNull(t2.getUserObject().trigger.getPresentationOrder(), Integer.MAX_VALUE); return Integer.compare(o1, o2); }; node.getChildren().sort(comparator); node.getChildren().forEach(child -> sortTriggersExt(child)); }
private static void sortTriggersInt(TreeNode<EvaluatedPolicyRuleTrigger<?>> node) { Comparator<? super TreeNode<EvaluatedPolicyRuleTrigger<?>>> comparator = (t1, t2) -> { PolicyConstraintPresentationType p1 = t1.getUserObject().getConstraint().getPresentation(); PolicyConstraintPresentationType p2 = t2.getUserObject().getConstraint().getPresentation(); int o1 = p1 != null && p1.getDisplayOrder() != null ? p1.getDisplayOrder() : Integer.MAX_VALUE; int o2 = p2 != null && p2.getDisplayOrder() != null ? p2.getDisplayOrder() : Integer.MAX_VALUE; return Integer.compare(o1, o2); }; node.getChildren().sort(comparator); node.getChildren().forEach(child -> sortTriggersInt(child)); }
@Override public List<TreeNode<LocalizableMessage>> extractShortMessages() { return EvaluatedPolicyRuleUtil.extractMessages(triggers, EvaluatedPolicyRuleUtil.MessageKind.SHORT); }
List<TreeNode<EvaluatedPolicyRuleTriggerType>> trees = EvaluatedPolicyRuleUtil.arrangeForPresentationExt(triggers); if (!trees.isEmpty() && trees.get(0).getUserObject().getShortMessage() != null) { return LocalizationUtil.toLocalizableMessage(trees.get(0).getUserObject().getShortMessage());
private static boolean isHidden(EvaluatedPolicyRuleTriggerType trigger) { if (trigger.isHidden() != null) { return trigger.isHidden(); } else { return isHiddenByDefault(trigger.getConstraintKind()); } }
t -> enforceAll || t.isEnforcementOverride(), prismContext); List<TreeNode<LocalizableMessage>> messageTrees = EvaluatedPolicyRuleUtil.extractMessages(triggersFiltered, EvaluatedPolicyRuleUtil.MessageKind.NORMAL); for (TreeNode<LocalizableMessage> messageTree : messageTrees) { evalCtx.messages.add(messageTree.getUserObject());