private static <F extends FocusType> Boolean evaluateSynchronizationPolicyCondition(ObjectSynchronizationType synchronizationPolicy,
SynchronizationContext<F> syncCtx, ExpressionFactory expressionFactory)
throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException {
if (synchronizationPolicy.getCondition() == null) {
return null;
}
ExpressionType conditionExpressionType = synchronizationPolicy.getCondition();
String desc = "condition in object synchronization " + synchronizationPolicy.getName();
ExpressionVariables variables = ModelImplUtils.getDefaultExpressionVariables(null, syncCtx.getApplicableShadow(), null,
syncCtx.getResource(), syncCtx.getSystemConfiguration(), null);
try {
ModelExpressionThreadLocalHolder.pushExpressionEnvironment(new ExpressionEnvironment<>(syncCtx.getTask(), syncCtx.getResult()));
PrismPropertyValue<Boolean> evaluateCondition = ExpressionUtil.evaluateCondition(variables,
conditionExpressionType, expressionFactory, desc, syncCtx.getTask(), syncCtx.getResult());
return evaluateCondition.getValue();
} finally {
ModelExpressionThreadLocalHolder.popExpressionEnvironment();
}
}
}