public void parse( ExpressionFactory factory, String contextDescription, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException { if (expressionType == null) { evaluators.add(createDefaultEvaluator(factory, contextDescription, task, result)); return; } if (expressionType.getExpressionEvaluator() == null /* && expressionType.getSequence() == null */) { throw new SchemaException("No evaluator was specified in " + contextDescription); } if (expressionType.getExpressionEvaluator() != null) { ExpressionEvaluator evaluator = createEvaluator( expressionType.getExpressionEvaluator(), factory, contextDescription, task, result); evaluators.add(evaluator); } if (evaluators.isEmpty()) { evaluators.add(createDefaultEvaluator(factory, contextDescription, task, result)); } }
private ExpressionVariables processInnerVariables( ExpressionVariables variables, String contextDescription, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException { if (expressionType == null || expressionType.getVariable() == null || expressionType.getVariable().isEmpty()) { // shortcut return variables; } ExpressionVariables newVariables = new ExpressionVariables(); for (Entry<QName, Object> entry : variables.entrySet()) { newVariables.addVariableDefinition(entry.getKey(), entry.getValue()); } for (ExpressionVariableDefinitionType variableDefType : expressionType.getVariable()) { QName varName = variableDefType.getName(); if (varName == null) { throw new SchemaException("No variable name in expression in " + contextDescription); } if (variableDefType.getObjectRef() != null) { ObjectReferenceType ref = variableDefType.getObjectRef(); ref.setType(prismContext.getSchemaRegistry().qualifyTypeName(ref.getType())); ObjectType varObject = objectResolver.resolve( ref, ObjectType.class, null, "variable " + varName + " in " + contextDescription, task, result); newVariables.addVariableDefinition(varName, varObject); } else if (variableDefType.getValue() != null) { // Only string is supported now Object valueObject = variableDefType.getValue(); if (valueObject instanceof String) { newVariables.addVariableDefinition(varName, valueObject); } else if (valueObject instanceof Element) { newVariables.addVariableDefinition(varName, ((Element) valueObject).getTextContent()); } else if (valueObject instanceof RawType) { newVariables.addVariableDefinition( varName, ((RawType) valueObject).getParsedValue(null, varName)); } else { throw new SchemaException( "Unexpected type " + valueObject.getClass() + " in variable definition " + varName + " in " + contextDescription); } } else if (variableDefType.getPath() != null) { ItemPath itemPath = variableDefType.getPath().getItemPath(); Object resolvedValue = ExpressionUtil.resolvePath( itemPath, variables, null, objectResolver, contextDescription, task, result); newVariables.addVariableDefinition(varName, resolvedValue); } else { throw new SchemaException("No value for variable " + varName + " in " + contextDescription); } } return newVariables; }