public boolean isExpressionLanguageSupported() { return expressionLanguageSupported || !expressionLanguageScope.equals(ExpressionLanguageScope.NONE); }
static String evaluateExpression(final Tree tree, final String queryText, final Map<String, String> valueMap, final AttributeValueDecorator decorator, final Map<String, String> stateVariables) throws ProcessException { final Object evaluated = Query.fromTree(tree, queryText).evaluate(valueMap, stateVariables).getValue(); if (evaluated == null) { return null; } final String value = evaluated.toString(); return decorator == null ? value : decorator.decorate(value); }
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { ValidationResult result = new ValidationResult.Builder() .subject("Local Network Interface").valid(true).input(input).build(); if (interfaceSet.contains(input.toLowerCase())) { return result; } String message; String realValue = input; try { if (context.isExpressionLanguagePresent(input)) { AttributeExpression ae = context.newExpressionLanguageCompiler().compile(input); realValue = ae.evaluate(); } if (interfaceSet.contains(realValue.toLowerCase())) { return result; } message = realValue + " is not a valid network name. Valid names are " + interfaceSet.toString(); } catch (IllegalArgumentException e) { message = "Not a valid AttributeExpression: " + e.getMessage(); } result = new ValidationResult.Builder().subject("Local Network Interface") .valid(false).input(input).explanation(message).build(); return result; } })
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { final String syntaxError = context.newExpressionLanguageCompiler().validateExpression(input, allowExtraCharacters); if (syntaxError != null) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(syntaxError).build(); } final ResultType resultType = allowExtraCharacters ? ResultType.STRING : context.newExpressionLanguageCompiler().getResultType(input); if (!resultType.equals(expectedResultType)) { return new ValidationResult.Builder() .subject(subject) .input(input) .valid(false) .explanation("Expected Attribute Query to return type " + expectedResultType + " but query returns type " + resultType) .build(); } return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); } };
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) { final AttributeExpression.ResultType resultType = context.newExpressionLanguageCompiler().getResultType(input); if (!resultType.equals(AttributeExpression.ResultType.STRING)) { return new ValidationResult.Builder() .subject(subject) .input(input) .valid(false) .explanation("Expected property to to return type " + AttributeExpression.ResultType.STRING + " but expression returns type " + resultType) .build(); } return new ValidationResult.Builder() .subject(subject) .input(input) .valid(true) .explanation("Property returns type " + AttributeExpression.ResultType.STRING) .build(); } return DPV_RE_VALIDATOR.validate(subject, input, context); } };
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) { try { final String result = context.newExpressionLanguageCompiler().validateExpression(input, true); if (!isEmpty(result)) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(result).build(); } } catch (final Exception e) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(e.getMessage()).build(); } } return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); }
&& propertyDescriptor.getExpressionLanguageScope().equals(ExpressionLanguageScope.NONE) ? "true (undefined scope)" : propertyDescriptor.getExpressionLanguageScope().getDescription(); dto.setExpressionLanguageScope(description);
final ResultType resultType = validationContext.newExpressionLanguageCompiler().compile(propValue).getResultType(); if (resultType != ResultType.BOOLEAN) { results.add(new ValidationResult.Builder().valid(false).input(propValue).subject(descriptor.getName()) .explanation("expression returns type of " + resultType.name() + " but is required to return a Boolean value").build());
private void writeDynamicProperty(final DynamicProperty property) throws IOException { writeStartElement("dynamicProperty"); writeTextElement("name", property.name()); writeTextElement("value", property.value()); writeTextElement("description", property.description()); writeBooleanElement("expressionLanguageSupported", property.supportsExpressionLanguage()); writeTextElement("expressionLanguageScope", property.expressionLanguageScope() == null ? null : property.expressionLanguageScope().name()); writeEndElement(); }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { final String syntaxError = context.newExpressionLanguageCompiler().validateExpression(input, allowExtraCharacters); if (syntaxError != null) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(syntaxError).build(); } final ResultType resultType = allowExtraCharacters ? ResultType.STRING : context.newExpressionLanguageCompiler().getResultType(input); if (!resultType.equals(expectedResultType)) { return new ValidationResult.Builder() .subject(subject) .input(input) .valid(false) .explanation("Expected Attribute Query to return type " + expectedResultType + " but query returns type " + resultType) .build(); } return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); } };
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(value)) { final ResultType resultType = context.newExpressionLanguageCompiler().getResultType(value); if (!resultType.equals(ResultType.STRING)) { return new ValidationResult.Builder() .subject(subject) .input(value) .valid(false) .explanation("Expected Attribute Query to return type " + ResultType.STRING + " but query returns type " + resultType) .build(); } return new ValidationResult.Builder().subject(subject).input(value).explanation("Expression Language Present").valid(true).build(); } String reason = null; try { if (!Charset.isSupported(value)) { reason = "Character Set is not supported by this JVM."; } } catch (final UnsupportedCharsetException uce) { reason = "Character Set is not supported by this JVM."; } catch (final IllegalArgumentException iae) { reason = "Character Set value cannot be null."; } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } };
&& (attributesAvailable && !ExpressionLanguageScope.FLOWFILE_ATTRIBUTES.equals(expressionLanguageScope))) { throw new IllegalStateException("Attempting to evaluate expression language for " + propertyDescriptor.getName() + " using flow file attributes but the scope evaluation is set to " + expressionLanguageScope + ". The" && ExpressionLanguageScope.FLOWFILE_ATTRIBUTES.equals(expressionLanguageScope) && this.serviceLookup instanceof MockValidationContext) { return; && ExpressionLanguageScope.FLOWFILE_ATTRIBUTES.equals(expressionLanguageScope) && (this.serviceLookup.getInputRequirement() == null || this.serviceLookup.getInputRequirement().value().equals(InputRequirement.Requirement.INPUT_FORBIDDEN))) { && ExpressionLanguageScope.FLOWFILE_ATTRIBUTES.equals(expressionLanguageScope) && !((MockProcessContext) this.serviceLookup).hasIncomingConnection()) { return; && (!attributesAvailable && ExpressionLanguageScope.FLOWFILE_ATTRIBUTES.equals(expressionLanguageScope))) { throw new IllegalStateException("Attempting to evaluate expression language for " + propertyDescriptor.getName() + " without using flow file attributes but the scope evaluation is set to " + expressionLanguageScope + ". The"
final String invalidExpressionMsg = validationContext.newExpressionLanguageCompiler().validateExpression(specValue, true); if (!StringUtils.isEmpty(invalidExpressionMsg)) { results.add(new ValidationResult.Builder().valid(false)
private void writeProperty(final PropertyDescriptor property) throws IOException { writeStartElement("property"); writeTextElement("name", property.getName()); writeTextElement("displayName", property.getDisplayName()); writeTextElement("description", property.getDescription()); writeTextElement("defaultValue", property.getDefaultValue()); writeTextElement("controllerServiceDefinition", property.getControllerServiceDefinition() == null ? null : property.getControllerServiceDefinition().getName()); writeTextArray("allowableValues", "allowableValue", property.getAllowableValues(), AllowableValue::getDisplayName); writeBooleanElement("required", property.isRequired()); writeBooleanElement("sensitive", property.isSensitive()); writeBooleanElement("expressionLanguageSupported", property.isExpressionLanguageSupported()); writeTextElement("expressionLanguageScope", property.getExpressionLanguageScope() == null ? null : property.getExpressionLanguageScope().name()); writeBooleanElement("dynamicallyModifiesClasspath", property.isDynamicClasspathModifier()); writeBooleanElement("dynamic", property.isDynamic()); writeEndElement(); }
@Override public String evaluate(final FlowFile flowFile, final AttributeValueDecorator decorator) throws ProcessException { final ValueLookup lookup = new ValueLookup(variableRegistry, flowFile); final Object evaluationResult = query.evaluate(lookup).getValue(); if (evaluationResult == null) { return ""; } String result = evaluationResult.toString(); if (decorator != null) { result = decorator.decorate(result); } return Query.unescape(result); } }
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) { final AttributeExpression.ResultType resultType = context.newExpressionLanguageCompiler().getResultType(input); if (!resultType.equals(AttributeExpression.ResultType.STRING)) { return new ValidationResult.Builder() .subject(subject) .input(input) .valid(false) .explanation("Expected property to to return type " + AttributeExpression.ResultType.STRING + " but expression returns type " + resultType) .build(); } return new ValidationResult.Builder() .subject(subject) .input(input) .valid(true) .explanation("Property returns type " + AttributeExpression.ResultType.STRING) .build(); } return DPV_RE_VALIDATOR.validate(subject, input, context); } };
String text; if(dynamicProperty.expressionLanguageScope().equals(ExpressionLanguageScope.NONE)) { if(dynamicProperty.supportsExpressionLanguage()) { text = "Supports Expression Language: true (undefined scope)";
final String invalidExpressionMsg = validationContext.newExpressionLanguageCompiler().validateExpression(specValue,true); if (!StringUtils.isEmpty(invalidExpressionMsg)) { results.add(new ValidationResult.Builder().valid(false)
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(value)) { final ResultType resultType = context.newExpressionLanguageCompiler().getResultType(value); if (!resultType.equals(ResultType.STRING)) { return new ValidationResult.Builder() .subject(subject) .input(value) .valid(false) .explanation("Expected Attribute Query to return type " + ResultType.STRING + " but query returns type " + resultType) .build(); } return new ValidationResult.Builder().subject(subject).input(value).explanation("Expression Language Present").valid(true).build(); } String reason = null; try { if (!Charset.isSupported(value)) { reason = "Character Set is not supported by this JVM."; } } catch (final UnsupportedCharsetException uce) { reason = "Character Set is not supported by this JVM."; } catch (final IllegalArgumentException iae) { reason = "Character Set value cannot be null."; } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } };
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) { try { final String result = context.newExpressionLanguageCompiler().validateExpression(input, true); if (!isEmpty(result)) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(result).build(); } } catch (final Exception e) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(e.getMessage()).build(); } } return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); }