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