Skip to content

Commit

Permalink
Do minor code cleanups
Browse files Browse the repository at this point in the history
Introduced helper methods
- ExpressionUtil.evaluateConditionDefaultTrue/False
- static PPV.getRealValue, isNotFalse, isTrue
  • Loading branch information
mederly committed Jun 10, 2020
1 parent 7ad7453 commit 91856a7
Show file tree
Hide file tree
Showing 14 changed files with 323 additions and 313 deletions.
Expand Up @@ -12,7 +12,8 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.exception.SchemaException;

import org.apache.commons.lang.BooleanUtils;
import org.jetbrains.annotations.Nullable;

import javax.xml.bind.JAXBElement;
Expand Down Expand Up @@ -69,4 +70,15 @@ public interface PrismPropertyValue<T> extends DebugDumpable, Serializable, Pris
@Override
T getRealValue();

static <T> T getRealValue(PrismPropertyValue<T> propertyValue) {
return propertyValue != null ? propertyValue.getRealValue() : null;
}

static boolean isNotFalse(PrismPropertyValue<Boolean> booleanPropertyValue) {
return booleanPropertyValue == null || BooleanUtils.isNotFalse(booleanPropertyValue.getRealValue());
}

static boolean isTrue(PrismPropertyValue<Boolean> booleanPropertyValue) {
return booleanPropertyValue != null && BooleanUtils.isTrue(booleanPropertyValue.getRealValue());
}
}
Expand Up @@ -781,8 +781,8 @@ private <O extends ObjectType> boolean checkExpression(String generatedValue, Ex
}
variables.addVariableDefinition(ExpressionConstants.VAR_OBJECT, object, objectDef);

PrismPropertyValue<Boolean> output = ExpressionUtil.evaluateCondition(variables, checkExpression, expressionProfile, expressionFactory, shortDesc, task, result);
return ExpressionUtil.getBooleanConditionOutput(output);
return ExpressionUtil.evaluateConditionDefaultFalse(variables, checkExpression,
expressionProfile, expressionFactory, shortDesc, task, result);
}

