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

Reply via email to