NIFI-4080: Restored customValidate in ValidateCSV for schema property with no EL
Signed-off-by: Pierre Villard <pierre.villard...@gmail.com> This closes #2226. Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/16e56ccf Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/16e56ccf Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/16e56ccf Branch: refs/heads/master Commit: 16e56ccfcacb64c96fb0d46e5ca61973e8ab0adb Parents: ba192d2 Author: Matthew Burgess <mattyb...@apache.org> Authored: Tue Feb 6 11:47:33 2018 -0500 Committer: Pierre Villard <pierre.villard...@gmail.com> Committed: Thu Feb 8 11:56:56 2018 +0100 ---------------------------------------------------------------------- .../nifi/processors/standard/ValidateCsv.java | 31 +++++++++++++++++++- .../processors/standard/TestValidateCsv.java | 2 ++ 2 files changed, 32 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/16e56ccf/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java index 4a751f0..b661245 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java @@ -23,6 +23,7 @@ import java.io.OutputStream; import java.io.Reader; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -40,6 +41,9 @@ import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.Tags; import org.apache.nifi.components.AllowableValue; import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.components.PropertyValue; +import org.apache.nifi.components.ValidationContext; +import org.apache.nifi.components.ValidationResult; import org.apache.nifi.flowfile.FlowFile; import org.apache.nifi.logging.ComponentLog; import org.apache.nifi.processor.AbstractProcessor; @@ -117,7 +121,7 @@ public class ValidateCsv extends AbstractProcessor { + allowedOperators.toString() + ". Note: cell processors cannot be nested except with Optional.") .required(true) .expressionLanguageSupported(true) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.NON_EMPTY_EL_VALIDATOR) .build(); public static final PropertyDescriptor HEADER = new PropertyDescriptor.Builder() @@ -209,6 +213,31 @@ public class ValidateCsv extends AbstractProcessor { return properties; } + @Override + protected Collection<ValidationResult> customValidate(ValidationContext context) { + + PropertyValue schemaProp = context.getProperty(SCHEMA); + String schema = schemaProp.getValue(); + String subject = SCHEMA.getName(); + + if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(schema)) { + return Collections.singletonList(new ValidationResult.Builder().subject(subject).input(schema).explanation("Expression Language Present").valid(true).build()); + } + // If no Expression Language is present, try parsing the schema + try { + this.parseSchema(schema); + } catch (Exception e) { + final List<ValidationResult> problems = new ArrayList<>(1); + problems.add(new ValidationResult.Builder().subject(subject) + .input(schema) + .valid(false) + .explanation("Error while parsing the schema: " + e.getMessage()) + .build()); + return problems; + } + return super.customValidate(context); + } + public CsvPreference getPreference(final ProcessContext context, final FlowFile flowFile) { // When going from the UI to Java, the characters are escaped so that what you // input is transferred over to Java as is. So when you type the characters "\" http://git-wip-us.apache.org/repos/asf/nifi/blob/16e56ccf/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java index 21d1406..097aad8 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java @@ -264,7 +264,9 @@ public class TestValidateCsv { runner.setProperty(ValidateCsv.END_OF_LINE_CHARACTER, "\r\n"); runner.setProperty(ValidateCsv.QUOTE_CHARACTER, "\""); runner.setProperty(ValidateCsv.HEADER, "false"); + runner.assertNotValid(); + // We runner.setProperty(ValidateCsv.SCHEMA, "RequireSubString(\"test\")"); runner.assertNotValid();