private <AH extends AssignmentHolderType> EvaluatedPolicyRuleTrigger<?> evaluateForAssignment(JAXBElement<StatePolicyConstraintType> constraintElement,
AssignmentPolicyRuleEvaluationContext<AH> ctx, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, SecurityViolationException {
StatePolicyConstraintType constraint = constraintElement.getValue();
if (constraint.getFilter() != null) {
throw new UnsupportedOperationException("Filter is not supported for assignment state constraints yet.");
}
if (constraint.getExpression() == null) {
return null;
}
if (!ctx.isApplicableToState()) {
return null;
}
boolean match = evaluatorHelper.evaluateBoolean(constraint.getExpression(), evaluatorHelper.createExpressionVariables(ctx, constraintElement),
"expression in assignment state constraint " + constraint.getName() + " (" + ctx.state + ")", ctx.task, result);
if (match) {
return new EvaluatedStateTrigger(ASSIGNMENT_STATE, constraint,
createMessage(ASSIGNMENT_CONSTRAINT_KEY_PREFIX, constraintElement, ctx, true, result),
createShortMessage(ASSIGNMENT_CONSTRAINT_KEY_PREFIX, constraintElement, ctx, true, result));
}
return null;
}