This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit a88fc13dc868188091fb7094a06b282d8dfa056b Author: Alex Heneveld <[email protected]> AuthorDate: Thu Jun 15 11:19:19 2023 +0100 replace transform recognizes empty word at end now, quoted properly, and is non-greedy for glob all --- .../core/workflow/steps/variables/TransformReplace.java | 8 ++++---- .../apache/brooklyn/core/workflow/WorkflowTransformTest.java | 11 +++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformReplace.java b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformReplace.java index 330b51098e..16f8b491e3 100644 --- a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformReplace.java +++ b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/TransformReplace.java @@ -39,7 +39,7 @@ public class TransformReplace extends WorkflowTransformDefault { @Override protected void initCheckingDefinition() { Maybe<Map<String, Object>> maybeResult = new ShorthandProcessor(SHORTHAND) - .withFinalMatchRaw(true) + .withFinalMatchRaw(false) .withFailOnMismatch(true) .process(transformDef); @@ -80,7 +80,7 @@ public class TransformReplace extends WorkflowTransformDefault { : input.replaceFirst(patternToMatch, replacement); } if (glob) { - String globToRegex = convertGlobToRegex(patternToMatch); + String globToRegex = convertGlobToRegex(patternToMatch, !all); return all ? input.replaceAll(globToRegex, replacement) : input.replaceFirst(globToRegex, replacement); @@ -103,7 +103,7 @@ public class TransformReplace extends WorkflowTransformDefault { * https://jakarta.apache.org/oro/ * */ - private String convertGlobToRegex(String pattern) { + private String convertGlobToRegex(String pattern, boolean isGreedy) { StringBuilder sb = new StringBuilder(pattern.length()); int inGroup = 0; int inClass = 0; @@ -133,7 +133,7 @@ public class TransformReplace extends WorkflowTransformDefault { break; case '*': if (inClass == 0) - sb.append(".*"); + sb.append(".*"+(isGreedy ? "" : "?")); else sb.append('*'); break; diff --git a/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java b/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java index 457030d84e..a07d3e2ce7 100644 --- a/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java +++ b/core/src/test/java/org/apache/brooklyn/core/workflow/WorkflowTransformTest.java @@ -99,8 +99,11 @@ public class WorkflowTransformTest extends BrooklynMgmtUnitTestSupport { // greedy Asserts.assertEquals(transform("value 'abc def ghi c2d' | replace regex 'c.*d' XXX"), "abXXX"); Asserts.assertEquals(transform("value 'abc def ghi c2d' | replace all regex 'c.*d' XXX"), "abXXX"); - // TODO this fails -// Asserts.assertEquals(transform("value 'abc def ghi' | replace regex 'c d' ''"), "abef ghi"); + // non-greedy qualifier + Asserts.assertEquals(transform("value 'abc def ghi c2d' | replace regex 'c.*?d' XXX"), "abXXXef ghi c2d"); + Asserts.assertEquals(transform("value 'abc def ghi c2d' | replace all regex 'c.*?d' XXX"), "abXXXef ghi XXX"); + + Asserts.assertEquals(transform("value 'abc def ghi' | replace regex 'c d' ''"), "abef ghi"); } @Test @@ -113,9 +116,9 @@ public class WorkflowTransformTest extends BrooklynMgmtUnitTestSupport { @Test public void testTransformGlob() throws Exception { Asserts.assertEquals(transform("value 'abc def ghi' | replace glob c*e XXX"), "abXXXf ghi"); - // TODO glob is greedy, so all has no effect + // glob is greedy, unless all is specified where it is not Asserts.assertEquals(transform("value 'abc def ghi c2e' | replace glob c*e XXX"), "abXXX"); - Asserts.assertEquals(transform("value 'abc def ghi c2e' | replace all glob c*e XXX"), "abXXX"); + Asserts.assertEquals(transform("value 'abc def ghi c2e' | replace all glob c*e XXX"), "abXXXf ghi XXX"); } @Test
