This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-filtering.git


The following commit(s) were added to refs/heads/master by this push:
     new 0880aea  [MSHARED-1412] Allow to customize Interpolator used by filter 
(#104)
0880aea is described below

commit 0880aea993f6d05db6cc48b2c0f3a1d4debd10b8
Author: Konrad Windszus <k...@apache.org>
AuthorDate: Mon Aug 5 17:29:29 2024 +0200

    [MSHARED-1412] Allow to customize Interpolator used by filter (#104)
---
 .../filtering/AbstractMavenFilteringRequest.java   | 22 ++++++++++++++++++
 .../apache/maven/shared/filtering/BaseFilter.java  | 13 +++++++++--
 .../filtering/DefaultMavenFileFilterTest.java      | 26 ++++++++++++++++++++++
 3 files changed, 59 insertions(+), 2 deletions(-)

diff --git 
a/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
 
b/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
index e0c8871..79e484e 100644
--- 
a/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
+++ 
b/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
@@ -22,9 +22,11 @@ import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
+import java.util.function.Consumer;
 
 import org.apache.maven.api.Project;
 import org.apache.maven.api.Session;
+import org.codehaus.plexus.interpolation.Interpolator;
 
 /**
  * @since 1.0-beta-3
@@ -79,6 +81,8 @@ public class AbstractMavenFilteringRequest {
      */
     private boolean supportMultiLineFiltering;
 
+    private Consumer<Interpolator> interpolatorCustomizer;
+
     /**
      * Create instance.
      */
@@ -337,4 +341,22 @@ public class AbstractMavenFilteringRequest {
     public void setSupportMultiLineFiltering(boolean 
supportMultiLineFiltering) {
         this.supportMultiLineFiltering = supportMultiLineFiltering;
     }
+
+    /**
+     *
+     * @return the customizer which is supposed to be used by filters creating 
an {@link Interpolator} like those based on {@link BaseFilter}.
+     * @since 4.0.0-beta-2
+     */
+    public Consumer<Interpolator> getInterpolatorCustomizer() {
+        return interpolatorCustomizer;
+    }
+
+    /**
+     *
+     * @param interpolatorCustomizer the customizer which is supposed to be 
used by filters creating an {@link Interpolator} like those based on {@link 
BaseFilter}.
+     * @since 4.0.0-beta-2
+     */
+    public void setInterpolatorCustomizer(Consumer<Interpolator> 
interpolatorCustomizer) {
+        this.interpolatorCustomizer = interpolatorCustomizer;
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java 
b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
index a55a041..ec78069 100644
--- a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.TreeSet;
+import java.util.function.Consumer;
 
 import org.apache.maven.api.Project;
 import org.apache.maven.api.Session;
@@ -169,7 +170,8 @@ class BaseFilter implements DefaultFilterInfo {
                 request.getProjectStartExpressions(),
                 request.getEscapeString(),
                 request.isEscapeWindowsPaths(),
-                request.isSupportMultiLineFiltering());
+                request.isSupportMultiLineFiltering(),
+                request.getInterpolatorCustomizer());
 
         defaultFilterWrappers.add(wrapper);
 
@@ -221,6 +223,8 @@ class BaseFilter implements DefaultFilterInfo {
 
         private boolean supportMultiLineFiltering;
 
+        private Consumer<Interpolator> interpolatorCustomizer;
+
         Wrapper(
                 LinkedHashSet<String> delimiters,
                 Project project,
@@ -229,7 +233,8 @@ class BaseFilter implements DefaultFilterInfo {
                 List<String> projectStartExpressions,
                 String escapeString,
                 boolean escapeWindowsPaths,
-                boolean supportMultiLineFiltering) {
+                boolean supportMultiLineFiltering,
+                Consumer<Interpolator> interpolatorCustomizer) {
             super();
             this.delimiters = delimiters;
             this.project = project;
@@ -239,6 +244,7 @@ class BaseFilter implements DefaultFilterInfo {
             this.escapeString = escapeString;
             this.escapeWindowsPaths = escapeWindowsPaths;
             this.supportMultiLineFiltering = supportMultiLineFiltering;
+            this.interpolatorCustomizer = interpolatorCustomizer;
         }
 
         @Override
@@ -251,6 +257,9 @@ class BaseFilter implements DefaultFilterInfo {
                     mavenSession,
                     escapeString,
                     escapeWindowsPaths);
+            if (interpolatorCustomizer != null) {
+                interpolatorCustomizer.accept(interpolator);
+            }
 
             MultiDelimiterInterpolatorFilterReaderLineEnding filterReader =
                     new MultiDelimiterInterpolatorFilterReaderLineEnding(
diff --git 
a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
 
b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
index d32de67..1fcf9fa 100644
--- 
a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
+++ 
b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
@@ -19,6 +19,7 @@
 package org.apache.maven.shared.filtering;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 import java.nio.file.Files;
@@ -37,6 +38,7 @@ import org.apache.maven.api.di.testing.MavenDITest;
 import org.apache.maven.api.model.Build;
 import org.apache.maven.api.plugin.testing.stubs.ProjectStub;
 import org.apache.maven.di.Injector;
+import org.codehaus.plexus.interpolation.AbstractValueSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.sonatype.plexus.build.incremental.BuildContext;
@@ -172,4 +174,28 @@ public class DefaultMavenFileFilterTest {
             assertEquals("t...@titi.com bar", IOUtils.toString(reader));
         }
     }
+
+    @Test
+    void testInterpolatorCustomizer() throws MavenFilteringException, 
IOException {
+        AbstractMavenFilteringRequest req = new 
AbstractMavenFilteringRequest();
+        req.setInterpolatorCustomizer(i -> {
+            i.addValueSource(new AbstractValueSource(false) {
+
+                @Override
+                public Object getValue(String expression) {
+                    if (expression.equals("foo")) {
+                        return "bar";
+                    }
+                    return null;
+                }
+            });
+        });
+
+        MavenFileFilter mavenFileFilter = 
container.getInstance(MavenFileFilter.class);
+        List<FilterWrapper> wrappers = 
mavenFileFilter.getDefaultFilterWrappers(req);
+
+        try (Reader reader = wrappers.get(0).getReader(new 
StringReader("t...@titi.com ${foo}"))) {
+            assertEquals("t...@titi.com bar", IOUtils.toString(reader));
+        }
+    }
 }

Reply via email to