public Builder<V, D> addVariableDefinition(QName name, Object value) { variables.addVariableDefinition(name, value); return this; }
private boolean evalCondition(Object value) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(ExpressionConstants.VAR_INPUT, value); if (additionalVariableName != null) { variables.addVariableDefinition(additionalVariableName, value); } if (additionalVariables != null) { variables.addVariableDefinitions(additionalVariables, variables.keySet()); } ExpressionEvaluationContext context = new ExpressionEvaluationContext(null, variables, shortDesc, task, result); PrismValueDeltaSetTriple<PrismPropertyValue<Boolean>> outputTriple = condition.evaluate(context); if (outputTriple == null) { return false; } return ExpressionUtil.computeConditionResult(outputTriple.getNonNegativeValues()); }
public void setRootNode(ObjectReferenceType objectRef) { addVariableDefinition(null, objectRef); }
protected ExpressionVariables getDefaultVariables(Message message, Event event) throws UnsupportedEncodingException { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(SchemaConstants.C_MESSAGE, message); variables.addVariableDefinition(SchemaConstants.C_EVENT, event); return variables; }
private ExpressionVariables getAssignmentEvaluationVariables() { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(ExpressionConstants.VAR_LOGIN_MODE, loginMode); // e.g. AssignmentEvaluator itself, model context, etc (when needed) return variables; }
public static void addAssignmentPathVariables(AssignmentPathVariables assignmentPathVariables, ExpressionVariables expressionVariables) { if (assignmentPathVariables != null) { expressionVariables.addVariableDefinition(ExpressionConstants.VAR_ASSIGNMENT, assignmentPathVariables.getMagicAssignment()); expressionVariables.addVariableDefinition(ExpressionConstants.VAR_ASSIGNMENT_PATH, assignmentPathVariables.getAssignmentPath()); expressionVariables.addVariableDefinition(ExpressionConstants.VAR_IMMEDIATE_ASSIGNMENT, assignmentPathVariables.getImmediateAssignment()); expressionVariables.addVariableDefinition(ExpressionConstants.VAR_THIS_ASSIGNMENT, assignmentPathVariables.getThisAssignment()); expressionVariables.addVariableDefinition(ExpressionConstants.VAR_FOCUS_ASSIGNMENT, assignmentPathVariables.getFocusAssignment()); expressionVariables.addVariableDefinition(ExpressionConstants.VAR_IMMEDIATE_ROLE, assignmentPathVariables.getImmediateRole()); } else { // to avoid "no such variable" exceptions in boundary cases // for null/empty paths we might consider creating empty AssignmentPathVariables objects to keep null/empty path distinction expressionVariables.addVariableDefinition(ExpressionConstants.VAR_ASSIGNMENT_PATH, null); } }
private <O extends ObjectType> Collection<PrismValue> evaluateValueExpression(PrismObject<O> objectLeft, PrismObject<O> objectRight, String side, PrismValue origValue, Expression<PrismValue, ItemDefinition> valueExpression, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(ExpressionConstants.VAR_SIDE, side); variables.addVariableDefinition(ExpressionConstants.VAR_OBJECT_LEFT, side); variables.addVariableDefinition(ExpressionConstants.VAR_OBJECT_RIGHT, side); variables.addVariableDefinition(ExpressionConstants.VAR_INPUT, origValue); variables.addVariableDefinition(ExpressionConstants.VAR_VALUE, origValue); ExpressionEvaluationContext exprContext = new ExpressionEvaluationContext(null, variables, "for value "+origValue, task, result); PrismValueDeltaSetTriple<PrismValue> triple = valueExpression.evaluate(exprContext); if (triple == null) { return null; } return triple.getNonNegativeValues(); }
/** * Expects QName-value pairs. * * E.g. * create(var1qname, var1value, var2qname, var2value, ...) * * Mostly for testing. Use at your own risk. */ public static ExpressionVariables create(Object... parameters) { ExpressionVariables vars = new ExpressionVariables(); for (int i = 0; i < parameters.length; i += 2) { vars.addVariableDefinition((QName)parameters[i], parameters[i+1]); } return vars; }
public static ExpressionVariables getDefaultXPathVariables(UserType user, ShadowType shadow, ResourceType resource) { ExpressionVariables variables = new ExpressionVariables(); if (user != null) { variables.addVariableDefinition(ExpressionConstants.VAR_USER, user.asPrismObject()); } if (shadow != null) { variables.addVariableDefinition(ExpressionConstants.VAR_ACCOUNT, shadow.asPrismObject()); variables.addVariableDefinition(ExpressionConstants.VAR_PROJECTION, shadow.asPrismObject()); } if (resource != null) { variables.addVariableDefinition(ExpressionConstants.VAR_RESOURCE, resource.asPrismObject()); } return variables; }
private static ExpressionVariables createVariables(HashMap<String, Object> variableMap) { ExpressionVariables rv = new ExpressionVariables(); Map<String, Object> clonedVariableMap = cloneIfNecessary(variableMap); clonedVariableMap.forEach((name, value) -> rv.addVariableDefinition(new QName(SchemaConstants.NS_C, name), value)); return rv; }
private <O extends ObjectType> boolean checkExpression(String generatedValue, ExpressionType checkExpression, AbstractValuePolicyOriginResolver<O> originResolver, String shortDesc, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(ExpressionConstants.VAR_INPUT, generatedValue); variables.addVariableDefinition(ExpressionConstants.VAR_OBJECT, originResolver == null ? null : originResolver.getObject()); PrismPropertyValue<Boolean> output = ExpressionUtil.evaluateCondition(variables, checkExpression, expressionFactory, shortDesc, task, result); return ExpressionUtil.getBooleanConditionOutput(output); }
private List<ObjectReferenceType> computeDelegateTo(DelegateWorkItemActionType delegateAction, AccessCertificationWorkItemType workItem, AccessCertificationCaseType aCase, AccessCertificationCampaignType campaign, Task task, OperationResult result) { List<ObjectReferenceType> rv = CloneUtil.cloneCollectionMembers(delegateAction.getApproverRef()); if (!delegateAction.getApproverExpression().isEmpty()) { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(ExpressionConstants.VAR_WORK_ITEM, workItem); variables.addVariableDefinition(ExpressionConstants.VAR_CERTIFICATION_CASE, aCase); variables.addVariableDefinition(ExpressionConstants.VAR_CAMPAIGN, campaign); for (ExpressionType expression : delegateAction.getApproverExpression()) { rv.addAll(expressionHelper.evaluateRefExpressionChecked(expression, variables, "computing delegates", task, result)); } } return rv; }
public ExpressionVariables getDefaultVariables(@Nullable DelegateExecution execution, Task wfTask, OperationResult result) throws SchemaException, ObjectNotFoundException { ExpressionVariables variables = getDefaultVariables(wfTask.getWorkflowContext(), wfTask.getChannel(), result); // Activiti process instance variables (use with care) if (execution != null) { execution.getVariables().forEach((key, value) -> variables.addVariableDefinition(new QName("_" + key), value)); } return variables; }
private boolean isAssociationRelevant(PcpAspectConfigurationType config, AssociationAdditionType itemToApprove, ResourceShadowDiscriminator rsd, ModelContext<?> modelContext, Task task, OperationResult result) { LOGGER.trace(" - considering: {}", itemToApprove); ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(SchemaConstants.C_ASSOCIATION, itemToApprove.getAssociation()); variables.addVariableDefinition(SchemaConstants.C_SHADOW_DISCRIMINATOR, rsd); boolean applicable = primaryChangeAspectHelper.evaluateApplicabilityCondition( config, modelContext, itemToApprove, variables, this, task, result); LOGGER.trace(" - result: applicable = {}", applicable); return applicable; }
private List<ObjectReferenceType> computeDelegateTo(DelegateWorkItemActionType delegateAction, WorkItemType workItem, Task wfTask, Task triggerScannerTask, OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { List<ObjectReferenceType> rv = new ArrayList<>(); rv.addAll(CloneUtil.cloneCollectionMembers(delegateAction.getApproverRef())); if (!delegateAction.getApproverExpression().isEmpty()) { ExpressionVariables variables = stageComputeHelper.getDefaultVariables(null, wfTask, result); variables.addVariableDefinition(SchemaConstants.C_WORK_ITEM, workItem); rv.addAll(evaluationHelper.evaluateRefExpressions(delegateAction.getApproverExpression(), variables, "computing delegates", triggerScannerTask, result)); } // if (!delegateAction.getApproverRelation().isEmpty()) { // throw new UnsupportedOperationException("Approver relation in delegate/escalate action is not supported yet."); // } return rv; }
boolean evaluateActivationCondition(GeneralChangeProcessorScenarioType scenarioType, ModelContext context, Task taskFromModel, OperationResult result) throws SchemaException { ExpressionType conditionExpression = scenarioType.getActivationCondition(); if (conditionExpression == null) { return true; } ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(new QName(SchemaConstants.NS_C, "context"), context); boolean start; try { start = evaluateBooleanExpression(conditionExpression, variables, "workflow activation condition", taskFromModel, result); } catch (ObjectNotFoundException|ExpressionEvaluationException | CommunicationException | ConfigurationException | SecurityViolationException e) { throw new SystemException("Couldn't evaluate generalChangeProcessor activation condition", e); } return start; }
private ObjectFilterExpressionEvaluator createFilterEvaluator(MidPointPrincipal principal, String objectTargetDesc, String autzHumanReadableDesc, Task task, OperationResult result) { return filter -> { if (filter == null) { return null; } ExpressionVariables variables = new ExpressionVariables(); PrismObject<UserType> subject = null; if (principal != null) { subject = principal.getUser().asPrismObject(); } variables.addVariableDefinition(ExpressionConstants.VAR_SUBJECT, subject); return ExpressionUtil.evaluateFilterExpressions(filter, variables, expressionFactory, prismContext, "expression in " + objectTargetDesc + " in authorization " + autzHumanReadableDesc, task, result); }; }
private ExpressionVariables createVariables() throws SchemaException, IOException { ExpressionVariables variables = new ExpressionVariables(); variables.addVariableDefinition(ExpressionConstants.VAR_USER, createUser()); return variables; }
private void resolveEntitlement(PrismContainerValue<ShadowAssociationType> value, LensProjectionContext projContext, ExpressionVariables variables) { LOGGER.trace("Producing value {} ", value); PrismObject<ShadowType> entitlement = projContext.getEntitlementMap().get(value.findReference(ShadowAssociationType.F_SHADOW_REF).getOid()); LOGGER.trace("Resolved entitlement {}", entitlement); if (variables.containsKey(ExpressionConstants.VAR_ENTITLEMENT)) { variables.replaceVariableDefinition(ExpressionConstants.VAR_ENTITLEMENT, entitlement); } else { variables.addVariableDefinition(ExpressionConstants.VAR_ENTITLEMENT, entitlement); } }
private ExpressionVariables createVariablesOdo() throws SchemaException, IOException { ExpressionVariables variables = new ExpressionVariables(); PrismObject<UserType> userOld = createUser(); ObjectDelta<UserType> delta = PrismTestUtil.getPrismContext().deltaFactory().object().createModificationReplaceProperty(UserType.class, userOld.getOid(), UserType.F_FULL_NAME, PrismTestUtil.createPolyString("Captain Jack Sparrow")); ObjectDeltaObject<UserType> odo = new ObjectDeltaObject<>(userOld, delta, null); odo.recompute(); variables.addVariableDefinition(ExpressionConstants.VAR_USER, odo); return variables; }