Repository: incubator-nifi
Updated Branches:
  refs/heads/develop 0f01b3c96 -> c4c98fc4a


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PlusEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PlusEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PlusEvaluator.java
index dff693d..7c9278f 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PlusEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PlusEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
 
 public class PlusEvaluator extends NumberEvaluator {
 
-    private final NumberEvaluator subject;
-    private final NumberEvaluator plusValue;
+    private final Evaluator<Long> subject;
+    private final Evaluator<Long> plusValue;
 
-    public PlusEvaluator(final NumberEvaluator subject, final NumberEvaluator 
plusValue) {
+    public PlusEvaluator(final Evaluator<Long> subject, final Evaluator<Long> 
plusValue) {
         this.subject = subject;
         this.plusValue = plusValue;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PrependEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PrependEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PrependEvaluator.java
index 5b66b8f..1053328 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PrependEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/PrependEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class PrependEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator prependEvaluator;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> prependEvaluator;
 
-    public PrependEvaluator(final StringEvaluator subject, final 
StringEvaluator prepend) {
+    public PrependEvaluator(final Evaluator<String> subject, final 
Evaluator<String> prepend) {
         this.subject = subject;
         this.prependEvaluator = prepend;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceAllEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceAllEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceAllEvaluator.java
index 19ed63e..b796233 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceAllEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceAllEvaluator.java
@@ -25,11 +25,11 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class ReplaceAllEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator search;
-    private final StringEvaluator replacement;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> search;
+    private final Evaluator<String> replacement;
 
-    public ReplaceAllEvaluator(final StringEvaluator subject, final 
StringEvaluator search, final StringEvaluator replacement) {
+    public ReplaceAllEvaluator(final Evaluator<String> subject, final 
Evaluator<String> search, final Evaluator<String> replacement) {
         this.subject = subject;
         this.search = search;
         this.replacement = replacement;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEmptyEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEmptyEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEmptyEvaluator.java
index fe08303..9c2cb6d 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEmptyEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEmptyEvaluator.java
@@ -24,10 +24,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 
 public class ReplaceEmptyEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subjectEvaluator;
-    private final StringEvaluator replacementEvaluator;
+    private final Evaluator<String> subjectEvaluator;
+    private final Evaluator<String> replacementEvaluator;
 
-    public ReplaceEmptyEvaluator(final StringEvaluator subjectEvaluator, final 
StringEvaluator replacementEvaluator) {
+    public ReplaceEmptyEvaluator(final Evaluator<String> subjectEvaluator, 
final Evaluator<String> replacementEvaluator) {
         this.subjectEvaluator = subjectEvaluator;
         this.replacementEvaluator = replacementEvaluator;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEvaluator.java
index d6a7c5b..e55e963 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceEvaluator.java
@@ -25,11 +25,11 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class ReplaceEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator search;
-    private final StringEvaluator replacement;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> search;
+    private final Evaluator<String> replacement;
 
-    public ReplaceEvaluator(final StringEvaluator subject, final 
StringEvaluator search, final StringEvaluator replacement) {
+    public ReplaceEvaluator(final Evaluator<String> subject, final 
Evaluator<String> search, final Evaluator<String> replacement) {
         this.subject = subject;
         this.search = search;
         this.replacement = replacement;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceNullEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceNullEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceNullEvaluator.java
index 91333b7..e8487c6 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceNullEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ReplaceNullEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class ReplaceNullEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator resultEvaluator;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> resultEvaluator;
 
-    public ReplaceNullEvaluator(final StringEvaluator subject, final 
StringEvaluator resultEvaluator) {
+    public ReplaceNullEvaluator(final Evaluator<String> subject, final 
Evaluator<String> resultEvaluator) {
         this.subject = subject;
         this.resultEvaluator = resultEvaluator;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StartsWithEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StartsWithEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StartsWithEvaluator.java
index c6a7eb7..6a43550 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StartsWithEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StartsWithEvaluator.java
@@ -22,14 +22,13 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.BooleanEvaluator
 import 
org.apache.nifi.attribute.expression.language.evaluation.BooleanQueryResult;
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
-import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 
 public class StartsWithEvaluator extends BooleanEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator search;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> search;
 
-    public StartsWithEvaluator(final StringEvaluator subject, final 
StringEvaluator search) {
+    public StartsWithEvaluator(final Evaluator<String> subject, final 
Evaluator<String> search) {
         this.subject = subject;
         this.search = search;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StringToDateEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StringToDateEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StringToDateEvaluator.java
index 1575d75..590176e 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StringToDateEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/StringToDateEvaluator.java
@@ -26,15 +26,14 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.DateEvaluator;
 import 
org.apache.nifi.attribute.expression.language.evaluation.DateQueryResult;
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
-import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 import 
org.apache.nifi.attribute.expression.language.exception.IllegalAttributeException;
 
 public class StringToDateEvaluator extends DateEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator format;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> format;
 
-    public StringToDateEvaluator(final StringEvaluator subject, final 
StringEvaluator format) {
+    public StringToDateEvaluator(final Evaluator<String> subject, final 
Evaluator<String> format) {
         this.subject = subject;
         this.format = format;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterEvaluator.java
index a8b7357..6625cb6 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class SubstringAfterEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator afterEvaluator;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> afterEvaluator;
 
-    public SubstringAfterEvaluator(final StringEvaluator subject, final 
StringEvaluator afterEvaluator) {
+    public SubstringAfterEvaluator(final Evaluator<String> subject, final 
Evaluator<String> afterEvaluator) {
         this.subject = subject;
         this.afterEvaluator = afterEvaluator;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterLastEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterLastEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterLastEvaluator.java
index 3dac40e..2cc9c3c 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterLastEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringAfterLastEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class SubstringAfterLastEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator afterEvaluator;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> afterEvaluator;
 
-    public SubstringAfterLastEvaluator(final StringEvaluator subject, final 
StringEvaluator afterEvaluator) {
+    public SubstringAfterLastEvaluator(final Evaluator<String> subject, final 
Evaluator<String> afterEvaluator) {
         this.subject = subject;
         this.afterEvaluator = afterEvaluator;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeEvaluator.java
index 92b136c..4b8c3d0 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class SubstringBeforeEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator beforeEvaluator;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> beforeEvaluator;
 
-    public SubstringBeforeEvaluator(final StringEvaluator subject, final 
StringEvaluator beforeEvaluator) {
+    public SubstringBeforeEvaluator(final Evaluator<String> subject, final 
Evaluator<String> beforeEvaluator) {
         this.subject = subject;
         this.beforeEvaluator = beforeEvaluator;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeLastEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeLastEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeLastEvaluator.java
index 818a3dc..14548c1 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeLastEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringBeforeLastEvaluator.java
@@ -25,10 +25,10 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class SubstringBeforeLastEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final StringEvaluator beforeEvaluator;
+    private final Evaluator<String> subject;
+    private final Evaluator<String> beforeEvaluator;
 
-    public SubstringBeforeLastEvaluator(final StringEvaluator subject, final 
StringEvaluator beforeEvaluator) {
+    public SubstringBeforeLastEvaluator(final Evaluator<String> subject, final 
Evaluator<String> beforeEvaluator) {
         this.subject = subject;
         this.beforeEvaluator = beforeEvaluator;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringEvaluator.java
index da11c45..71b78f1 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/SubstringEvaluator.java
@@ -19,24 +19,23 @@ package 
org.apache.nifi.attribute.expression.language.evaluation.functions;
 import java.util.Map;
 
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import 
org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
 import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
 
 public class SubstringEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
-    private final NumberEvaluator startIndex;
-    private final NumberEvaluator endIndex;
+    private final Evaluator<String> subject;
+    private final Evaluator<Long> startIndex;
+    private final Evaluator<Long> endIndex;
 
-    public SubstringEvaluator(final StringEvaluator subject, final 
NumberEvaluator startIndex, final NumberEvaluator endIndex) {
+    public SubstringEvaluator(final Evaluator<String> subject, final 
Evaluator<Long> startIndex, final Evaluator<Long> endIndex) {
         this.subject = subject;
         this.startIndex = startIndex;
         this.endIndex = endIndex;
     }
 
-    public SubstringEvaluator(final StringEvaluator subject, final 
NumberEvaluator startIndex) {
+    public SubstringEvaluator(final Evaluator<String> subject, final 
Evaluator<Long> startIndex) {
         this.subject = subject;
         this.startIndex = startIndex;
         this.endIndex = null;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToLowerEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToLowerEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToLowerEvaluator.java
index 7de01eb..33175f8 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToLowerEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToLowerEvaluator.java
@@ -25,16 +25,16 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class ToLowerEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
+    private final Evaluator<String> subject;
 
-    public ToLowerEvaluator(final StringEvaluator subject) {
+    public ToLowerEvaluator(final Evaluator<String> subject) {
         this.subject = subject;
     }
 
     @Override
     public QueryResult<String> evaluate(final Map<String, String> attributes) {
         final String subjectValue = subject.evaluate(attributes).getValue();
-        return new StringQueryResult((subjectValue == null) ? null : 
subjectValue.toLowerCase());
+        return new StringQueryResult(subjectValue == null ? null : 
subjectValue.toLowerCase());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToNumberEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToNumberEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToNumberEvaluator.java
index 1d4664a..736f0b9 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToNumberEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToNumberEvaluator.java
@@ -22,20 +22,19 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
 import 
org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
 import 
org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
-import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 
 public class ToNumberEvaluator extends NumberEvaluator {
 
-    private final StringEvaluator subject;
+    private final Evaluator<String> subject;
 
-    public ToNumberEvaluator(final StringEvaluator subject) {
+    public ToNumberEvaluator(final Evaluator<String> subject) {
         this.subject = subject;
     }
 
     @Override
     public QueryResult<Long> evaluate(final Map<String, String> attributes) {
         final String subjectValue = subject.evaluate(attributes).getValue();
-        return new NumberQueryResult((subjectValue == null || 
subjectValue.trim().isEmpty()) ? null : Long.valueOf(subjectValue));
+        return new NumberQueryResult(subjectValue == null || 
subjectValue.trim().isEmpty() ? null : Long.valueOf(subjectValue));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToRadixEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToRadixEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToRadixEvaluator.java
index aab094d..1cf7e55 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToRadixEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToRadixEvaluator.java
@@ -20,22 +20,21 @@ import java.util.Arrays;
 import java.util.Map;
 
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
-import 
org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
 import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
 
 public class ToRadixEvaluator extends StringEvaluator {
 
-    private final NumberEvaluator numberEvaluator;
-    private final NumberEvaluator radixEvaluator;
-    private final NumberEvaluator minimumWidthEvaluator;
+    private final Evaluator<Long> numberEvaluator;
+    private final Evaluator<Long> radixEvaluator;
+    private final Evaluator<Long> minimumWidthEvaluator;
 
-    public ToRadixEvaluator(final NumberEvaluator subject, final 
NumberEvaluator radixEvaluator) {
+    public ToRadixEvaluator(final Evaluator<Long> subject, final 
Evaluator<Long> radixEvaluator) {
         this(subject, radixEvaluator, null);
     }
 
-    public ToRadixEvaluator(final NumberEvaluator subject, final 
NumberEvaluator radixEvaluator, final NumberEvaluator minimumWidthEvaluator) {
+    public ToRadixEvaluator(final Evaluator<Long> subject, final 
Evaluator<Long> radixEvaluator, final Evaluator<Long> minimumWidthEvaluator) {
         this.numberEvaluator = subject;
         this.radixEvaluator = radixEvaluator;
         this.minimumWidthEvaluator = minimumWidthEvaluator;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToUpperEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToUpperEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToUpperEvaluator.java
index 29bc61d..f3174c2 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToUpperEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/ToUpperEvaluator.java
@@ -25,16 +25,16 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class ToUpperEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
+    private final Evaluator<String> subject;
 
-    public ToUpperEvaluator(final StringEvaluator subject) {
+    public ToUpperEvaluator(final Evaluator<String> subject) {
         this.subject = subject;
     }
 
     @Override
     public QueryResult<String> evaluate(final Map<String, String> attributes) {
         final String subjectValue = subject.evaluate(attributes).getValue();
-        return new StringQueryResult((subjectValue == null) ? null : 
subjectValue.toUpperCase());
+        return new StringQueryResult(subjectValue == null ? null : 
subjectValue.toUpperCase());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/TrimEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/TrimEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/TrimEvaluator.java
index b9926d7..e44661f 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/TrimEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/TrimEvaluator.java
@@ -25,9 +25,9 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class TrimEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
+    private final Evaluator<String> subject;
 
-    public TrimEvaluator(final StringEvaluator subject) {
+    public TrimEvaluator(final Evaluator<String> subject) {
         this.subject = subject;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlDecodeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlDecodeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlDecodeEvaluator.java
index 6c3ba14..c61d55d 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlDecodeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlDecodeEvaluator.java
@@ -27,9 +27,9 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class UrlDecodeEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
+    private final Evaluator<String> subject;
 
-    public UrlDecodeEvaluator(final StringEvaluator subject) {
+    public UrlDecodeEvaluator(final Evaluator<String> subject) {
         this.subject = subject;
     }
 
@@ -42,7 +42,7 @@ public class UrlDecodeEvaluator extends StringEvaluator {
 
         try {
             return new StringQueryResult(URLDecoder.decode(subjectValue, 
"UTF-8"));
-        } catch (UnsupportedEncodingException e) {
+        } catch (final UnsupportedEncodingException e) {
             return null;    // won't happen. It's UTF-8
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlEncodeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlEncodeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlEncodeEvaluator.java
index d1e2caa..769f6df 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlEncodeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/UrlEncodeEvaluator.java
@@ -27,9 +27,9 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class UrlEncodeEvaluator extends StringEvaluator {
 
-    private final StringEvaluator subject;
+    private final Evaluator<String> subject;
 
-    public UrlEncodeEvaluator(final StringEvaluator subject) {
+    public UrlEncodeEvaluator(final Evaluator<String> subject) {
         this.subject = subject;
     }
 
@@ -42,7 +42,7 @@ public class UrlEncodeEvaluator extends StringEvaluator {
 
         try {
             return new StringQueryResult(URLEncoder.encode(subjectValue, 
"UTF-8"));
-        } catch (UnsupportedEncodingException e) {
+        } catch (final UnsupportedEncodingException e) {
             return null;    // won't happen. It's UTF-8
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/literals/ToLiteralEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/literals/ToLiteralEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/literals/ToLiteralEvaluator.java
new file mode 100644
index 0000000..e297eea
--- /dev/null
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/literals/ToLiteralEvaluator.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation.literals;
+
+import java.util.Map;
+
+import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
+import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
+import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
+import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
+
+public class ToLiteralEvaluator extends StringEvaluator {
+    private final Evaluator<?> argEvaluator;
+
+    public ToLiteralEvaluator(final Evaluator<?> argEvaluator) {
+        this.argEvaluator = argEvaluator;
+    }
+
+    @Override
+    public QueryResult<String> evaluate(final Map<String, String> attributes) {
+        final Object result = argEvaluator.evaluate(attributes);
+        return new StringQueryResult(result == null ? null : 
result.toString());
+    }
+
+    @Override
+    public Evaluator<?> getSubjectEvaluator() {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/JoinEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/JoinEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/JoinEvaluator.java
index 81c325d..f80924b 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/JoinEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/JoinEvaluator.java
@@ -25,13 +25,13 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResul
 
 public class JoinEvaluator extends StringEvaluator implements 
ReduceEvaluator<String> {
 
-    private final StringEvaluator subjectEvaluator;
-    private final StringEvaluator delimiterEvaluator;
+    private final Evaluator<String> subjectEvaluator;
+    private final Evaluator<String> delimiterEvaluator;
 
     private final StringBuilder sb = new StringBuilder();
     private int evalCount = 0;
 
-    public JoinEvaluator(final StringEvaluator subject, final StringEvaluator 
delimiter) {
+    public JoinEvaluator(final Evaluator<String> subject, final 
Evaluator<String> delimiter) {
         this.subjectEvaluator = subject;
         this.delimiterEvaluator = delimiter;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AllAttributesEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AllAttributesEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AllAttributesEvaluator.java
index d9dd4d3..ccf9d19 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AllAttributesEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AllAttributesEvaluator.java
@@ -23,7 +23,7 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.BooleanQueryResu
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
 
-public class AllAttributesEvaluator extends BooleanEvaluator {
+public class AllAttributesEvaluator extends BooleanEvaluator implements 
IteratingEvaluator<Boolean> {
 
     private final BooleanEvaluator booleanEvaluator;
     private final MultiAttributeEvaluator multiAttributeEvaluator;
@@ -65,4 +65,9 @@ public class AllAttributesEvaluator extends BooleanEvaluator {
     public Evaluator<?> getSubjectEvaluator() {
         return null;
     }
+
+    @Override
+    public Evaluator<?> getLogicEvaluator() {
+        return booleanEvaluator;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyAttributeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyAttributeEvaluator.java
index 9192958..6e8d485 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyAttributeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyAttributeEvaluator.java
@@ -23,7 +23,7 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.BooleanQueryResu
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
 
-public class AnyAttributeEvaluator extends BooleanEvaluator {
+public class AnyAttributeEvaluator extends BooleanEvaluator implements 
IteratingEvaluator<Boolean> {
 
     private final BooleanEvaluator booleanEvaluator;
     private final MultiAttributeEvaluator multiAttributeEvaluator;
@@ -65,4 +65,9 @@ public class AnyAttributeEvaluator extends BooleanEvaluator {
     public Evaluator<?> getSubjectEvaluator() {
         return null;
     }
+
+    @Override
+    public Evaluator<Boolean> getLogicEvaluator() {
+        return booleanEvaluator;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyMatchingAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyMatchingAttributeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyMatchingAttributeEvaluator.java
deleted file mode 100644
index 8c07278..0000000
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/AnyMatchingAttributeEvaluator.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.nifi.attribute.expression.language.evaluation.selection;
-
-public class AnyMatchingAttributeEvaluator {
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java
index 209c86f..e39d01c 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/DelineatedAttributeEvaluator.java
@@ -20,19 +20,18 @@ import java.util.Map;
 
 import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
 import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
-import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 import 
org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
 
 public class DelineatedAttributeEvaluator extends MultiAttributeEvaluator {
 
-    private final StringEvaluator subjectEvaluator;
-    private final StringEvaluator delimiterEvaluator;
+    private final Evaluator<String> subjectEvaluator;
+    private final Evaluator<String> delimiterEvaluator;
     private final int evaluationType;
     private String[] delineatedValues;
     private int evaluationCount = 0;
     private int evaluationsLeft = 1;
 
-    public DelineatedAttributeEvaluator(final StringEvaluator 
subjectEvaluator, final StringEvaluator delimiterEvaluator, final int 
evaluationType) {
+    public DelineatedAttributeEvaluator(final Evaluator<String> 
subjectEvaluator, final Evaluator<String> delimiterEvaluator, final int 
evaluationType) {
         this.subjectEvaluator = subjectEvaluator;
         this.delimiterEvaluator = delimiterEvaluator;
         this.evaluationType = evaluationType;
@@ -67,6 +66,11 @@ public class DelineatedAttributeEvaluator extends 
MultiAttributeEvaluator {
     }
 
     @Override
+    public Evaluator<?> getLogicEvaluator() {
+        return subjectEvaluator;
+    }
+
+    @Override
     public int getEvaluationsRemaining() {
         return evaluationsLeft;
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/IteratingEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/IteratingEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/IteratingEvaluator.java
new file mode 100644
index 0000000..5156345
--- /dev/null
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/IteratingEvaluator.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.attribute.expression.language.evaluation.selection;
+
+import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
+
+/**
+ * Interface for an Evaluator that should be evaluated multiple times
+ *
+ * @param <T> return type of evaluator
+ */
+public interface IteratingEvaluator<T> extends Evaluator<T> {
+
+    /**
+     * @return the evaluator that evaluates some sort of logic against its 
subject
+     */
+    Evaluator<?> getLogicEvaluator();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MappingEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MappingEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MappingEvaluator.java
index 2b8c488..e007a56 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MappingEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MappingEvaluator.java
@@ -24,9 +24,9 @@ import 
org.apache.nifi.attribute.expression.language.evaluation.reduce.ReduceEva
 import org.apache.nifi.expression.AttributeExpression.ResultType;
 
 public class MappingEvaluator<T> implements Evaluator<T> {
-
     private final ReduceEvaluator<T> mappingEvaluator;
     private final MultiAttributeEvaluator multiAttributeEvaluator;
+    private String token;
 
     public MappingEvaluator(final ReduceEvaluator<T> mappingEvaluator, final 
MultiAttributeEvaluator multiAttributeEval) {
         this.mappingEvaluator = mappingEvaluator;
@@ -59,4 +59,13 @@ public class MappingEvaluator<T> implements Evaluator<T> {
         return null;
     }
 
+    @Override
+    public String getToken() {
+        return token;
+    }
+
+    @Override
+    public void setToken(final String token) {
+        this.token = token;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiAttributeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiAttributeEvaluator.java
index f80ed97..78b5af4 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiAttributeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiAttributeEvaluator.java
@@ -18,7 +18,6 @@ package 
org.apache.nifi.attribute.expression.language.evaluation.selection;
 
 import 
org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
 
-public abstract class MultiAttributeEvaluator extends StringEvaluator {
-
+public abstract class MultiAttributeEvaluator extends StringEvaluator 
implements IteratingEvaluator<String> {
     public abstract int getEvaluationType();
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiMatchAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiMatchAttributeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiMatchAttributeEvaluator.java
index 1d0be8b..8292f84 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiMatchAttributeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiMatchAttributeEvaluator.java
@@ -79,4 +79,9 @@ public class MultiMatchAttributeEvaluator extends 
MultiAttributeEvaluator {
     public int getEvaluationType() {
         return evaluationType;
     }
+
+    @Override
+    public Evaluator<?> getLogicEvaluator() {
+        return this;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiNamedAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiNamedAttributeEvaluator.java
 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiNamedAttributeEvaluator.java
index 6dabc0a..509d7dd 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiNamedAttributeEvaluator.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/selection/MultiNamedAttributeEvaluator.java
@@ -61,4 +61,9 @@ public class MultiNamedAttributeEvaluator extends 
MultiAttributeEvaluator {
     public int getEvaluationType() {
         return evaluationType;
     }
+
+    @Override
+    public Evaluator<?> getLogicEvaluator() {
+        return this;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
 
b/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
index f343261..131bcde 100644
--- 
a/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
+++ 
b/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
@@ -17,10 +17,12 @@
 package org.apache.nifi.attribute.expression.language;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -52,6 +54,8 @@ public class TestQuery {
         assertValid("${now():format('yyyy/MM/dd')}");
         assertInvalid("${attr:times(3)}");
         assertValid("${attr:toNumber():multiply(3)}");
+        assertValid("${hostname()}");
+        assertValid("${literal(3)}");
         // left here because it's convenient for looking at the output
         //System.out.println(Query.compile("").evaluate(null));
     }
@@ -296,7 +300,7 @@ public class TestQuery {
     }
 
     private String evaluateQueryForEscape(final String queryString, final 
Map<String, String> attributes) {
-        FlowFile mockFlowFile = Mockito.mock(FlowFile.class);
+        final FlowFile mockFlowFile = Mockito.mock(FlowFile.class);
         Mockito.when(mockFlowFile.getAttributes()).thenReturn(attributes);
         Mockito.when(mockFlowFile.getId()).thenReturn(1L);
         
Mockito.when(mockFlowFile.getEntryDate()).thenReturn(System.currentTimeMillis());
@@ -429,7 +433,7 @@ public class TestQuery {
 
     @Test
     public void testExtractExpressionTypes() {
-        List<ResultType> types = Query.extractResultTypes("${hello:equals( 
${goodbye} )} or just hi, ${bob}, are you ${bob.age:toNumber()} yet? 
$$$${bob}");
+        final List<ResultType> types = 
Query.extractResultTypes("${hello:equals( ${goodbye} )} or just hi, ${bob}, are 
you ${bob.age:toNumber()} yet? $$$${bob}");
         assertEquals(3, types.size());
         assertEquals(ResultType.BOOLEAN, types.get(0));
         assertEquals(ResultType.STRING, types.get(1));
@@ -493,7 +497,7 @@ public class TestQuery {
         final Map<String, String> attributes = new HashMap<>();
         attributes.put("xx", "say 'hi'");
 
-        String query = "${xx:replace( \"'hi'\", '\\\"hello\\\"' )}";
+        final String query = "${xx:replace( \"'hi'\", '\\\"hello\\\"' )}";
         System.out.println(query);
         verifyEquals(query, attributes, "say \"hello\"");
     }
@@ -1112,12 +1116,52 @@ public class TestQuery {
         assertEquals("{ xyz }", Query.evaluateExpressions(query, attributes));
     }
 
+    @Test
+    public void testLiteralFunction() {
+        final Map<String, String> attrs = Collections.<String, String> 
emptyMap();
+        verifyEquals("${literal(2):gt(1)}", attrs, true);
+        verifyEquals("${literal('hello'):substring(0, 1):equals('h')}", attrs, 
true);
+    }
+
+    @Test
+    public void testFunctionAfterReduce() {
+        // Cannot call gt(2) after count() because count() is a 'reducing 
function'
+        // and must be the last function in an expression.
+        
assertFalse(Query.isValidExpression("${allMatchingAttributes('a.*'):contains('2'):count():gt(2)}"));
+
+        final Map<String, String> attributes = new HashMap<>();
+        attributes.put("a.1", "245");
+        attributes.put("a.2", "123");
+        attributes.put("a.3", "732");
+        attributes.put("a.4", "343");
+        attributes.put("a.5", "553");
+
+        final String endsWithCount = 
"${allMatchingAttributes('a.*'):contains('2'):count()}";
+        assertTrue(Query.isValidExpression(endsWithCount));
+        verifyEquals(endsWithCount, attributes, 3L);
+
+        // in order to check if value is greater than 2, need to first 
evaluate the
+        // 'aggregate' and 'reducing' functions as an inner expression. Then 
we can
+        // use the literal() function to make the result of the inner 
expression the subject
+        // of the function gt()
+        final String usingLiteral = "${literal(" + endsWithCount + "):gt(2)}";
+        assertTrue(Query.isValidExpression(usingLiteral));
+        verifyEquals(usingLiteral, attributes, true);
+
+        attributes.clear();
+        attributes.put("a1", "123");
+        attributes.put("a2", "321");
+        verifyEquals("${allMatchingAttributes('a.*'):contains('2')}", 
attributes, true);
+        
verifyEquals("${allMatchingAttributes('a.*'):contains('2'):toUpper():equals('TRUE')}",
 attributes, true);
+        
verifyEquals("${allMatchingAttributes('a.*'):contains('2'):equals('true'):and( 
${literal(true)} )}", attributes, true);
+    }
+
     private void verifyEquals(final String expression, final Map<String, 
String> attributes, final Object expectedResult) {
         Query.validateExpression(expression, false);
         assertEquals(String.valueOf(expectedResult), 
Query.evaluateExpressions(expression, attributes, null));
 
-        Query query = Query.compile(expression);
-        QueryResult<?> result = query.evaluate(attributes);
+        final Query query = Query.compile(expression);
+        final QueryResult<?> result = query.evaluate(attributes);
 
         if (expectedResult instanceof Number) {
             assertEquals(ResultType.NUMBER, result.getResultType());

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/c4c98fc4/nifi/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
----------------------------------------------------------------------
diff --git a/nifi/nifi-docs/src/main/asciidoc/expression-language-guide.adoc 
b/nifi/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
index 9038809..d8ccdb4 100644
--- a/nifi/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
+++ b/nifi/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
@@ -1317,9 +1317,9 @@ Expressions will provide the following results:
        and Midnight GMT on January 1, 2014. The Expression 
`${time:toDate("yyyy/MM/dd HH:mm:ss.SSS'Z'")}` will result in the
        number of milliseconds between Midnight GMT on January 1, 1970 and 
15:36:03.264 GMT on December 31, 2014.
        
-       Often, this function is used in conjunction with the <<format>> 
function to change the format of a date/time. For example,
-       if the attribute "date" has the value "12-24-2014" and we want to 
change the format to "2014/12/24", we can do so by
-       chaining together the two functions: 
`${date:toDate('MM-dd-yyyy'):format('yyyy/MM/dd')}`.
+Often, this function is used in conjunction with the <<format>> function to 
change the format of a date/time. For example,
+if the attribute "date" has the value "12-24-2014" and we want to change the 
format to "2014/12/24", we can do so by
+chaining together the two functions: 
`${date:toDate('MM-dd-yyyy'):format('yyyy/MM/dd')}`.
 
 
 
@@ -1404,7 +1404,7 @@ an error when validating the function.
 
 *Return Type*: [.returnType]#String#
 
-*Examples*: The IP address of the machine can be obtained by using the 
Expresison `${ip()}`.
+*Examples*: The IP address of the machine can be obtained by using the 
Expression `${ip()}`.
 
 
 
@@ -1471,8 +1471,26 @@ an error when validating the function.
 
 
 
+[.function]
+=== literal
+
+*Description*: [.description]#Returns its argument as a literal String value. 
This is useful in order to treat a string or a number
+       at the beginning of an Expression as an actual value, rather than 
treating it as an attribute name. Additionally, it
+       can be used when the argument is an embedded Expression that we would 
then like to evaluate additional functions against.#
+       
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*: 
+
+       - [.argName]#_value_# : [.argDesc]#The value to be treated as a literal 
string, number, or boolean value.#
+       
+*Return Type*: [.returnType]#String#
 
+*Examples*: `${literal(2):gt(1)}` returns `true`
 
+`${literal( ${allMatchingAttributes('a.*'):count()} ):gt(3)}` returns true if 
there are more than 3 attributes whose
+names begin with the letter `a`.
+                       
 
 [[multi]]
 == Evaluating Multiple Attributes

Reply via email to