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()); }
