use of com.evolveum.midpoint.xml.ns._public.common.common_3.ConditionalSearchFilterType in project midpoint by Evolveum.
the class CorrelationConfirmationEvaluator method satisfyCondition.
private boolean satisfyCondition(ShadowType currentShadow, ConditionalSearchFilterType conditionalFilter, ResourceType resourceType, SystemConfigurationType configurationType, String shortDesc, Task task, OperationResult parentResult) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException {
if (conditionalFilter.getCondition() == null) {
return true;
}
ExpressionType condition = conditionalFilter.getCondition();
ExpressionVariables variables = Utils.getDefaultExpressionVariables(null, currentShadow, resourceType, configurationType);
ItemDefinition outputDefinition = new PrismPropertyDefinitionImpl(ExpressionConstants.OUTPUT_ELEMENT_NAME, DOMUtil.XSD_BOOLEAN, prismContext);
PrismPropertyValue<Boolean> satisfy = (PrismPropertyValue) ExpressionUtil.evaluateExpression(variables, outputDefinition, condition, expressionFactory, shortDesc, task, parentResult);
if (satisfy.getValue() == null) {
return false;
}
return satisfy.getValue();
}
use of com.evolveum.midpoint.xml.ns._public.common.common_3.ConditionalSearchFilterType in project midpoint by Evolveum.
the class SynchronizationExpressionsEvaluator method findFocusesByCorrelationRule.
@NotNull
public <F extends FocusType> List<PrismObject<F>> findFocusesByCorrelationRule(Class<F> focusType, ShadowType currentShadow, List<ConditionalSearchFilterType> conditionalFilters, ResourceType resourceType, SystemConfigurationType configurationType, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException {
if (conditionalFilters == null || conditionalFilters.isEmpty()) {
LOGGER.warn("Correlation rule for resource '{}' doesn't contain query, " + "returning empty list of users.", resourceType);
return emptyList();
}
// TODO: determine from the resource
ExpressionProfile expressionProfile = MiscSchemaUtil.getExpressionProfile();
List<PrismObject<F>> allUsers = new ArrayList<>();
for (ConditionalSearchFilterType conditionalFilter : conditionalFilters) {
// TODO: better description
if (satisfyCondition(currentShadow, conditionalFilter, expressionProfile, resourceType, configurationType, "Condition expression", task, result)) {
LOGGER.trace("Condition {} in correlation expression evaluated to true", conditionalFilter.getCondition());
List<PrismObject<F>> usersFound = findFocusesByCorrelationRule(focusType, currentShadow, conditionalFilter, expressionProfile, resourceType, configurationType, task, result);
for (PrismObject<F> userFound : usersFound) {
if (!contains(allUsers, userFound)) {
allUsers.add(userFound);
}
}
}
}
LOGGER.debug("SYNCHRONIZATION: CORRELATION: expression for {} returned {} users: {}", currentShadow, allUsers.size(), PrettyPrinter.prettyPrint(allUsers, 3));
return allUsers;
}
Aggregations