Repository: nifi
Updated Branches:
  refs/heads/master 270892f92 -> 16e56ccfc


NIFI-4080: Added EL support to fields in ValidateCSV


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/836c3242
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/836c3242
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/836c3242

Branch: refs/heads/master
Commit: 836c3242587b0246af4a10497dfd8ce90cf642a9
Parents: 270892f
Author: Matthew Burgess <mattyb...@apache.org>
Authored: Thu Oct 26 08:27:27 2017 -0400
Committer: Pierre Villard <pierre.villard...@gmail.com>
Committed: Thu Feb 8 11:56:42 2018 +0100

----------------------------------------------------------------------
 .../nifi/processors/standard/ValidateCsv.java   | 14 +++++----
 .../processors/standard/TestValidateCsv.java    | 31 ++++++++++++++++++++
 2 files changed, 40 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/836c3242/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 6bb4205..130713c 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
@@ -120,6 +120,7 @@ public class ValidateCsv extends AbstractProcessor {
                     + "processors to apply. The following cell processors are 
allowed in the schema definition: "
                     + allowedOperators.toString() + ". Note: cell processors 
cannot be nested except with Optional.")
             .required(true)
+            .expressionLanguageSupported(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
 
@@ -139,6 +140,7 @@ public class ValidateCsv extends AbstractProcessor {
             .description("Character used as 'quote' in the incoming data. 
Example: \"")
             .required(true)
             .defaultValue("\"")
+            .expressionLanguageSupported(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
 
@@ -148,6 +150,7 @@ public class ValidateCsv extends AbstractProcessor {
             .description("Character used as 'delimiter' in the incoming data. 
Example: ,")
             .required(true)
             .defaultValue(",")
+            .expressionLanguageSupported(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
 
@@ -157,6 +160,7 @@ public class ValidateCsv extends AbstractProcessor {
             .description("Symbols used as 'end of line' in the incoming data. 
Example: \\n")
             .required(true)
             .defaultValue("\\n")
+            .expressionLanguageSupported(true)
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             .build();
 
@@ -213,9 +217,9 @@ public class ValidateCsv extends AbstractProcessor {
 
     @Override
     protected Collection<ValidationResult> customValidate(ValidationContext 
validationContext) {
-        String schema = validationContext.getProperty(SCHEMA).getValue();
+        String schema = 
validationContext.getProperty(SCHEMA).evaluateAttributeExpressions().getValue();
         try {
-            this.parseSchema(validationContext.getProperty(SCHEMA).getValue());
+            this.parseSchema(schema);
         } catch (Exception e) {
             final List<ValidationResult> problems = new ArrayList<>(1);
             problems.add(new 
ValidationResult.Builder().subject(SCHEMA.getName())
@@ -234,9 +238,9 @@ public class ValidateCsv extends AbstractProcessor {
         // input is transferred over to Java as is. So when you type the 
characters "\"
         // and "n" into the UI the Java string will end up being those two 
characters
         // not the interpreted value "\n".
-        final String msgDemarcator = 
context.getProperty(END_OF_LINE_CHARACTER).getValue().replace("\\n", 
"\n").replace("\\r", "\r").replace("\\t", "\t");
-        this.preference.set(new 
CsvPreference.Builder(context.getProperty(QUOTE_CHARACTER).getValue().charAt(0),
-                context.getProperty(DELIMITER_CHARACTER).getValue().charAt(0), 
msgDemarcator).build());
+        final String msgDemarcator = 
context.getProperty(END_OF_LINE_CHARACTER).evaluateAttributeExpressions().getValue().replace("\\n",
 "\n").replace("\\r", "\r").replace("\\t", "\t");
+        this.preference.set(new 
CsvPreference.Builder(context.getProperty(QUOTE_CHARACTER).evaluateAttributeExpressions().getValue().charAt(0),
+                
context.getProperty(DELIMITER_CHARACTER).evaluateAttributeExpressions().getValue().charAt(0),
 msgDemarcator).build());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/nifi/blob/836c3242/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 5092ba8..0e82475 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
@@ -276,6 +276,37 @@ public class TestValidateCsv {
     }
 
     @Test
+    public void testValidateWithEL() {
+        final TestRunner runner = TestRunners.newTestRunner(new ValidateCsv());
+        runner.setProperty(ValidateCsv.DELIMITER_CHARACTER, "${comma}");
+        runner.setProperty(ValidateCsv.END_OF_LINE_CHARACTER, "${crlf}");
+        runner.setProperty(ValidateCsv.QUOTE_CHARACTER, "${quote}");
+        runner.setProperty(ValidateCsv.HEADER, "false");
+
+        runner.setProperty(ValidateCsv.SCHEMA, "RequireSubString(\"test\")");
+        runner.assertNotValid();
+
+        runner.setProperty(ValidateCsv.SCHEMA, "''");
+        runner.assertNotValid();
+
+        runner.setProperty(ValidateCsv.SCHEMA, "\"\"");
+        runner.assertNotValid();
+
+        runner.setProperty(ValidateCsv.SCHEMA, "${schema}");
+        runner.assertValid();
+
+        int hashcode = "test".hashCode();
+        runner.setVariable("schema", "RequireHashCode(" + hashcode + "), 
RequireSubStr(\"test\")");
+        runner.setVariable("comma", ",");
+        runner.setVariable("quote", "\"");
+        runner.setVariable("crlf", "\r\n");
+
+        runner.enqueue("test,test");
+        runner.run();
+        runner.assertAllFlowFilesTransferred(ValidateCsv.REL_VALID, 1);
+    }
+
+    @Test
     public void testParseSchemaCommaBoundary() {
         final TestRunner runner = TestRunners.newTestRunner(new ValidateCsv());
         runner.setProperty(ValidateCsv.SCHEMA, "Null(),Null");

Reply via email to