Skip to content

Commit

Permalink
Delta in provisioning script expressions (untested)
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Jan 22, 2019
1 parent 4599e39 commit 13dded3
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 0 deletions.
Expand Up @@ -44,6 +44,7 @@ public class ExpressionConstants {
public static final QName VAR_ORDER_ONE_OBJECT = new QName(SchemaConstants.NS_C, "thisObject");
public static final QName VAR_OPERATION = new QName(SchemaConstants.NS_C, "operation");
public static final QName VAR_RESOURCE = new QName(SchemaConstants.NS_C, "resource");
public static final QName VAR_DELTA = new QName(SchemaConstants.NS_C, "delta");
public static final QName VAR_MODEL_CONTEXT = new QName(SchemaConstants.NS_C, "modelContext");
public static final QName VAR_PRISM_CONTEXT = new QName(SchemaConstants.NS_C, "prismContext");
public static final QName VAR_CONFIGURATION = new QName(SchemaConstants.NS_C, "configuration");
Expand Down
Expand Up @@ -59,6 +59,7 @@
import com.evolveum.midpoint.schema.PointInTimeType;
import com.evolveum.midpoint.schema.ResourceShadowDiscriminator;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.internals.InternalsConfig;
Expand Down Expand Up @@ -1636,6 +1637,8 @@ private <F extends ObjectType, T extends ObjectType> OperationProvisioningScript

ExpressionVariables variables = ModelImplUtils.getDefaultExpressionVariables(user, shadow, discr,
resource.asPrismObject(), context.getSystemConfiguration(), objectContext);
// Having delta in provisioning scripts may be very useful. E.g. the script can optimize execution of expensive operations.
variables.addVariableDefinition(ExpressionConstants.VAR_DELTA, projectionCtx.getDelta());
ModelExpressionThreadLocalHolder.pushExpressionEnvironment(new ExpressionEnvironment<>(context, (LensProjectionContext) objectContext, task, result));
try {
return evaluateScript(resourceScripts, discr, operation, null, variables, context, objectContext, task, result);
Expand Down
Expand Up @@ -716,6 +716,9 @@ public static <O extends ObjectType> void addDefaultExpressionVariables(Expressi

if (affectedElementContext != null) {
variables.addVariableDefinition(ExpressionConstants.VAR_OPERATION, affectedElementContext.getOperation().getValue());
// We do not want to add delta to all expressions. The delta may be tricky. Is it focus delta? projection delta? Primary? Secondary?
// It is better to leave delta to be accessed from the model context. And in cases when it is clear which delta is meant
// (e.g. provisioning scripts) we can still add the delta explicitly.
}
}

Expand Down

0 comments on commit 13dded3

Please sign in to comment.