Repository: nifi
Updated Branches:
  refs/heads/master 61c799d88 -> 02d38b55b


NIFI-2952 Fixed search value validation in ReplaceText

This closes: #1378

Signed-off-by: Andre F de Miranda <[email protected]>


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

Branch: refs/heads/master
Commit: 02d38b55bf43e8becf62029c994eba4535cae8f8
Parents: 61c799d
Author: Pierre Villard <[email protected]>
Authored: Fri Dec 30 17:45:14 2016 +0100
Committer: Andre F de Miranda <[email protected]>
Committed: Tue Apr 11 00:00:07 2017 +1000

----------------------------------------------------------------------
 .../nifi/processors/standard/ReplaceText.java   | 31 +++++++++++++++++++-
 .../processors/standard/TestReplaceText.java    | 28 ++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/02d38b55/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java
index 59721f0..ffd7a03 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ReplaceText.java
@@ -24,6 +24,7 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -44,6 +45,8 @@ import 
org.apache.nifi.annotation.documentation.CapabilityDescription;
 import org.apache.nifi.annotation.documentation.Tags;
 import org.apache.nifi.components.AllowableValue;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.ValidationContext;
+import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.components.Validator;
 import org.apache.nifi.expression.AttributeValueDecorator;
 import org.apache.nifi.flowfile.FlowFile;
@@ -110,7 +113,7 @@ public class ReplaceText extends AbstractProcessor {
         .displayName("Search Value")
         .description("The Search Value to search for in the FlowFile content. 
Only used for 'Literal Replace' and 'Regex Replace' matching strategies")
         .required(true)
-        .addValidator(StandardValidators.createRegexValidator(0, 
Integer.MAX_VALUE, true))
+        .addValidator(Validator.VALID)
         .expressionLanguageSupported(true)
         .defaultValue(DEFAULT_REGEX)
         .build();
@@ -202,6 +205,32 @@ public class ReplaceText extends AbstractProcessor {
     }
 
     @Override
+    protected Collection<ValidationResult> customValidate(ValidationContext 
validationContext) {
+        final List<ValidationResult> errors = new 
ArrayList<>(super.customValidate(validationContext));
+
+        switch 
(validationContext.getProperty(REPLACEMENT_STRATEGY).getValue()) {
+            case literalReplaceValue:
+                errors.add(StandardValidators.NON_EMPTY_VALIDATOR
+                        .validate(SEARCH_VALUE.getName(), 
validationContext.getProperty(SEARCH_VALUE).getValue(), validationContext));
+                break;
+
+            case regexReplaceValue:
+                errors.add(StandardValidators.createRegexValidator(0, 
Integer.MAX_VALUE, true)
+                        .validate(SEARCH_VALUE.getName(), 
validationContext.getProperty(SEARCH_VALUE).getValue(), validationContext));
+                break;
+
+            case appendValue:
+            case prependValue:
+            case alwaysReplace:
+            default:
+                // nothing to check, search value is not used
+                break;
+        }
+
+        return errors;
+    }
+
+    @Override
     public void onTrigger(final ProcessContext context, final ProcessSession 
session) throws ProcessException {
         final List<FlowFile> flowFiles = 
session.get(FlowFileFilters.newSizeBasedFilter(1, DataUnit.MB, 100));
         if (flowFiles.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/nifi/blob/02d38b55/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java
index 94937de..f775643 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestReplaceText.java
@@ -1166,6 +1166,34 @@ public class TestReplaceText {
         runner.run();
     }
 
+    @Test
+    public void testProcessorConfigurationRegexNotValid() throws IOException {
+        final TestRunner runner = TestRunners.newTestRunner(new ReplaceText());
+        runner.setProperty(ReplaceText.SEARCH_VALUE, "(?<!\\),*");
+        runner.setProperty(ReplaceText.REPLACEMENT_VALUE, "hello");
+        runner.setProperty(ReplaceText.REPLACEMENT_STRATEGY, 
ReplaceText.REGEX_REPLACE);
+        runner.setProperty(ReplaceText.EVALUATION_MODE, 
ReplaceText.ENTIRE_TEXT);
+        runner.assertNotValid();
+
+        runner.setProperty(ReplaceText.REPLACEMENT_STRATEGY, 
ReplaceText.LITERAL_REPLACE);
+        runner.assertValid();
+        runner.enqueue("(?<!\\),*".getBytes());
+        runner.run();
+        runner.assertAllFlowFilesTransferred(ReplaceText.REL_SUCCESS, 1);
+        final MockFlowFile out = 
runner.getFlowFilesForRelationship(ReplaceText.REL_SUCCESS).get(0);
+        out.assertContentEquals("hello");
+
+        runner.setProperty(ReplaceText.SEARCH_VALUE, "");
+        runner.assertNotValid();
+
+        runner.setProperty(ReplaceText.REPLACEMENT_STRATEGY, 
ReplaceText.APPEND);
+        runner.assertValid();
+        runner.setProperty(ReplaceText.REPLACEMENT_STRATEGY, 
ReplaceText.PREPEND);
+        runner.assertValid();
+        runner.setProperty(ReplaceText.REPLACEMENT_STRATEGY, 
ReplaceText.ALWAYS_REPLACE);
+        runner.assertValid();
+    }
+
     private String translateNewLines(final File file) throws IOException {
         return translateNewLines(file.toPath());
     }

Reply via email to