/**
Expand Down
Expand Up @@ -10,11 +10,12 @@

import java.util.*;

import com.evolveum.midpoint.prism.query.AndFilter;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;

import com.evolveum.midpoint.schema.util.MiscSchemaUtil;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -32,7 +33,6 @@
import com.evolveum.midpoint.model.impl.ModelObjectResolver;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.repo.common.expression.ExpressionFactory;
import com.evolveum.midpoint.repo.common.expression.ExpressionUtil;
Expand Down Expand Up @@ -349,19 +349,14 @@ private String generateNumberMessage(DashboardWidgetType widget, ExpressionVaria
}

private void evaluateVariation(DashboardWidgetType widget, ExpressionVariables variables, DashboardWidget data) {

if(widget.getPresentation() != null) {
if(widget.getPresentation().getVariation() != null) {
for(DashboardWidgetVariationType variation : widget.getPresentation().getVariation()) {
if (widget.getPresentation() != null) {
if (widget.getPresentation().getVariation() != null) {
for (DashboardWidgetVariationType variation : widget.getPresentation().getVariation()) {
Task task = taskManager.createTaskInstance("Evaluate variation");
PrismPropertyValue<Boolean> usingVariation;
try {
usingVariation = ExpressionUtil.evaluateCondition(variables, variation.getCondition(), null,
expressionFactory,
"Variation", task, task.getResult());

if(usingVariation != null && usingVariation.getRealValue() != null
&& usingVariation.getRealValue().equals(Boolean.TRUE)) {
boolean usingVariation = ExpressionUtil.evaluateConditionDefaultFalse(variables, variation.getCondition(),
MiscSchemaUtil.getExpressionProfile(), expressionFactory, "Variation", task, task.getResult());
if (usingVariation) {
data.setDisplay(combineDisplay(widget.getDisplay(), variation.getDisplay()));
} else {
data.setDisplay(widget.getDisplay());
Expand Down
Expand Up @@ -1744,21 +1744,11 @@ private OperationProvisioningScriptsType evaluateScript(OperationProvisioningScr
}

private boolean evaluateScriptCondition(OperationProvisioningScriptType script,
ExpressionVariables variables, ExpressionProfile expressionProfile, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException {
ExpressionType condition = script.getCondition();
if (condition == null) {
return true;
}

PrismPropertyValue<Boolean> conditionOutput = ExpressionUtil.evaluateCondition(variables, condition, expressionProfile, expressionFactory, " condition for provisioning script ", task, result);
if (conditionOutput == null) {
return true;
}

Boolean conditionOutputValue = conditionOutput.getValue();

return BooleanUtils.isNotFalse(conditionOutputValue);

ExpressionVariables variables, ExpressionProfile expressionProfile, Task task, OperationResult result)
throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException,
ConfigurationException, SecurityViolationException {
return ExpressionUtil.evaluateConditionDefaultTrue(variables, script.getCondition(), expressionProfile,
expressionFactory, " condition for provisioning script ", task, result);
}

private void evaluateScriptArgument(ProvisioningScriptArgumentType argument,
Expand Down
Expand Up @@ -236,9 +236,8 @@ private boolean conditionMatches(SynchronizationReactionType reaction, Operation
variables.put(ExpressionConstants.VAR_RESOURCE_OBJECT_DELTA, resourceObjectDelta, ObjectDelta.class);
try {
ModelExpressionThreadLocalHolder.pushExpressionEnvironment(new ExpressionEnvironment<>(task, result));
PrismPropertyValue<Boolean> evaluateCondition = ExpressionUtil.evaluateCondition(variables, expression,
boolean value = ExpressionUtil.evaluateConditionDefaultFalse(variables, expression,
expressionProfile, expressionFactory, desc, task, result);
boolean value = Boolean.TRUE.equals(evaluateCondition.getValue());
if (!value) {
LOGGER.trace("Skipping reaction {} because the condition was evaluated to false", reaction);
}
Expand Down
Expand Up @@ -60,6 +60,8 @@
import java.util.HashSet;
import java.util.Set;

import static com.evolveum.midpoint.prism.PrismPropertyValue.getRealValue;

@Component
public class SynchronizationExpressionsEvaluator {

Expand Down Expand Up @@ -129,25 +131,17 @@ public <F extends FocusType> List<PrismObject<F>> findFocusesByCorrelationRule(C
}

private boolean satisfyCondition(ShadowType currentShadow, ConditionalSearchFilterType conditionalFilter,
ExpressionProfile expressionProfile, ResourceType resourceType, SystemConfigurationType configurationType, String shortDesc, Task task,
OperationResult parentResult) throws SchemaException,
ExpressionProfile expressionProfile, ResourceType resource, SystemConfigurationType configuration,
String shortDesc, Task task, OperationResult result) throws SchemaException,
ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException {

if (conditionalFilter.getCondition() == null){
if (conditionalFilter.getCondition() == null) {
return true;
} else {
ExpressionVariables variables = ModelImplUtils.getDefaultExpressionVariables(null, currentShadow,
resource, configuration, prismContext);
return ExpressionUtil.evaluateConditionDefaultFalse(variables,
conditionalFilter.getCondition(), expressionProfile, expressionFactory, shortDesc, task, result);
}

ExpressionType condition = conditionalFilter.getCondition();
ExpressionVariables variables = ModelImplUtils.getDefaultExpressionVariables(null,currentShadow, resourceType, configurationType, prismContext);
ItemDefinition outputDefinition = prismContext.definitionFactory().createPropertyDefinition(
ExpressionConstants.OUTPUT_ELEMENT_NAME, PrimitiveType.BOOLEAN.getQname());
PrismPropertyValue<Boolean> satisfy = (PrismPropertyValue) ExpressionUtil.evaluateExpression(variables,
outputDefinition, condition, expressionProfile, expressionFactory, shortDesc, task, parentResult);
if (satisfy.getValue() == null) {
return false;
}

return satisfy.getValue();
}

private <F extends FocusType> boolean contains(List<PrismObject<F>> users, PrismObject<F> foundUser){
Expand All @@ -159,7 +153,6 @@ private <F extends FocusType> boolean contains(List<PrismObject<F>> users, Prism
return false;
}


private <F extends FocusType> List<PrismObject<F>> findFocusesByCorrelationRule(Class<F> focusType,
ShadowType currentShadow, ConditionalSearchFilterType conditionalFilter, ExpressionProfile expressionProfile, ResourceType resourceType, SystemConfigurationType configurationType,
Task task, OperationResult result)
Expand Down Expand Up @@ -357,7 +350,7 @@ private ObjectQuery evaluateQueryExpressions(ObjectQuery query, ExpressionProfil
return ExpressionUtil.evaluateQueryExpressions(query, variables, expressionProfile, expressionFactory, prismContext, shortDesc, task, result);
}

public <F extends FocusType> boolean evaluateConfirmationExpression(Class<F> focusType, F user, ShadowType shadow, ResourceType resource,
private <F extends FocusType> boolean evaluateConfirmationExpression(Class<F> focusType, F user, ShadowType shadow, ResourceType resource,
SystemConfigurationType configuration, ExpressionType expressionType, Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, SecurityViolationException {
Validate.notNull(user, "User must not be null.");
Expand Down Expand Up @@ -395,6 +388,7 @@ public <F extends FocusType> boolean evaluateConfirmationExpression(Class<F> foc
}

// For now only used in sync service. but later can be used in outbound/assignments
@SuppressWarnings("WeakerAccess")
public String generateTag(ResourceObjectMultiplicityType multiplicity, PrismObject<ShadowType> shadow, PrismObject<ResourceType> resource, PrismObject<SystemConfigurationType> configuration, String shortDesc, Task task, OperationResult parentResult) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException {
if (multiplicity == null) {
return null;
Expand All @@ -411,12 +405,8 @@ public String generateTag(ResourceObjectMultiplicityType multiplicity, PrismObje
ExpressionVariables variables = ModelImplUtils.getDefaultExpressionVariables(null, shadow, null, resource, configuration, null, prismContext);
ItemDefinition outputDefinition = prismContext.definitionFactory().createPropertyDefinition(
ExpressionConstants.OUTPUT_ELEMENT_NAME, PrimitiveType.STRING.getQname());
PrismPropertyValue<String> tagProp = (PrismPropertyValue) ExpressionUtil.evaluateExpression(variables,
PrismPropertyValue<String> tagProp = ExpressionUtil.evaluateExpression(variables,
outputDefinition, expressionType, MiscSchemaUtil.getExpressionProfile(), expressionFactory, shortDesc, task, parentResult);
if (tagProp == null) {
return null;
}
return tagProp.getRealValue();
return getRealValue(tagProp);
}

}
Expand Up @@ -59,6 +59,7 @@
import javax.xml.namespace.QName;
import java.util.*;

import static com.evolveum.midpoint.prism.PrismPropertyValue.getRealValue;
import static com.evolveum.midpoint.schema.internals.InternalsConfig.consistencyChecks;

/**
Expand Down Expand Up @@ -321,10 +322,7 @@ private <F extends FocusType> ObjectSynchronizationDiscriminatorType evaluateSyn
.findPropertyDefinitionByElementName(new QName(SchemaConstants.NS_C, "objectSynchronizationDiscriminator"));
PrismPropertyValue<ObjectSynchronizationDiscriminatorType> evaluateDiscriminator = ExpressionUtil.evaluateExpression(variables, discriminatorDef,
classificationExpression, syncCtx.getExpressionProfile(), expressionFactory, desc, task, result);
if (evaluateDiscriminator == null) {
return null;
}
return evaluateDiscriminator.getValue();
return getRealValue(evaluateDiscriminator);
} finally {
ModelExpressionThreadLocalHolder.popExpressionEnvironment();
}
Expand Down

0 comments on commit 91856a7

Please sign in to comment.