This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch feature/interpolator-customizer in repository https://gitbox.apache.org/repos/asf/maven-filtering.git
commit f25600b19ee3d102dd8c3ed1c0516353d868826c Author: Konrad Windszus <[email protected]> AuthorDate: Thu Jun 20 09:59:08 2024 +0200 [MSHARED-1412] Allow to customize Interpolator used by filter --- pom.xml | 2 +- .../filtering/AbstractMavenFilteringRequest.java | 22 +++++++++++++++++ .../apache/maven/shared/filtering/BaseFilter.java | 13 ++++++++-- .../filtering/InterpolatorCustomizerSupplier.java | 28 ++++++++++++++++++++++ .../filtering/DefaultMavenFileFilterTest.java | 25 +++++++++++++++++++ 5 files changed, 87 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 97ab32e..3e4c2b3 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ </parent> <artifactId>maven-filtering</artifactId> - <version>3.3.3-SNAPSHOT</version> + <version>3.4.0-SNAPSHOT</version> <name>Apache Maven Filtering</name> <description>A component to assist in filtering of resource files with properties from a Maven project.</description> 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 503e70e..6daebd8 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.execution.MavenSession; import org.apache.maven.project.MavenProject; +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. */ @@ -338,4 +342,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 3.4.0 + */ + 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 3.4.0 + */ + 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 256c2c5..bb72f1f 100644 --- a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java +++ b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java @@ -27,6 +27,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Properties; import java.util.TreeSet; +import java.util.function.Consumer; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; @@ -173,7 +174,8 @@ class BaseFilter implements DefaultFilterInfo { request.getProjectStartExpressions(), request.getEscapeString(), request.isEscapeWindowsPaths(), - request.isSupportMultiLineFiltering()); + request.isSupportMultiLineFiltering(), + request.getInterpolatorCustomizer()); defaultFilterWrappers.add(wrapper); @@ -232,6 +234,8 @@ class BaseFilter implements DefaultFilterInfo { private boolean supportMultiLineFiltering; + private Consumer<Interpolator> interpolatorCustomizer; + Wrapper( LinkedHashSet<String> delimiters, MavenProject project, @@ -240,7 +244,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; @@ -250,6 +255,7 @@ class BaseFilter implements DefaultFilterInfo { this.escapeString = escapeString; this.escapeWindowsPaths = escapeWindowsPaths; this.supportMultiLineFiltering = supportMultiLineFiltering; + this.interpolatorCustomizer = interpolatorCustomizer; } @Override @@ -262,6 +268,9 @@ class BaseFilter implements DefaultFilterInfo { mavenSession, escapeString, escapeWindowsPaths); + if (interpolatorCustomizer != null) { + interpolatorCustomizer.accept(interpolator); + } MultiDelimiterInterpolatorFilterReaderLineEnding filterReader = new MultiDelimiterInterpolatorFilterReaderLineEnding( diff --git a/src/main/java/org/apache/maven/shared/filtering/InterpolatorCustomizerSupplier.java b/src/main/java/org/apache/maven/shared/filtering/InterpolatorCustomizerSupplier.java new file mode 100644 index 0000000..0139805 --- /dev/null +++ b/src/main/java/org/apache/maven/shared/filtering/InterpolatorCustomizerSupplier.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.shared.filtering; + +import java.util.function.Consumer; + +import org.codehaus.plexus.interpolation.Interpolator; + +@FunctionalInterface +public interface InterpolatorCustomizerSupplier { + Consumer<Interpolator> getInterpolatorCustomizer(); +} 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 b0ca05a..db0a71b 100644 --- a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java +++ b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java @@ -21,6 +21,7 @@ package org.apache.maven.shared.filtering; import javax.inject.Inject; import java.io.File; +import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.nio.file.Files; @@ -33,6 +34,7 @@ import java.util.Properties; import org.apache.commons.io.IOUtils; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.interpolation.AbstractValueSource; import org.codehaus.plexus.testing.PlexusTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -154,4 +156,27 @@ class DefaultMavenFileFilterTest { assertEquals("[email protected] 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; + } + }); + }); + + List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers(req); + + try (Reader reader = wrappers.get(0).getReader(new StringReader("[email protected] ${foo}"))) { + assertEquals("[email protected] bar", IOUtils.toString(reader)); + } + } }
