You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2015/04/21 21:24:13 UTC
[4/4] incubator-nifi git commit: NIFI-271 checkpoint
NIFI-271 checkpoint
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/afb4fe52
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/afb4fe52
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/afb4fe52
Branch: refs/heads/NIFI-271
Commit: afb4fe52b9c7f9527ad6c2aa7e4c4f86994bccbb
Parents: 6d72840
Author: joewitt <jo...@apache.org>
Authored: Tue Apr 21 15:24:04 2015 -0400
Committer: joewitt <jo...@apache.org>
Committed: Tue Apr 21 15:24:04 2015 -0400
----------------------------------------------------------------------
.../nifi/provenance/AsyncLineageSubmission.java | 1 +
.../nifi/provenance/AsyncQuerySubmission.java | 7 +-
.../nifi/provenance/SearchableFields.java | 21 +-
.../nifi/provenance/StandardLineageResult.java | 8 +-
.../nifi-expression-language/pom.xml | 7 +
.../language/InvalidPreparedQuery.java | 13 +-
.../attribute/expression/language/Query.java | 81 +++-
.../functions/GreaterThanEvaluator.java | 3 -
.../functions/GreaterThanOrEqualEvaluator.java | 3 -
.../evaluation/functions/IsEmptyEvaluator.java | 5 +-
.../evaluation/functions/LessThanEvaluator.java | 3 -
.../functions/LessThanOrEqualEvaluator.java | 3 -
.../functions/ReplaceEmptyEvaluator.java | 7 +-
.../evaluation/reduce/CountEvaluator.java | 10 +-
.../evaluation/reduce/JoinEvaluator.java | 17 +-
.../evaluation/selection/MappingEvaluator.java | 7 +-
.../selection/MultiMatchAttributeEvaluator.java | 2 +-
.../exception/IllegalAttributeException.java | 1 +
.../expression/language/TestQuery.java | 385 +++++++++----------
.../language/TestStandardPreparedQuery.java | 26 +-
20 files changed, 328 insertions(+), 282 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncLineageSubmission.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncLineageSubmission.java b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncLineageSubmission.java
index dc24a93..4a52a89 100644
--- a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncLineageSubmission.java
+++ b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncLineageSubmission.java
@@ -27,6 +27,7 @@ import org.apache.nifi.provenance.lineage.LineageComputationType;
*
*/
public class AsyncLineageSubmission implements ComputeLineageSubmission {
+
private final String lineageIdentifier = UUID.randomUUID().toString();
private final Date submissionTime = new Date();
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncQuerySubmission.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncQuerySubmission.java b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncQuerySubmission.java
index 4244476..00c6170 100644
--- a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncQuerySubmission.java
+++ b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/AsyncQuerySubmission.java
@@ -22,9 +22,6 @@ import java.util.concurrent.TimeUnit;
import org.apache.nifi.provenance.search.Query;
import org.apache.nifi.provenance.search.QuerySubmission;
-/**
- *
- */
public class AsyncQuerySubmission implements QuerySubmission {
public static final int TTL = (int) TimeUnit.MILLISECONDS.convert(60, TimeUnit.SECONDS);
@@ -40,8 +37,8 @@ public class AsyncQuerySubmission implements QuerySubmission {
* number of steps, indicating how many results must be added to this
* AsyncQuerySubmission before it is considered finished
*
- * @param query
- * @param numSteps
+ * @param query the query to execute
+ * @param numSteps how many steps to include
*/
public AsyncQuerySubmission(final Query query, final int numSteps) {
this.query = query;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/SearchableFields.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/SearchableFields.java b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/SearchableFields.java
index 97c9880..de62bca 100644
--- a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/SearchableFields.java
+++ b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/SearchableFields.java
@@ -41,14 +41,21 @@ public class SearchableFields {
public static final SearchableField Details = new NamedSearchableField("Details", "details", "Details", false, SearchableFieldType.STRING);
public static final SearchableField Relationship = new NamedSearchableField("Relationship", "relationship", "Relationship", false, SearchableFieldType.STRING);
- public static final SearchableField LineageStartDate = new NamedSearchableField("LineageStartDate", "lineageStartDate", "Lineage Start Date", false, SearchableFieldType.DATE);
- public static final SearchableField LineageIdentifier = new NamedSearchableField("LineageIdentifiers", "lineageIdentifier", "Lineage Identifier", false, SearchableFieldType.STRING);
+ public static final SearchableField LineageStartDate
+ = new NamedSearchableField("LineageStartDate", "lineageStartDate", "Lineage Start Date", false, SearchableFieldType.DATE);
+ public static final SearchableField LineageIdentifier
+ = new NamedSearchableField("LineageIdentifiers", "lineageIdentifier", "Lineage Identifier", false, SearchableFieldType.STRING);
- public static final SearchableField ContentClaimSection = new NamedSearchableField("ContentClaimSection", "contentClaimSection", "Content Claim Section", false, SearchableFieldType.STRING);
- public static final SearchableField ContentClaimContainer = new NamedSearchableField("ContentClaimContainer", "contentClaimContainer", "Content Claim Container", false, SearchableFieldType.STRING);
- public static final SearchableField ContentClaimIdentifier = new NamedSearchableField("ContentClaimIdentifier", "contentClaimIdentifier", "Content Claim Identifier", false, SearchableFieldType.STRING);
- public static final SearchableField ContentClaimOffset = new NamedSearchableField("ContentClaimOffset", "contentClaimOffset", "Content Claim Offset", false, SearchableFieldType.LONG);
- public static final SearchableField SourceQueueIdentifier = new NamedSearchableField("SourceQueueIdentifier", "sourceQueueIdentifier", "Source Queue Identifier", false, SearchableFieldType.STRING);
+ public static final SearchableField ContentClaimSection
+ = new NamedSearchableField("ContentClaimSection", "contentClaimSection", "Content Claim Section", false, SearchableFieldType.STRING);
+ public static final SearchableField ContentClaimContainer
+ = new NamedSearchableField("ContentClaimContainer", "contentClaimContainer", "Content Claim Container", false, SearchableFieldType.STRING);
+ public static final SearchableField ContentClaimIdentifier
+ = new NamedSearchableField("ContentClaimIdentifier", "contentClaimIdentifier", "Content Claim Identifier", false, SearchableFieldType.STRING);
+ public static final SearchableField ContentClaimOffset
+ = new NamedSearchableField("ContentClaimOffset", "contentClaimOffset", "Content Claim Offset", false, SearchableFieldType.LONG);
+ public static final SearchableField SourceQueueIdentifier
+ = new NamedSearchableField("SourceQueueIdentifier", "sourceQueueIdentifier", "Source Queue Identifier", false, SearchableFieldType.STRING);
private static final Map<String, SearchableField> standardFields;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/StandardLineageResult.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/StandardLineageResult.java b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/StandardLineageResult.java
index afb56e8..63c53d0 100644
--- a/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/StandardLineageResult.java
+++ b/nifi/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/StandardLineageResult.java
@@ -266,7 +266,8 @@ public class StandardLineageResult implements ComputeLineageResult {
final FlowFileNode childNode = new FlowFileNode(childUuid, record.getEventTime());
final boolean isNewFlowFile = nodes.add(childNode);
if (!isNewFlowFile) {
- final String msg = "Unable to generate Lineage Graph because multiple events were registered claiming to have generated the same FlowFile (UUID = " + childNode.getFlowFileUuid() + ")";
+ final String msg = "Unable to generate Lineage Graph because multiple "
+ + "events were registered claiming to have generated the same FlowFile (UUID = " + childNode.getFlowFileUuid() + ")";
logger.error(msg);
setError(msg);
return;
@@ -288,12 +289,13 @@ public class StandardLineageResult implements ComputeLineageResult {
break;
case RECEIVE:
case CREATE: {
- // for a receive event, we want to create a FlowFile Node that represents the FlowFile received
+ // for a receive event, we want to create a FlowFile Node that represents the FlowFile received
// and create an edge from the Receive Event to the FlowFile Node
final LineageNode flowFileNode = new FlowFileNode(record.getFlowFileUuid(), record.getEventTime());
final boolean isNewFlowFile = nodes.add(flowFileNode);
if (!isNewFlowFile) {
- final String msg = "Found cycle in graph. This indicates that multiple events were registered claiming to have generated the same FlowFile (UUID = " + flowFileNode.getFlowFileUuid() + ")";
+ final String msg = "Found cycle in graph. This indicates that multiple events "
+ + "were registered claiming to have generated the same FlowFile (UUID = " + flowFileNode.getFlowFileUuid() + ")";
setError(msg);
logger.error(msg);
return;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/pom.xml b/nifi/nifi-commons/nifi-expression-language/pom.xml
index 3521b55..e27f5b1 100644
--- a/nifi/nifi-commons/nifi-expression-language/pom.xml
+++ b/nifi/nifi-commons/nifi-expression-language/pom.xml
@@ -34,6 +34,13 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <excludes>**/antlr/AttributeExpressionParser.java,**/antlr/AttributeExpressionLexer.java</excludes>
+ </configuration>
+ </plugin>
</plugins>
</build>
<dependencies>
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java
index e23bcc0..a29e792 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java
@@ -23,21 +23,22 @@ import org.apache.nifi.expression.AttributeValueDecorator;
import org.apache.nifi.flowfile.FlowFile;
import org.apache.nifi.processor.exception.ProcessException;
-
/**
- * An implementation of PreparedQuery that throws an {@link AttributeExpressionLanguageException} when attempting
- * to evaluate the query. This allows a PreparedQuery to be created, even though it can't
- * be evaluated.
+ * An implementation of PreparedQuery that throws an
+ * {@link AttributeExpressionLanguageException} when attempting to evaluate the
+ * query. This allows a PreparedQuery to be created, even though it can't be
+ * evaluated.
*/
public class InvalidPreparedQuery implements PreparedQuery {
+
private final String query;
private final String explanation;
-
+
public InvalidPreparedQuery(final String query, final String explanation) {
this.query = query;
this.explanation = explanation;
}
-
+
@Override
public String evaluateExpressions(final FlowFile flowFile, final AttributeValueDecorator decorator) throws ProcessException {
throw new AttributeExpressionLanguageException("Invalid Expression: " + query + " due to " + explanation);
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
index 420a8e2..7e40897 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/Query.java
@@ -16,8 +16,6 @@
*/
package org.apache.nifi.attribute.expression.language;
-import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.*;
-
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
@@ -116,6 +114,73 @@ import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.tree.Tree;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ALL_ATTRIBUTES;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ALL_DELINEATED_VALUES;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ALL_MATCHING_ATTRIBUTES;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.AND;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ANY_ATTRIBUTE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ANY_DELINEATED_VALUE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ANY_MATCHING_ATTRIBUTE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.APPEND;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ATTRIBUTE_REFERENCE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ATTR_NAME;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.CONTAINS;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.COUNT;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.DIVIDE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.ENDS_WITH;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.EQUALS;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.EQUALS_IGNORE_CASE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.EXPRESSION;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.FALSE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.FIND;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.FORMAT;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.GREATER_THAN;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.GREATER_THAN_OR_EQUAL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.HOSTNAME;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.INDEX_OF;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.IP;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.IS_EMPTY;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.IS_NULL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.JOIN;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.LAST_INDEX_OF;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.LENGTH;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.LESS_THAN;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.LESS_THAN_OR_EQUAL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.MATCHES;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.MINUS;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.MOD;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.MULTIPLY;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.MULTI_ATTRIBUTE_REFERENCE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NEXT_INT;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NOT;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NOT_NULL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NOW;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.NUMBER;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.OR;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.PLUS;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.PREPEND;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.REPLACE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.REPLACE_ALL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.REPLACE_EMPTY;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.REPLACE_NULL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.STARTS_WITH;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.STRING_LITERAL;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.SUBSTRING;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.SUBSTRING_AFTER;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.SUBSTRING_AFTER_LAST;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.SUBSTRING_BEFORE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.SUBSTRING_BEFORE_LAST;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_DATE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_LOWER;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_NUMBER;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_RADIX;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_STRING;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TO_UPPER;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TRIM;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.TRUE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.URL_DECODE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.URL_ENCODE;
+import static org.apache.nifi.attribute.expression.language.antlr.AttributeExpressionParser.UUID;
import org.apache.nifi.attribute.expression.language.evaluation.selection.MappingEvaluator;
/**
@@ -229,11 +294,9 @@ public class Query {
}
/**
- *
- *
- * @param value
- * @param allowSurroundingCharacters
- * @throws AttributeExpressionLanguageParsingException
+ * @param value expression to validate
+ * @param allowSurroundingCharacters whether to allow surrounding chars
+ * @throws AttributeExpressionLanguageParsingException if problems parsing given expression
*/
public static void validateExpression(final String value, final boolean allowSurroundingCharacters) throws AttributeExpressionLanguageParsingException {
if (!allowSurroundingCharacters) {
@@ -333,8 +396,8 @@ public class Query {
/**
* Un-escapes ${...} patterns that were escaped
*
- * @param value
- * @return
+ * @param value to un-escape
+ * @return un-escaped value
*/
public static String unescape(final String value) {
return value.replaceAll("\\$\\$(?=\\$*\\{.*?\\})", "\\$");
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
index 6c712bb..af1ee1d 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanEvaluator.java
@@ -49,9 +49,6 @@ public class GreaterThanEvaluator extends BooleanEvaluator {
return new BooleanQueryResult(subjectValue > comparisonValue);
}
- ;
-
-
@Override
public Evaluator<?> getSubjectEvaluator() {
return subject;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
index 98951f2..1269fc0 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/GreaterThanOrEqualEvaluator.java
@@ -49,9 +49,6 @@ public class GreaterThanOrEqualEvaluator extends BooleanEvaluator {
return new BooleanQueryResult(subjectValue >= comparisonValue);
}
- ;
-
-
@Override
public Evaluator<?> getSubjectEvaluator() {
return subject;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IsEmptyEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IsEmptyEvaluator.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IsEmptyEvaluator.java
index c5e3c21..e6e9fc9 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IsEmptyEvaluator.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/IsEmptyEvaluator.java
@@ -24,12 +24,13 @@ import org.apache.nifi.attribute.expression.language.evaluation.Evaluator;
import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
public class IsEmptyEvaluator extends BooleanEvaluator {
+
private final Evaluator<?> subjectEvaluator;
-
+
public IsEmptyEvaluator(final Evaluator<?> subjectEvaluator) {
this.subjectEvaluator = subjectEvaluator;
}
-
+
@Override
public QueryResult<Boolean> evaluate(final Map<String, String> attributes) {
final Object subjectValue = subjectEvaluator.evaluate(attributes).getValue();
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
index 9a58910..4b1beac 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanEvaluator.java
@@ -49,9 +49,6 @@ public class LessThanEvaluator extends BooleanEvaluator {
return new BooleanQueryResult(subjectValue < comparisonValue);
}
- ;
-
-
@Override
public Evaluator<?> getSubjectEvaluator() {
return subject;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
index 10f3f6a..a07e8be 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/LessThanOrEqualEvaluator.java
@@ -49,9 +49,6 @@ public class LessThanOrEqualEvaluator extends BooleanEvaluator {
return new BooleanQueryResult(subjectValue <= comparisonValue);
}
- ;
-
-
@Override
public Evaluator<?> getSubjectEvaluator() {
return subject;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/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 e5c40d2..fe08303 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
@@ -23,20 +23,21 @@ import org.apache.nifi.attribute.expression.language.evaluation.QueryResult;
import org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
public class ReplaceEmptyEvaluator extends StringEvaluator {
+
private final StringEvaluator subjectEvaluator;
private final StringEvaluator replacementEvaluator;
-
+
public ReplaceEmptyEvaluator(final StringEvaluator subjectEvaluator, final StringEvaluator replacementEvaluator) {
this.subjectEvaluator = subjectEvaluator;
this.replacementEvaluator = replacementEvaluator;
}
-
+
@Override
public QueryResult<String> evaluate(final Map<String, String> attributes) {
final QueryResult<String> subjectResult = subjectEvaluator.evaluate(attributes);
final String subjectValue = subjectResult.getValue();
final boolean isEmpty = subjectValue == null || subjectValue.toString().trim().isEmpty();
- if ( isEmpty ) {
+ if (isEmpty) {
return replacementEvaluator.evaluate(attributes);
} else {
return subjectResult;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/CountEvaluator.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/CountEvaluator.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/CountEvaluator.java
index f2af268..f3fb21d 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/CountEvaluator.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/reduce/CountEvaluator.java
@@ -28,19 +28,19 @@ public class CountEvaluator extends NumberEvaluator implements ReduceEvaluator<L
private final Evaluator<?> subjectEvaluator;
private long count = 0L;
-
+
public CountEvaluator(final Evaluator<?> subjectEvaluator) {
this.subjectEvaluator = subjectEvaluator;
}
-
+
@Override
public QueryResult<Long> evaluate(final Map<String, String> attributes) {
final QueryResult<?> result = subjectEvaluator.evaluate(attributes);
- if ( result.getValue() == null ) {
+ if (result.getValue() == null) {
return new NumberQueryResult(count);
}
-
- if ( result.getResultType() == ResultType.BOOLEAN && ((Boolean) result.getValue()).equals(Boolean.FALSE) ) {
+
+ if (result.getResultType() == ResultType.BOOLEAN && ((Boolean) result.getValue()).equals(Boolean.FALSE)) {
return new NumberQueryResult(count);
}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/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 eefdada..81c325d 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
@@ -24,34 +24,35 @@ import org.apache.nifi.attribute.expression.language.evaluation.StringEvaluator;
import org.apache.nifi.attribute.expression.language.evaluation.StringQueryResult;
public class JoinEvaluator extends StringEvaluator implements ReduceEvaluator<String> {
+
private final StringEvaluator subjectEvaluator;
private final StringEvaluator delimiterEvaluator;
-
+
private final StringBuilder sb = new StringBuilder();
private int evalCount = 0;
-
+
public JoinEvaluator(final StringEvaluator subject, final StringEvaluator delimiter) {
this.subjectEvaluator = subject;
this.delimiterEvaluator = delimiter;
}
-
+
@Override
public QueryResult<String> evaluate(final Map<String, String> attributes) {
String subject = subjectEvaluator.evaluate(attributes).getValue();
- if ( subject == null ) {
+ if (subject == null) {
subject = "";
}
-
+
final String delimiter = delimiterEvaluator.evaluate(attributes).getValue();
- if ( evalCount > 0 ) {
+ if (evalCount > 0) {
sb.append(delimiter);
}
sb.append(subject);
evalCount++;
- return new StringQueryResult( sb.toString() );
+ return new StringQueryResult(sb.toString());
}
-
+
@Override
public Evaluator<?> getSubjectEvaluator() {
return subjectEvaluator;
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/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 d872b6e..2b8c488 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,19 +24,20 @@ 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;
-
+
public MappingEvaluator(final ReduceEvaluator<T> mappingEvaluator, final MultiAttributeEvaluator multiAttributeEval) {
this.mappingEvaluator = mappingEvaluator;
this.multiAttributeEvaluator = multiAttributeEval;
}
-
+
@Override
public QueryResult<T> evaluate(final Map<String, String> attributes) {
QueryResult<T> result = mappingEvaluator.evaluate(attributes);
- while ( multiAttributeEvaluator.getEvaluationsRemaining() > 0 ) {
+ while (multiAttributeEvaluator.getEvaluationsRemaining() > 0) {
result = mappingEvaluator.evaluate(attributes);
}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/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 9a441ce..1d0be8b 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
@@ -44,7 +44,7 @@ public class MultiMatchAttributeEvaluator extends MultiAttributeEvaluator {
/**
* Can be called only after the first call to evaluate
*
- * @return
+ * @return number of remaining evaluations
*/
@Override
public int getEvaluationsRemaining() {
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/exception/IllegalAttributeException.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/exception/IllegalAttributeException.java b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/exception/IllegalAttributeException.java
index f6f32ca..ec94837 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/exception/IllegalAttributeException.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/exception/IllegalAttributeException.java
@@ -17,6 +17,7 @@
package org.apache.nifi.attribute.expression.language.exception;
public class IllegalAttributeException extends RuntimeException {
+
private static final long serialVersionUID = 12348721897342L;
public IllegalAttributeException() {
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/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 8dfbaf1..4bf614f 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
@@ -55,7 +55,7 @@ public class TestQuery {
// left here because it's convenient for looking at the output
//System.out.println(Query.compile("").evaluate(null));
}
-
+
private void assertValid(final String query) {
try {
Query.compile(query);
@@ -64,7 +64,7 @@ public class TestQuery {
Assert.fail("Expected query to be valid, but it failed to compile due to " + e);
}
}
-
+
private void assertInvalid(final String query) {
try {
Query.compile(query);
@@ -72,63 +72,61 @@ public class TestQuery {
} catch (final Exception e) {
}
}
-
+
@Test
public void testIsValidExpression() {
Query.validateExpression("${abc:substring(${xyz:length()})}", false);
Query.isValidExpression("${now():format('yyyy-MM-dd')}");
-
-
+
try {
Query.validateExpression("$${attr}", false);
Assert.fail("invalid query validated");
} catch (final AttributeExpressionLanguageParsingException e) {
}
-
+
Query.validateExpression("$${attr}", true);
-
- Query.validateExpression("${filename:startsWith('T8MTXBC')\n"
- + ":or( ${filename:startsWith('C4QXABC')} )\n"
- + ":or( ${filename:startsWith('U6CXEBC')} )"
- + ":or( ${filename:startsWith('KYM3ABC')} )}", false);
+
+ Query.validateExpression("${filename:startsWith('T8MTXBC')\n"
+ + ":or( ${filename:startsWith('C4QXABC')} )\n"
+ + ":or( ${filename:startsWith('U6CXEBC')} )"
+ + ":or( ${filename:startsWith('KYM3ABC')} )}", false);
}
-
@Test
public void testCompileEmbedded() {
final String expression = "${x:equals( ${y} )}";
final Query query = Query.compile(expression);
final Tree tree = query.getTree();
- System.out.println( printTree(tree) );
-
+ System.out.println(printTree(tree));
+
final Map<String, String> attributes = new HashMap<>();
attributes.put("x", "x");
attributes.put("y", "x");
final String result = Query.evaluateExpressions(expression, attributes, null);
assertEquals("true", result);
-
+
Query.validateExpression(expression, false);
}
-
+
private String printTree(final Tree tree) {
final StringBuilder sb = new StringBuilder();
printTree(tree, 0, sb);
-
+
return sb.toString();
}
-
+
private void printTree(final Tree tree, final int spaces, final StringBuilder sb) {
- for (int i=0; i < spaces; i++) {
+ for (int i = 0; i < spaces; i++) {
sb.append(" ");
}
-
- if ( tree.getText().trim().isEmpty() ) {
+
+ if (tree.getText().trim().isEmpty()) {
sb.append(tree.toString()).append("\n");
} else {
sb.append(tree.getText()).append("\n");
}
-
- for (int i=0; i < tree.getChildCount(); i++) {
+
+ for (int i = 0; i < tree.getChildCount(); i++) {
printTree(tree.getChild(i), spaces + 2, sb);
}
}
@@ -138,7 +136,7 @@ public class TestQuery {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "My Value");
attributes.put("${xx}", "hello");
-
+
assertEquals("My Value", evaluateQueryForEscape("${attr}", attributes));
assertEquals("${attr}", evaluateQueryForEscape("$${attr}", attributes));
assertEquals("$My Value", evaluateQueryForEscape("$$${attr}", attributes));
@@ -151,15 +149,15 @@ public class TestQuery {
final Map<String, String> attributes = new HashMap<>();
attributes.put("x", "C:\\test\\1.txt");
attributes.put("y", "y\ny");
-
+
final String query = "${x:substringAfterLast( '/' ):substringAfterLast( '\\\\' )}";
verifyEquals(query, attributes, "1.txt");
attributes.put("x", "C:/test/1.txt");
verifyEquals(query, attributes, "1.txt");
-
+
verifyEquals("${y:equals('y\\ny')}", attributes, Boolean.TRUE);
}
-
+
@Test
public void testWithTicksOutside() {
final Map<String, String> attributes = new HashMap<>();
@@ -174,14 +172,13 @@ public class TestQuery {
assertEquals("'My Value", Query.evaluateExpressions("'${attr}", attributes, null));
}
-
@Test
@Ignore("Depends on TimeZone")
public void testDateToNumber() {
final Query query = Query.compile("${dateTime:toDate('yyyy/MM/dd HH:mm:ss.SSS'):toNumber()}");
final Map<String, String> attributes = new HashMap<>();
attributes.put("dateTime", "2013/11/18 10:22:27.678");
-
+
final QueryResult<?> result = query.evaluate(attributes);
assertEquals(ResultType.NUMBER, result.getResultType());
assertEquals(1384788147678L, result.getValue());
@@ -203,35 +200,34 @@ public class TestQuery {
final Query query = Query.compile("${dateTime:format('yyyy/MM/dd HH:mm:ss.SSS')}");
final Map<String, String> attributes = new HashMap<>();
attributes.put("dateTime", date.toString());
-
+
// the date.toString() above will end up truncating the milliseconds. So remove millis from the Date before
// formatting it
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS", Locale.US);
final long millis = date.getTime() % 1000L;
final Date roundedToNearestSecond = new Date(date.getTime() - millis);
final String formatted = sdf.format(roundedToNearestSecond);
-
+
final QueryResult<?> result = query.evaluate(attributes);
assertEquals(ResultType.STRING, result.getResultType());
assertEquals(formatted, result.getValue());
}
-
@Test
public void testEmbeddedExpressionsAndQuotes() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("x", "abc");
attributes.put("a", "abc");
-
+
verifyEquals("${x:equals(${a})}", attributes, true);
-
+
Query.validateExpression("${x:equals('${a}')}", false);
assertEquals("true", Query.evaluateExpressions("${x:equals('${a}')}", attributes, null));
-
+
Query.validateExpression("${x:equals(\"${a}\")}", false);
assertEquals("true", Query.evaluateExpressions("${x:equals(\"${a}\")}", attributes, null));
}
-
+
@Test
public void testJoin() {
final Map<String, String> attributes = new HashMap<>();
@@ -243,13 +239,12 @@ public class TestQuery {
verifyEquals("${a.a:join(', ')}", attributes, "a");
verifyEquals("${allAttributes( 'x', 'y' ):join(',')}", attributes, ",");
}
-
- @Test(expected=AttributeExpressionLanguageException.class)
+
+ @Test(expected = AttributeExpressionLanguageException.class)
public void testCannotCombineWithNonReducingFunction() {
Query.compileTree("${allAttributes( 'a.1' ):plus(1)}");
}
-
@Test
public void testIsEmpty() {
final Map<String, String> attributes = new HashMap<>();
@@ -263,22 +258,19 @@ public class TestQuery {
verifyEquals("${d:isEmpty()}", attributes, true);
}
-
@Test
public void testReplaceEmpty() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("a", "a");
attributes.put("b", "");
attributes.put("c", " \n");
-
+
verifyEquals("${a:replaceEmpty('c')}", attributes, "a");
verifyEquals("${b:replaceEmpty('c')}", attributes, "c");
verifyEquals("${c:replaceEmpty('c')}", attributes, "c");
verifyEquals("${d:replaceEmpty('c')}", attributes, "c");
}
-
-
@Test
public void testCount() {
final Map<String, String> attributes = new HashMap<>();
@@ -291,20 +283,18 @@ public class TestQuery {
verifyEquals("${allMatchingAttributes( '.*' ):count()}", attributes, 6L);
verifyEquals("${allMatchingAttributes( '.*' ):length():gt(2):count()}", attributes, 5L);
- verifyEquals("${allMatchingAttributes( 'n.*' ):plus(1):count()}", attributes, 3L );
+ verifyEquals("${allMatchingAttributes( 'n.*' ):plus(1):count()}", attributes, 3L);
}
-
-
+
@Test
public void testCurlyBracesInQuotes() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "My Valuee");
-
+
assertEquals("Val", evaluateQueryForEscape("${attr:replaceAll('My (Val)ue{1,2}', '$1')}", attributes));
assertEquals("Val", evaluateQueryForEscape("${attr:replaceAll(\"My (Val)ue{1,2}\", '$1')}", attributes));
}
-
-
+
private String evaluateQueryForEscape(final String queryString, final Map<String, String> attributes) {
FlowFile mockFlowFile = Mockito.mock(FlowFile.class);
Mockito.when(mockFlowFile.getAttributes()).thenReturn(attributes);
@@ -315,15 +305,14 @@ public class TestQuery {
Mockito.when(mockFlowFile.getLineageStartDate()).thenReturn(System.currentTimeMillis());
return Query.evaluateExpressions(queryString, mockFlowFile);
}
-
-
+
@Test
public void testGetAttributeValue() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "My Value");
verifyEquals("${attr}", attributes, "My Value");
}
-
+
@Test
public void testGetAttributeValueEmbedded() {
final Map<String, String> attributes = new HashMap<>();
@@ -331,14 +320,14 @@ public class TestQuery {
attributes.put("XX", "My Value");
verifyEquals("${${attr:trim()}}", attributes, "My Value");
}
-
+
@Test
public void testSimpleSubstring() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "My Value");
verifyEquals("${attr:substring(2, 5)}", attributes, " Va");
}
-
+
@Test
public void testCallToFunctionWithSubjectResultOfAnotherFunctionCall() {
final Map<String, String> attributes = new HashMap<>();
@@ -359,29 +348,28 @@ public class TestQuery {
attributes.put("attr", " XX ");
verifyEquals("${attr:trim():equals('XX')}", attributes, true);
}
-
+
@Test
public void testDeeplyEmbedded() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("x", "false");
attributes.put("abc", "a");
attributes.put("a", "a");
-
+
verifyEquals("${x:or( ${${abc}:length():equals(1)} )}", attributes, true);
}
-
-
+
@Test
public void testExtractExpressionRanges() {
List<Range> ranges = Query.extractExpressionRanges("hello");
assertTrue(ranges.isEmpty());
-
+
ranges = Query.extractExpressionRanges("${hello");
assertTrue(ranges.isEmpty());
-
+
ranges = Query.extractExpressionRanges("hello}");
assertTrue(ranges.isEmpty());
-
+
ranges = Query.extractExpressionRanges("$${hello");
assertTrue(ranges.isEmpty());
@@ -393,52 +381,50 @@ public class TestQuery {
Range range = ranges.get(0);
assertEquals(0, range.getStart());
assertEquals(7, range.getEnd());
-
+
ranges = Query.extractExpressionRanges("${hello:equals( ${goodbye} )}");
assertEquals(1, ranges.size());
range = ranges.get(0);
assertEquals(0, range.getStart());
assertEquals(28, range.getEnd());
-
+
ranges = Query.extractExpressionRanges("${hello:equals( $${goodbye} )}");
assertEquals(1, ranges.size());
range = ranges.get(0);
assertEquals(0, range.getStart());
assertEquals(29, range.getEnd());
-
+
ranges = Query.extractExpressionRanges("${hello:equals( $${goodbye} )} or just hi, ${bob:or(${jerry})}");
assertEquals(2, ranges.size());
range = ranges.get(0);
assertEquals(0, range.getStart());
assertEquals(29, range.getEnd());
-
+
range = ranges.get(1);
assertEquals(43, range.getStart());
assertEquals(61, range.getEnd());
-
-
+
ranges = Query.extractExpressionRanges("${hello:equals( ${goodbye} )} or just hi, ${bob}, are you ${bob.age:toNumber()} yet? $$$${bob}");
assertEquals(3, ranges.size());
range = ranges.get(0);
assertEquals(0, range.getStart());
assertEquals(28, range.getEnd());
-
+
range = ranges.get(1);
assertEquals(42, range.getStart());
assertEquals(47, range.getEnd());
-
+
range = ranges.get(2);
assertEquals(58, range.getStart());
assertEquals(78, range.getEnd());
-
+
ranges = Query.extractExpressionRanges("${x:matches( '.{4}' )}");
assertEquals(1, ranges.size());
range = ranges.get(0);
assertEquals(0, range.getStart());
assertEquals(21, range.getEnd());
}
-
-
+
@Test
public void testExtractExpressionTypes() {
List<ResultType> types = Query.extractResultTypes("${hello:equals( ${goodbye} )} or just hi, ${bob}, are you ${bob.age:toNumber()} yet? $$$${bob}");
@@ -447,19 +433,18 @@ public class TestQuery {
assertEquals(ResultType.STRING, types.get(1));
assertEquals(ResultType.NUMBER, types.get(2));
}
-
-
+
@Test
public void testEqualsEmbedded() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("x", "hello");
attributes.put("y", "good-bye");
-
+
verifyEquals("${x:equals( ${y} )}", attributes, false);
-
+
attributes.put("y", "hello");
verifyEquals("${x:equals( ${y} )}", attributes, true);
-
+
attributes.put("x", "4");
attributes.put("y", "3");
attributes.put("z", "1");
@@ -474,18 +459,17 @@ public class TestQuery {
attributes.put("y", "88");
assertEquals("true", Query.evaluateExpressions("${x:equals( '${y}' )}", attributes, null));
}
-
-
+
@Test
public void testComplicatedEmbeddedExpressions() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("fox", "quick, brown");
attributes.put("dog", "lazy");
-
+
verifyEquals("${fox:substring( ${ 'dog' :substring(2):length()}, 5 ):equals( 'ick' )}", attributes, true);
verifyEquals("${fox:substring( ${ 'dog' :substring(2):length()}, 5 ):equals( 'ick' )}", attributes, true);
}
-
+
@Test
public void testQuotingQuotes() {
final Map<String, String> attributes = new HashMap<>();
@@ -501,7 +485,7 @@ public class TestQuery {
System.out.println(query);
verifyEquals(query, attributes, "say \"hi\"");
}
-
+
@Test
public void testDoubleQuotesWithinSingleQuotes() {
final Map<String, String> attributes = new HashMap<>();
@@ -511,30 +495,30 @@ public class TestQuery {
System.out.println(query);
verifyEquals(query, attributes, "say \"hello\"");
}
-
+
@Test
public void testEscapeQuotes() {
final long timestamp = 1403620278642L;
final Map<String, String> attributes = new HashMap<>();
attributes.put("date", String.valueOf(timestamp));
-
+
final String format = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
-
+
final String query = "startDateTime=\"${date:toNumber():toDate():format(\"" + format + "\")}\"";
final String result = Query.evaluateExpressions(query, attributes, null);
-
+
final String expectedTime = new SimpleDateFormat(format, Locale.US).format(timestamp);
assertEquals("startDateTime=\"" + expectedTime + "\"", result);
-
+
final List<Range> ranges = Query.extractExpressionRanges(query);
assertEquals(1, ranges.size());
}
-
+
@Test
public void testDateConversion() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("date", "1403620278642");
-
+
verifyEquals("${date:format('yyyy')}", attributes, "2014");
verifyEquals("${date:toDate():format('yyyy')}", attributes, "2014");
verifyEquals("${date:toNumber():format('yyyy')}", attributes, "2014");
@@ -542,17 +526,16 @@ public class TestQuery {
verifyEquals("${date:toDate():toNumber():format('yyyy')}", attributes, "2014");
verifyEquals("${date:toDate():toNumber():toDate():toNumber():toDate():toNumber():format('yyyy')}", attributes, "2014");
}
-
+
@Test
public void testSingleLetterAttribute() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("A", "0123456789");
-
+
verifyEquals("${A}", attributes, "0123456789");
verifyEquals("${'A'}", attributes, "0123456789");
}
-
@Test
public void testImplicitConversions() {
final Map<String, String> attributes = new HashMap<>();
@@ -562,7 +545,7 @@ public class TestQuery {
attributes.put("d", "Quick Brown Fox");
attributes.put("F", "-48");
attributes.put("n", "2014/04/04 00:00:00");
-
+
final Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.MONTH, 3);
@@ -570,11 +553,10 @@ public class TestQuery {
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 45);
-
+
final String dateString = cal.getTime().toString();
attributes.put("z", dateString);
-
verifyEquals("${A:plus(4)}", attributes, 123456793L);
verifyEquals("${A:plus( ${F} )}", attributes, 123456741L);
@@ -582,11 +564,11 @@ public class TestQuery {
verifyEquals("${A:substring(2,3):plus(21):substring(1,2):plus(0)}", attributes, 3L);
verifyEquals("${n:format( 'yyyy' )}", attributes, "2014");
verifyEquals("${z:format( 'yyyy' )}", attributes, "2014");
-
+
attributes.put("n", "2014/04/04 00:00:00.045");
verifyEquals("${n:format( 'yyyy' ):append(','):append( ${n:format( 'SSS' )} )}", attributes, "2014,045");
}
-
+
@Test
public void testNewLinesAndTabsInQuery() {
final String query = "${ abc:equals('abc'):or( \n\t${xx:isNull()}\n) }";
@@ -594,12 +576,12 @@ public class TestQuery {
Query.validateExpression(query, false);
assertEquals("true", Query.evaluateExpressions(query));
}
-
+
@Test
public void testAttributeReferencesWithWhiteSpace() {
final Map<String, String> attrs = new HashMap<>();
attrs.put("a b c,d", "abc");
-
+
final String query = "${ 'a b c,d':equals('abc') }";
verifyEquals(query, attrs, true);
}
@@ -609,68 +591,68 @@ public class TestQuery {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "xyz");
- final String expression =
- "# hello, world\n" +
- "${# ref attr\n" +
- "\t" +
- "abc" +
- "\t" +
- "#end ref attr\n" +
- "}";
+ final String expression
+ = "# hello, world\n"
+ + "${# ref attr\n"
+ + "\t"
+ + "abc"
+ + "\t"
+ + "#end ref attr\n"
+ + "}";
Query query = Query.compile(expression);
QueryResult<?> result = query.evaluate(attributes);
assertEquals(ResultType.STRING, result.getResultType());
assertEquals("xyz", result.getValue());
-
+
query = Query.compile("${abc:append('# hello') #good-bye \n}");
result = query.evaluate(attributes);
assertEquals(ResultType.STRING, result.getResultType());
assertEquals("xyz# hello", result.getValue());
}
-
+
@Test
public void testAppendPrepend() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "XX");
attributes.put("YXXX", "bingo");
-
+
verifyEquals("${${attr:append('X'):prepend('Y')}}", attributes, "bingo");
}
-
+
@Test
public void testIsNull() {
final Map<String, String> attributes = new HashMap<>();
verifyEquals("${attr:isNull()}", attributes, true);
}
-
+
@Test
public void testNotNull() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "");
-
+
verifyEquals("${attr:notNull()}", attributes, true);
}
-
+
@Test
public void testIsNullOrLengthEquals0() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "");
attributes.put("xyz", "xyz");
attributes.put("xx", " ");
-
+
verifyEquals("${abc:isNull():or( ${abc:length():equals(0)} )}", attributes, true);
verifyEquals("${xyz:isNull():or( ${xyz:length():equals(0)} )}", attributes, false);
verifyEquals("${none:isNull():or( ${none:length():equals(0)} )}", attributes, true);
verifyEquals("${xx:isNull():or( ${xx:trim():length():equals(0)} )}", attributes, true);
}
-
+
@Test
public void testReplaceNull() {
final Map<String, String> attributes = new HashMap<>();
verifyEquals("${attr:replaceNull('hello')}", attributes, "hello");
}
-
+
@Test
public void testReplace() {
final Map<String, String> attributes = new HashMap<>();
@@ -683,10 +665,10 @@ public class TestQuery {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "hello");
attributes.put("xyz", "00-00TEST.2014_01_01_000000_value");
-
+
verifyEquals("${xyz:replaceAll(\"^([^.]+)\\.([0-9]{4})_([0-9]{2})_([0-9]{2}).*$\", \"$3\")}", attributes, "01");
verifyEquals("${attr:replaceAll('l+', 'r')}", attributes, "hero");
-
+
attributes.clear();
attributes.put("filename1", "abc.gz");
attributes.put("filename2", "abc.g");
@@ -705,10 +687,9 @@ public class TestQuery {
verifyEquals("${abc:replaceAll( 'xx', '$0')}", attributes, "hello world");
verifyEquals("${abc:replaceAll( '(xx)', '$1')}", attributes, "hello world");
verifyEquals("${abc:replaceAll( 'lo wor(ld)', '$1')}", attributes, "helld");
-
+
}
-
-
+
@Test
public void testReplaceAllWithOddNumberOfBackslashPairs() {
final Map<String, String> attributes = new HashMap<>();
@@ -718,15 +699,15 @@ public class TestQuery {
verifyEquals("${filename:replaceAll('\\\\\\\\', '/')}", attributes, "C:/temp/.txt");
verifyEquals("${filename:replaceAll('\\\\\\.txt$', '')}", attributes, "C:\\temp");
}
-
+
@Test
public void testReplaceAllWithMatchingGroup() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("attr", "hello");
-
+
verifyEquals("${attr:replaceAll('.*?(l+).*', '$1')}", attributes, "ll");
}
-
+
@Test
public void testMathOperations() {
final Map<String, String> attributes = new HashMap<>();
@@ -746,16 +727,16 @@ public class TestQuery {
attributes.put("attr", "https://abc.go");
verifyEquals("${attr:indexOf('/')}", attributes, 6L);
}
-
+
@Test
public void testDate() {
final Calendar now = Calendar.getInstance();
final int year = now.get(Calendar.YEAR);
final Map<String, String> attributes = new HashMap<>();
attributes.put("entryDate", String.valueOf(now.getTimeInMillis()));
-
+
verifyEquals("${entryDate:toNumber():toDate():format('yyyy')}", attributes, String.valueOf(year));
-
+
attributes.clear();
attributes.put("month", "3");
attributes.put("day", "4");
@@ -765,34 +746,34 @@ public class TestQuery {
verifyEquals("${year:append('/'):append(${month}):append('/'):append(${day}):toDate('yyyy/MM/dd'):format('D')}", attributes, "63");
}
-
+
@Test
public void testSystemProperty() {
System.setProperty("hello", "good-bye");
assertEquals("good-bye", Query.evaluateExpressions("${hello}"));
assertEquals("good-bye", Query.compile("${hello}").evaluate().getValue());
}
-
+
@Test
public void testAnyAttribute() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "zzz");
attributes.put("xyz", "abc");
-
+
verifyEquals("${anyAttribute('abc', 'xyz', 'missingAttr'):substring(1,2):equals('b')}", attributes, true);
verifyEquals("${anyAttribute('abc', 'xyz'):substring(1,2):equals('b')}", attributes, true);
verifyEquals("${anyAttribute('xyz', 'abc'):substring(1,2):equals('b')}", attributes, true);
verifyEquals("${anyAttribute('zz'):substring(1,2):equals('b')}", attributes, false);
verifyEquals("${anyAttribute('abc', 'zz'):isNull()}", attributes, true);
}
-
+
@Test
public void testAnyMatchingAttribute() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "zzz");
attributes.put("xyz", "abc");
attributes.put("123.cba", "hello");
-
+
verifyEquals("${anyMatchingAttribute('.{2}x', '.{2}z'):substring(1,2):equals('b')}", attributes, true);
verifyEquals("${anyMatchingAttribute('.*'):substring(1,2):equals('b')}", attributes, true);
verifyEquals("${anyMatchingAttribute('x{44}'):substring(1,2):equals('b')}", attributes, false);
@@ -804,48 +785,46 @@ public class TestQuery {
verifyEquals("${anyMatchingAttribute('123\\.c.*'):matches('hello')}", attributes, true);
verifyEquals("${anyMatchingAttribute('123\\.c.*|a.c'):matches('zzz')}", attributes, true);
}
-
-
+
@Test
public void testAnyDelineatedValue() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "a,b,c");
attributes.put("xyz", "abc");
-
+
final String query = "${anyDelineatedValue('${abc}', ','):equals('b')}";
assertEquals(ResultType.BOOLEAN, Query.getResultType(query));
-
+
assertEquals("true", Query.evaluateExpressions(query, attributes, null));
assertEquals("true", Query.evaluateExpressions("${anyDelineatedValue('${abc}', ','):equals('a')}", attributes, null));
assertEquals("true", Query.evaluateExpressions("${anyDelineatedValue('${abc}', ','):equals('c')}", attributes, null));
assertEquals("false", Query.evaluateExpressions("${anyDelineatedValue('${abc}', ','):equals('d')}", attributes, null));
-
+
verifyEquals("${anyDelineatedValue(${abc}, ','):equals('b')}", attributes, true);
verifyEquals("${anyDelineatedValue(${abc}, ','):equals('a')}", attributes, true);
verifyEquals("${anyDelineatedValue(${abc}, ','):equals('c')}", attributes, true);
verifyEquals("${anyDelineatedValue(${abc}, ','):equals('d')}", attributes, false);
}
-
+
@Test
public void testAllDelineatedValues() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "a,b,c");
attributes.put("xyz", "abc");
-
+
final String query = "${allDelineatedValues('${abc}', ','):matches('[abc]')}";
-
+
assertEquals(ResultType.BOOLEAN, Query.getResultType(query));
assertEquals("true", Query.evaluateExpressions(query, attributes, null));
assertEquals("true", Query.evaluateExpressions(query, attributes, null));
assertEquals("false", Query.evaluateExpressions("${allDelineatedValues('${abc}', ','):matches('[abd]')}", attributes, null));
assertEquals("false", Query.evaluateExpressions("${allDelineatedValues('${abc}', ','):equals('a'):not()}", attributes, null));
-
+
verifyEquals("${allDelineatedValues(${abc}, ','):matches('[abc]')}", attributes, true);
verifyEquals("${allDelineatedValues(${abc}, ','):matches('[abd]')}", attributes, false);
verifyEquals("${allDelineatedValues(${abc}, ','):equals('a'):not()}", attributes, false);
}
-
-
+
@Test
public void testAllAttributes() {
final Map<String, String> attributes = new HashMap<>();
@@ -859,7 +838,7 @@ public class TestQuery {
verifyEquals("${allAttributes('abc', 'hello'):length():equals(4)}", attributes, false);
verifyEquals("${allAttributes('abc', 'xyz'):length():equals(4)}", attributes, true);
verifyEquals("${allAttributes('abc', 'xyz', 'other'):isNull()}", attributes, false);
-
+
try {
Query.compile("${allAttributes('#ah'):equals('hello')");
Assert.fail("Was able to compile with allAttributes and an invalid attribute name");
@@ -867,8 +846,7 @@ public class TestQuery {
// expected behavior
}
}
-
-
+
@Test
public void testMathOperators() {
final Map<String, String> attributes = new HashMap<>();
@@ -878,7 +856,7 @@ public class TestQuery {
verifyEquals("${xyz:toNumber():gt( ${abc:toNumber()} )}", attributes, true);
}
-
+
@Test
public void testAllMatchingAttributes() {
final Map<String, String> attributes = new HashMap<>();
@@ -887,17 +865,17 @@ public class TestQuery {
attributes.put("hello", "world!");
attributes.put("123.cba", "hell.o");
- System.out.println( printTree(Query.compile("${allMatchingAttributes('(abc|xyz)'):matches('\\\\d+')}").getTree()) );
-
+ System.out.println(printTree(Query.compile("${allMatchingAttributes('(abc|xyz)'):matches('\\\\d+')}").getTree()));
+
verifyEquals("${'123.cba':matches('hell\\.o')}", attributes, true);
verifyEquals("${allMatchingAttributes('123\\.cba'):equals('hell.o')}", attributes, true);
verifyEquals("${allMatchingAttributes('(abc|xyz)'):matches('\\d+')}", attributes, true);
verifyEquals("${allMatchingAttributes('[ax].*'):toNumber():lt(99999)}", attributes, true);
verifyEquals("${allMatchingAttributes('hell.'):length():gt(3)}", attributes, true);
-
+
verifyEquals("${allMatchingAttributes('123\\.cba'):equals('no')}", attributes, false);
}
-
+
@Test
public void testMatches() {
final Map<String, String> attributes = new HashMap<>();
@@ -909,15 +887,14 @@ public class TestQuery {
final String evaluated = Query.evaluateExpressions("${abc:matches('1234${end}4321')}", attributes, null);
assertEquals("true", evaluated);
-
+
attributes.put("end", "888");
final String secondEvaluation = Query.evaluateExpressions("${abc:matches('1234${end}4321')}", attributes, null);
assertEquals("false", secondEvaluation);
-
+
verifyEquals("${dotted:matches('abc\\.xyz')}", attributes, true);
- }
-
-
+ }
+
@Test
public void testFind() {
final Map<String, String> attributes = new HashMap<>();
@@ -929,68 +906,67 @@ public class TestQuery {
final String evaluated = Query.evaluateExpressions("${abc:find('1234${end}4321')}", attributes, null);
assertEquals("true", evaluated);
-
+
attributes.put("end", "888");
final String secondEvaluation = Query.evaluateExpressions("${abc:find('${end}4321')}", attributes, null);
assertEquals("false", secondEvaluation);
-
+
verifyEquals("${dotted:find('\\.')}", attributes, true);
- }
-
+ }
+
@Test
public void testSubstringAfter() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("filename", "file-255");
-
+
verifyEquals("${filename:substringAfter('')}", attributes, "file-255");
verifyEquals("${filename:substringAfterLast('')}", attributes, "file-255");
verifyEquals("${filename:substringBefore('')}", attributes, "file-255");
verifyEquals("${filename:substringBeforeLast('')}", attributes, "file-255");
verifyEquals("${filename:substringBefore('file')}", attributes, "");
-
+
attributes.put("uri", "sftp://some.uri");
verifyEquals("${uri:substringAfter('sftp')}", attributes, "://some.uri");
}
-
+
@Test
public void testSubstringAfterLast() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("filename", "file-file-255");
-
+
verifyEquals("${filename:substringAfterLast('file-')}", attributes, "255");
verifyEquals("${filename:substringAfterLast('5')}", attributes, "");
verifyEquals("${filename:substringAfterLast('x')}", attributes, "file-file-255");
}
-
+
@Test
public void testSubstringBefore() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("something", "some {} or other");
-
+
verifyEquals("${something:substringBefore('}')}", attributes, "some {");
}
-
+
@Test
public void testSubstring() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("filename", "file-255");
-
+
verifyEquals("${filename:substring(1, 2)}", attributes, "i");
verifyEquals("${filename:substring(4)}", attributes, "-255");
}
-
+
@Test
public void testToRadix() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("filename", "file-255");
attributes.put("filename2", "file-99999");
-
verifyEquals("${filename:substringAfter('-'):toNumber():toRadix(16):toUpper()}", attributes, "FF");
verifyEquals("${filename:substringAfter('-'):toNumber():toRadix(16, 4):toUpper()}", attributes, "00FF");
verifyEquals("${filename:substringAfter('-'):toNumber():toRadix(36, 3):toUpper()}", attributes, "073");
}
-
+
@Test
public void testDateFormatConversion() {
final Map<String, String> attributes = new HashMap<>();
@@ -998,23 +974,22 @@ public class TestQuery {
verifyEquals("${blue:toDate('yyyyMMddHHmmss'):format(\"yyyy/MM/dd HH:mm:ss.SSS'Z'\")}", attributes, "2013/09/17 16:26:43.000Z");
}
-
@Test
public void testNot() {
verifyEquals("${ab:notNull():not()}", new HashMap<String, String>(), true);
}
-
+
@Test
public void testAttributesWithSpaces() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("ab", "abc");
attributes.put("a b", "abc");
-
+
verifyEquals("${ab}", attributes, "abc");
verifyEquals("${'a b'}", attributes, "abc");
verifyEquals("${'a b':replaceNull('')}", attributes, "");
}
-
+
@Test
public void testOr() {
final Map<String, String> attributes = new HashMap<>();
@@ -1029,7 +1004,7 @@ public class TestQuery {
verifyEquals("${filename1:startsWith('x'):or( ${filename2:startsWith('y')} )}", attributes, true);
verifyEquals("${filename2:startsWith('x'):or( ${filename1:startsWith('y')} )}", attributes, false);
}
-
+
@Test
public void testAnd() {
final Map<String, String> attributes = new HashMap<>();
@@ -1046,7 +1021,7 @@ public class TestQuery {
verifyEquals("${filename2:startsWith('x'):and( ${filename1:startsWith('y')} )}", attributes, false);
verifyEquals("${filename1:startsWith('x'):and( ${'filename 3':endsWith('y')} )}", attributes, true);
}
-
+
@Test
public void testAndOrNot() {
final Map<String, String> attributes = new HashMap<>();
@@ -1054,90 +1029,90 @@ public class TestQuery {
attributes.put("filename2", "yabc");
attributes.put("filename 3", "abcxy");
- final String query =
- "${" +
- " 'non-existing':notNull():not():and(" + // true AND (
- " ${filename1:startsWith('y')" + // false
- " :or(" + // or
- " ${ filename1:startsWith('x'):and(false) }" + // false
- " ):or(" + // or
- " ${ filename2:endsWith('xxxx'):or( ${'filename 3':length():gt(1)} ) }" + // true )
- " )}" +
- " )" +
- "}";
-
+ final String query
+ = "${"
+ + " 'non-existing':notNull():not():and(" + // true AND (
+ " ${filename1:startsWith('y')" + // false
+ " :or(" + // or
+ " ${ filename1:startsWith('x'):and(false) }" + // false
+ " ):or(" + // or
+ " ${ filename2:endsWith('xxxx'):or( ${'filename 3':length():gt(1)} ) }" + // true )
+ " )}"
+ + " )"
+ + "}";
+
System.out.println(query);
verifyEquals(query, attributes, true);
}
-
+
@Test
public void testAndOrLogicWithAnyAll() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("filename1", "xabc");
attributes.put("filename2", "yabc");
attributes.put("filename 3", "abcxy");
-
+
verifyEquals("${anyMatchingAttribute('filename.*'):contains('abc'):and( ${filename2:equals('yabc')} )}", attributes, true);
verifyEquals("${anyMatchingAttribute('filename.*'):contains('abc'):and( ${filename2:equals('xabc')} )}", attributes, false);
verifyEquals("${anyMatchingAttribute('filename.*'):contains('abc'):not():or( ${filename2:equals('yabc')} )}", attributes, true);
verifyEquals("${anyMatchingAttribute('filename.*'):contains('abc'):not():or( ${filename2:equals('xabc')} )}", attributes, false);
}
-
+
@Test
public void testKeywords() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("UUID", "123");
verifyEquals("${ 'UUID':toNumber():equals(123) }", attributes, true);
}
-
+
@Test
public void testEqualsNumber() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("abc", "123");
verifyEquals("${ abc:toNumber():equals(123) }", attributes, true);
}
-
+
@Test
public void testSubjectAsEmbeddedExpressionWithSurroundChars() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("b", "x");
attributes.put("abcxcba", "hello");
-
+
final String evaluated = Query.evaluateExpressions("${ 'abc${b}cba':substring(0, 1) }", attributes, null);
assertEquals("h", evaluated);
}
-
+
@Test
public void testToNumberFunctionReturnsNumberType() {
assertEquals(ResultType.NUMBER, Query.getResultType("${header.size:toNumber()}"));
}
-
+
@Test
public void testAnyAttributeEmbedded() {
final Map<String, String> attributes = new HashMap<>();
attributes.put("a1", "test1");
attributes.put("b2", "2test");
attributes.put("c3", "3test3");
-
+
final String query = "${a1:equals('test1'):and( ${anyAttribute('a1','b2','c3'):contains('2')})}";
verifyEquals(query, 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);
-
- if ( expectedResult instanceof Number ) {
+
+ if (expectedResult instanceof Number) {
assertEquals(ResultType.NUMBER, result.getResultType());
- } else if ( expectedResult instanceof Boolean ) {
+ } else if (expectedResult instanceof Boolean) {
assertEquals(ResultType.BOOLEAN, result.getResultType());
} else {
assertEquals(ResultType.STRING, result.getResultType());
}
-
+
assertEquals(expectedResult, result.getValue());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/afb4fe52/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestStandardPreparedQuery.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestStandardPreparedQuery.java b/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestStandardPreparedQuery.java
index 398a23b..5acba8d 100644
--- a/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestStandardPreparedQuery.java
+++ b/nifi/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestStandardPreparedQuery.java
@@ -31,34 +31,34 @@ public class TestStandardPreparedQuery {
public void testSimpleReference() {
final Map<String, String> attrs = new HashMap<>();
attrs.put("xx", "world");
-
+
assertEquals("world", evaluate("${xx}", attrs));
assertEquals("hello, world!", evaluate("hello, ${xx}!", attrs));
}
-
+
@Test
public void testEmbeddedReference() {
final Map<String, String> attrs = new HashMap<>();
attrs.put("xx", "yy");
attrs.put("yy", "world");
-
+
assertEquals("world", evaluate("${${xx}}", attrs));
}
-
+
@Test
public void test10MIterations() {
final Map<String, String> attrs = new HashMap<>();
attrs.put("xx", "world");
-
+
final StandardPreparedQuery prepared = (StandardPreparedQuery) Query.prepare("${xx}");
final long start = System.nanoTime();
- for (int i=0; i < 10000000; i++) {
- assertEquals( "world", prepared.evaluateExpressions(attrs, null) );
+ for (int i = 0; i < 10000000; i++) {
+ assertEquals("world", prepared.evaluateExpressions(attrs, null));
}
final long nanos = System.nanoTime() - start;
System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos));
}
-
+
@Test
@Ignore("Takes too long")
public void test10MIterationsWithQuery() {
@@ -66,14 +66,14 @@ public class TestStandardPreparedQuery {
attrs.put("xx", "world");
final long start = System.nanoTime();
- for (int i=0; i < 10000000; i++) {
- assertEquals( "world", Query.evaluateExpressions("${xx}", attrs) );
+ for (int i = 0; i < 10000000; i++) {
+ assertEquals("world", Query.evaluateExpressions("${xx}", attrs));
}
final long nanos = System.nanoTime() - start;
System.out.println(TimeUnit.NANOSECONDS.toMillis(nanos));
}
-
+
@Test
public void testSeveralSequentialExpressions() {
final Map<String, String> attributes = new HashMap<>();
@@ -83,10 +83,10 @@ public class TestStandardPreparedQuery {
assertEquals("Hello, World, how are you?!", evaluate("Hello, ${audience}${comma}${question}!", attributes));
}
-
+
private String evaluate(final String query, final Map<String, String> attrs) {
final String evaluated = ((StandardPreparedQuery) Query.prepare(query)).evaluateExpressions(attrs, null);
return evaluated;
}
-
+
}