Search in sources :

Example 11 with ConditionalSearchFilterType

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();
}
Also used : ExpressionVariables(com.evolveum.midpoint.repo.common.expression.ExpressionVariables) ExpressionType(com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType)

Example 12 with ConditionalSearchFilterType

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;
}
Also used : ArrayList(java.util.ArrayList) ConditionalSearchFilterType(com.evolveum.midpoint.xml.ns._public.common.common_3.ConditionalSearchFilterType) ExpressionProfile(com.evolveum.midpoint.schema.expression.ExpressionProfile) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

ConditionalSearchFilterType (com.evolveum.midpoint.xml.ns._public.common.common_3.ConditionalSearchFilterType)11 AbstractInternalModelIntegrationTest (com.evolveum.midpoint.model.impl.AbstractInternalModelIntegrationTest)6 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)6 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)6 Task (com.evolveum.midpoint.task.api.Task)6 ResourceType (com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType)6 ShadowType (com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType)6 UserType (com.evolveum.midpoint.xml.ns._public.common.common_3.UserType)6 File (java.io.File)6 Test (org.testng.annotations.Test)6 ArrayList (java.util.ArrayList)5 PrismObject (com.evolveum.midpoint.prism.PrismObject)4 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)2 SystemException (com.evolveum.midpoint.util.exception.SystemException)2 ExpressionType (com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType)2 ObjectSynchronizationType (com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectSynchronizationType)2 PolyStringType (com.evolveum.prism.xml.ns._public.types_3.PolyStringType)2 ExpressionVariables (com.evolveum.midpoint.repo.common.expression.ExpressionVariables)1 ExpressionProfile (com.evolveum.midpoint.schema.expression.ExpressionProfile)1 ExpressionEditorPanel (com.evolveum.midpoint.web.component.input.ExpressionEditorPanel)1