From 732a8c6091cd6c6a4477df315c81bf9b644eb3aa Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Wed, 14 Feb 2018 13:21:48 +0100 Subject: [PATCH] Add collectAssignedFocusMappingsResults() method This is to be used to implement non-tolerant focus mappings induced by assignments (as opposed to those present in object template). --- .../model/api/expr/MidpointFunctions.java | 10 ++++++ .../impl/expr/MidpointFunctionsImpl.java | 32 ++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java index 6048478895b..90b0721c809 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java @@ -23,6 +23,8 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.prism.Item; +import com.evolveum.midpoint.prism.PrismValue; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.util.LocalizableMessage; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.jetbrains.annotations.NotNull; @@ -1129,4 +1131,12 @@ Object executeAdHocProvisioningScript(String resourceOid, String language, Strin */ Boolean isEvaluateNew(); + /** + * Returns all non-negative values from all focus mappings (targeted to given path) + * from all non-negative evaluated assignments. + * + * Highly experimental. Use at your own risk. + */ + @NotNull + Collection collectAssignedFocusMappingsResults(@NotNull ItemPath path) throws SchemaException; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java index dfe65b92aa3..e9ee9ca565c 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java @@ -32,6 +32,7 @@ import com.evolveum.midpoint.model.api.expr.MidpointFunctions; import com.evolveum.midpoint.model.common.ConstantsManager; import com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluationContext; +import com.evolveum.midpoint.model.common.mapping.Mapping; import com.evolveum.midpoint.model.impl.ModelObjectResolver; import com.evolveum.midpoint.model.impl.lens.EvaluatedAssignmentImpl; import com.evolveum.midpoint.model.impl.lens.LensContext; @@ -41,10 +42,7 @@ import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.crypto.EncryptionException; import com.evolveum.midpoint.prism.crypto.Protector; -import com.evolveum.midpoint.prism.delta.ChangeType; -import com.evolveum.midpoint.prism.delta.DeltaSetTriple; -import com.evolveum.midpoint.prism.delta.ItemDelta; -import com.evolveum.midpoint.prism.delta.ObjectDelta; +import com.evolveum.midpoint.prism.delta.*; import com.evolveum.midpoint.prism.marshaller.ItemPathHolder; import com.evolveum.midpoint.prism.match.DefaultMatchingRule; import com.evolveum.midpoint.prism.match.PolyStringOrigMatchingRule; @@ -100,6 +98,7 @@ import static com.evolveum.midpoint.schema.util.LocalizationUtil.toLocalizableMessage; import static com.evolveum.midpoint.schema.util.ObjectTypeUtil.createObjectRef; import static com.evolveum.midpoint.xml.ns._public.common.common_3.TaskExecutionStatusType.RUNNABLE; +import static java.util.Collections.emptySet; import static java.util.Collections.singleton; /** @@ -1647,4 +1646,29 @@ public Boolean isEvaluateNew() { } return scriptContext.isEvaluateNew(); } + + @Override + @NotNull + public Collection collectAssignedFocusMappingsResults(@NotNull ItemPath path) throws SchemaException { + LensContext lensContext = ModelExpressionThreadLocalHolder.getLensContext(); + if (lensContext == null) { + throw new IllegalStateException("No lensContext"); + } + DeltaSetTriple> evaluatedAssignmentTriple = lensContext.getEvaluatedAssignmentTriple(); + if (evaluatedAssignmentTriple == null) { + return emptySet(); + } + Collection rv = new HashSet<>(); + for (EvaluatedAssignmentImpl evaluatedAssignment : evaluatedAssignmentTriple.getNonNegativeValues()) { + for (Mapping mapping : evaluatedAssignment.getFocusMappings()) { + if (path.equivalent(mapping.getOutputPath())) { + PrismValueDeltaSetTriple outputTriple = mapping.getOutputTriple(); + if (outputTriple != null) { + rv.addAll(outputTriple.getNonNegativeValues()); + } + } + } + } + return rv; + } } \ No newline at end of file