Author: krosenvold Date: Tue Oct 14 13:26:08 2014 New Revision: 1631747 URL: http://svn.apache.org/r1631747 Log: Aded stuff
Added: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenStreamFilter.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilter.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilterRequest.java Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java Added: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java?rev=1631747&view=auto ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java (added) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java Tue Oct 14 13:26:08 2014 @@ -0,0 +1,289 @@ +package org.apache.maven.shared.filtering; + +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.util.*; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.apache.maven.shared.utils.StringUtils; +import org.apache.maven.shared.utils.io.FileUtils; +import org.codehaus.plexus.interpolation.*; +import org.codehaus.plexus.interpolation.multi.MultiDelimiterStringSearchInterpolator; +import org.codehaus.plexus.logging.AbstractLogEnabled; + +class BaseFilter extends AbstractLogEnabled implements DefaultFilterInfo { + + + /** + * @see org.apache.maven.shared.filtering.MavenFileFilter#getDefaultFilterWrappers(org.apache.maven.project.MavenProject, java.util.List, boolean, org.apache.maven.execution.MavenSession) + * @deprecated + */ + public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final MavenProject mavenProject, + List<String> filters, + final boolean escapedBackslashesInFilePath, + MavenSession mavenSession ) + throws MavenFilteringException + { + return getDefaultFilterWrappers( mavenProject, filters, escapedBackslashesInFilePath, mavenSession, null ); + } + + + public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final MavenProject mavenProject, List<String> filters, + final boolean escapedBackslashesInFilePath, + MavenSession mavenSession, + MavenResourcesExecution mavenResourcesExecution ) + throws MavenFilteringException + { + + MavenResourcesExecution mre = + mavenResourcesExecution == null ? new MavenResourcesExecution() : mavenResourcesExecution.copyOf(); + + mre.setMavenProject( mavenProject ); + mre.setMavenSession( mavenSession ); + mre.setFilters( filters ); + mre.setEscapedBackslashesInFilePath( escapedBackslashesInFilePath ); + + return getDefaultFilterWrappers( mre ); + + } + + public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final AbstractMavenFilteringRequest req ) + throws MavenFilteringException + { + // backup values + boolean supportMultiLineFiltering = req.isSupportMultiLineFiltering(); + + // compensate for null parameter value. + final AbstractMavenFilteringRequest request = req == null ? new MavenFileFilterRequest() : req; + + request.setSupportMultiLineFiltering( supportMultiLineFiltering ); + + // Here we build some properties which will be used to read some properties files + // to interpolate the expression ${ } in this properties file + + // Take a copy of filterProperties to ensure that evaluated filterTokens are not propagated + // to subsequent filter files. Note: this replicates current behaviour and seems to make sense. + + final Properties baseProps = new Properties(); + + // Project properties + if ( request.getMavenProject() != null ) + { + baseProps.putAll( request.getMavenProject().getProperties() == null + ? Collections.emptyMap() + : request.getMavenProject().getProperties() ); + } + // TODO this is NPE free but do we consider this as normal + // or do we have to throw an MavenFilteringException with mavenSession cannot be null + if ( request.getMavenSession() != null ) + { + // execution properties wins + baseProps.putAll( request.getMavenSession().getExecutionProperties() ); + } + + // now we build properties to use for resources interpolation + + final Properties filterProperties = new Properties(); + + File basedir = request.getMavenProject() != null ? request.getMavenProject().getBasedir() : new File( "." ); + + loadProperties( filterProperties, basedir, request.getFileFilters(), baseProps ); + if ( filterProperties.size() < 1 ) + { + filterProperties.putAll( baseProps ); + } + + if ( request.getMavenProject() != null ) + { + if ( request.isInjectProjectBuildFilters() ) + { + @SuppressWarnings( "unchecked" ) + List<String> buildFilters = new ArrayList<String>( request.getMavenProject().getBuild().getFilters() ); + + // JDK-8015656: (coll) unexpected NPE from removeAll + if ( request.getFileFilters() != null ) + { + buildFilters.removeAll( request.getFileFilters() ); + } + + loadProperties( filterProperties, basedir, buildFilters, baseProps ); + } + + // Project properties + filterProperties.putAll( request.getMavenProject().getProperties() == null + ? Collections.emptyMap() + : request.getMavenProject().getProperties() ); + } + if ( request.getMavenSession() != null ) + { + // execution properties wins + filterProperties.putAll( request.getMavenSession().getExecutionProperties() ); + } + + if ( request.getAdditionalProperties() != null ) + { + // additional properties wins + filterProperties.putAll( request.getAdditionalProperties() ); + } + + List<FileUtils.FilterWrapper> defaultFilterWrappers = request == null + ? new ArrayList<FileUtils.FilterWrapper>( 1 ) + : new ArrayList<FileUtils.FilterWrapper>( request.getDelimiters().size() + 1 ); + + if ( getLogger().isDebugEnabled() ) + { + getLogger().debug( "properties used " + filterProperties ); + } + + final ValueSource propertiesValueSource = new PropertiesBasedValueSource( filterProperties ); + + if ( request != null ) + { + FileUtils.FilterWrapper wrapper = + new Wrapper( request.getDelimiters(), request.getMavenProject(), request.getMavenSession(), + propertiesValueSource, request.getProjectStartExpressions(), request.getEscapeString(), + request.isEscapeWindowsPaths(), request.isSupportMultiLineFiltering() ); + + defaultFilterWrappers.add( wrapper ); + } + + return defaultFilterWrappers; + } + + /** + * default visibility only for testing reason ! + */ + void loadProperties( Properties filterProperties, File basedir, List<String> propertiesFilePaths, Properties baseProps ) + throws MavenFilteringException + { + if ( propertiesFilePaths != null ) + { + Properties workProperties = new Properties(); + workProperties.putAll( baseProps ); + + for ( String filterFile : propertiesFilePaths ) + { + if ( StringUtils.isEmpty(filterFile) ) + { + // skip empty file name + continue; + } + try + { + File propFile = FileUtils.resolveFile( basedir, filterFile ); + Properties properties = PropertyUtils.loadPropertyFile( propFile, workProperties ); + filterProperties.putAll( properties ); + workProperties.putAll( properties ); + } + catch ( IOException e ) + { + throw new MavenFilteringException( "Error loading property file '" + filterFile + "'", e ); + } + } + } + } + + private static final class Wrapper + extends FileUtils.FilterWrapper + { + + private LinkedHashSet<String> delimiters; + + private MavenProject project; + + private ValueSource propertiesValueSource; + + private List<String> projectStartExpressions; + + private String escapeString; + + private boolean escapeWindowsPaths; + + private final MavenSession mavenSession; + + private boolean supportMultiLineFiltering; + + Wrapper( LinkedHashSet<String> delimiters, MavenProject project, MavenSession mavenSession, + ValueSource propertiesValueSource, List<String> projectStartExpressions, String escapeString, + boolean escapeWindowsPaths, boolean supportMultiLineFiltering ) + { + super(); + this.delimiters = delimiters; + this.project = project; + this.mavenSession = mavenSession; + this.propertiesValueSource = propertiesValueSource; + this.projectStartExpressions = projectStartExpressions; + this.escapeString = escapeString; + this.escapeWindowsPaths = escapeWindowsPaths; + this.supportMultiLineFiltering = supportMultiLineFiltering; + } + + public Reader getReader( Reader reader ) + { + MultiDelimiterStringSearchInterpolator interpolator = new MultiDelimiterStringSearchInterpolator(); + interpolator.setDelimiterSpecs( delimiters ); + + RecursionInterceptor ri = null; + if ( projectStartExpressions != null && !projectStartExpressions.isEmpty() ) + { + ri = new PrefixAwareRecursionInterceptor( projectStartExpressions, true ); + } + else + { + ri = new SimpleRecursionInterceptor(); + } + + interpolator.addValueSource( propertiesValueSource ); + + if ( project != null ) + { + interpolator.addValueSource( new PrefixedObjectValueSource( projectStartExpressions, project, true ) ); + } + + if ( mavenSession != null ) + { + interpolator.addValueSource( new PrefixedObjectValueSource( "session", mavenSession ) ); + + final Settings settings = mavenSession.getSettings(); + if ( settings != null ) + { + interpolator.addValueSource( new PrefixedObjectValueSource( "settings", settings ) ); + interpolator.addValueSource( + new SingleResponseValueSource( "localRepository", settings.getLocalRepository() ) ); + } + } + + interpolator.setEscapeString( escapeString ); + + if ( escapeWindowsPaths ) + { + interpolator.addPostProcessor( new InterpolationPostProcessor() + { + public Object execute( String expression, Object value ) + { + if ( value instanceof String ) + { + return FilteringUtils.escapeWindowsPath( (String) value ); + } + + return value; + } + } ); + } + + MultiDelimiterInterpolatorFilterReaderLineEnding filterReader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( reader, interpolator, supportMultiLineFiltering ); + filterReader.setRecursionInterceptor( ri ); + filterReader.setDelimiterSpecs( delimiters ); + + filterReader.setInterpolateWithPrefixPattern( false ); + filterReader.setEscapeString( escapeString ); + + return filterReader; + } + + } +} Added: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java?rev=1631747&view=auto ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java (added) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java Tue Oct 14 13:26:08 2014 @@ -0,0 +1,75 @@ +package org.apache.maven.shared.filtering; + + +/* + * 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. + */ + +import java.util.List; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.utils.io.FileUtils; + +public interface DefaultFilterInfo { + /** + * Will return the default FileUtils.FilterWrappers. + * <p/> + * <ul> + * <li>interpolate with token ${} and values from sysProps, project.properties, filters and project filters.</li> + * <li>interpolate with token @ @ and values from sysProps, project.properties, filters and project filters.</li> + * <li>interpolate with token ${} and values from mavenProject interpolation.</li> + * <li>interpolation with token @ @ and values from mavenProject interpolation</li> + * </ul> + * <b>This method is now deprecated and no escape mechanism will be used.</b> + * + * @param mavenProject + * @param filters {@link java.util.List} of properties file + * @return {@link java.util.List} of FileUtils.FilterWrapper + * @deprecated use {@link #getDefaultFilterWrappers(org.apache.maven.project.MavenProject, java.util.List, boolean, org.apache.maven.execution.MavenSession, org.apache.maven.shared.filtering.MavenResourcesExecution)} + */ + List<FileUtils.FilterWrapper> getDefaultFilterWrappers(MavenProject mavenProject, List<String> filters, + boolean escapedBackslashesInFilePath, + MavenSession mavenSession) + throws MavenFilteringException; + + /** + * @param mavenProject + * @param filters + * @param escapedBackslashesInFilePath + * @param mavenSession + * @param mavenResourcesExecution + * @return {@link java.util.List} of FileUtils.FilterWrapper + * @throws org.apache.maven.shared.filtering.MavenFilteringException + * @since 1.0-beta-2 + */ + List<FileUtils.FilterWrapper> getDefaultFilterWrappers(MavenProject mavenProject, List<String> filters, + boolean escapedBackslashesInFilePath, + MavenSession mavenSession, + MavenResourcesExecution mavenResourcesExecution) + throws MavenFilteringException; + + /** + * @param request + * @return {@link java.util.List} of FileUtils.FilterWrapper + * @throws org.apache.maven.shared.filtering.MavenFilteringException + * @since 1.0-beta-3 + */ + List<FileUtils.FilterWrapper> getDefaultFilterWrappers(AbstractMavenFilteringRequest request) + throws MavenFilteringException; +} Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java?rev=1631747&r1=1631746&r2=1631747&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java (original) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java Tue Oct 14 13:26:08 2014 @@ -53,7 +53,7 @@ import org.sonatype.plexus.build.increme * role-hint="default" */ public class DefaultMavenFileFilter - extends AbstractLogEnabled + extends BaseFilter implements MavenFileFilter { @@ -130,275 +130,4 @@ public class DefaultMavenFileFilter } } - - /** - * @see org.apache.maven.shared.filtering.MavenFileFilter#getDefaultFilterWrappers(org.apache.maven.project.MavenProject, java.util.List, boolean, org.apache.maven.execution.MavenSession) - * @deprecated - */ - public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final MavenProject mavenProject, - List<String> filters, - final boolean escapedBackslashesInFilePath, - MavenSession mavenSession ) - throws MavenFilteringException - { - return getDefaultFilterWrappers( mavenProject, filters, escapedBackslashesInFilePath, mavenSession, null ); - } - - - public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final MavenProject mavenProject, List<String> filters, - final boolean escapedBackslashesInFilePath, - MavenSession mavenSession, - MavenResourcesExecution mavenResourcesExecution ) - throws MavenFilteringException - { - - MavenResourcesExecution mre = - mavenResourcesExecution == null ? new MavenResourcesExecution() : mavenResourcesExecution.copyOf(); - - mre.setMavenProject( mavenProject ); - mre.setMavenSession( mavenSession ); - mre.setFilters( filters ); - mre.setEscapedBackslashesInFilePath( escapedBackslashesInFilePath ); - - return getDefaultFilterWrappers( mre ); - - } - - public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final AbstractMavenFilteringRequest req ) - throws MavenFilteringException - { - // backup values - boolean supportMultiLineFiltering = req.isSupportMultiLineFiltering(); - - // compensate for null parameter value. - final AbstractMavenFilteringRequest request = req == null ? new MavenFileFilterRequest() : req; - - request.setSupportMultiLineFiltering( supportMultiLineFiltering ); - - // Here we build some properties which will be used to read some properties files - // to interpolate the expression ${ } in this properties file - - // Take a copy of filterProperties to ensure that evaluated filterTokens are not propagated - // to subsequent filter files. Note: this replicates current behaviour and seems to make sense. - - final Properties baseProps = new Properties(); - - // Project properties - if ( request.getMavenProject() != null ) - { - baseProps.putAll( request.getMavenProject().getProperties() == null - ? Collections.emptyMap() - : request.getMavenProject().getProperties() ); - } - // TODO this is NPE free but do we consider this as normal - // or do we have to throw an MavenFilteringException with mavenSession cannot be null - if ( request.getMavenSession() != null ) - { - // execution properties wins - baseProps.putAll( request.getMavenSession().getExecutionProperties() ); - } - - // now we build properties to use for resources interpolation - - final Properties filterProperties = new Properties(); - - File basedir = request.getMavenProject() != null ? request.getMavenProject().getBasedir() : new File( "." ); - - loadProperties( filterProperties, basedir, request.getFileFilters(), baseProps ); - if ( filterProperties.size() < 1 ) - { - filterProperties.putAll( baseProps ); - } - - if ( request.getMavenProject() != null ) - { - if ( request.isInjectProjectBuildFilters() ) - { - @SuppressWarnings( "unchecked" ) - List<String> buildFilters = new ArrayList<String>( request.getMavenProject().getBuild().getFilters() ); - - // JDK-8015656: (coll) unexpected NPE from removeAll - if ( request.getFileFilters() != null ) - { - buildFilters.removeAll( request.getFileFilters() ); - } - - loadProperties( filterProperties, basedir, buildFilters, baseProps ); - } - - // Project properties - filterProperties.putAll( request.getMavenProject().getProperties() == null - ? Collections.emptyMap() - : request.getMavenProject().getProperties() ); - } - if ( request.getMavenSession() != null ) - { - // execution properties wins - filterProperties.putAll( request.getMavenSession().getExecutionProperties() ); - } - - if ( request.getAdditionalProperties() != null ) - { - // additional properties wins - filterProperties.putAll( request.getAdditionalProperties() ); - } - - List<FileUtils.FilterWrapper> defaultFilterWrappers = request == null - ? new ArrayList<FileUtils.FilterWrapper>( 1 ) - : new ArrayList<FileUtils.FilterWrapper>( request.getDelimiters().size() + 1 ); - - if ( getLogger().isDebugEnabled() ) - { - getLogger().debug( "properties used " + filterProperties ); - } - - final ValueSource propertiesValueSource = new PropertiesBasedValueSource( filterProperties ); - - if ( request != null ) - { - FileUtils.FilterWrapper wrapper = - new Wrapper( request.getDelimiters(), request.getMavenProject(), request.getMavenSession(), - propertiesValueSource, request.getProjectStartExpressions(), request.getEscapeString(), - request.isEscapeWindowsPaths(), request.isSupportMultiLineFiltering() ); - - defaultFilterWrappers.add( wrapper ); - } - - return defaultFilterWrappers; - } - - /** - * default visibility only for testing reason ! - */ - void loadProperties( Properties filterProperties, File basedir, List<String> propertiesFilePaths, Properties baseProps ) - throws MavenFilteringException - { - if ( propertiesFilePaths != null ) - { - Properties workProperties = new Properties(); - workProperties.putAll( baseProps ); - - for ( String filterFile : propertiesFilePaths ) - { - if ( StringUtils.isEmpty( filterFile ) ) - { - // skip empty file name - continue; - } - try - { - File propFile = FileUtils.resolveFile( basedir, filterFile ); - Properties properties = PropertyUtils.loadPropertyFile( propFile, workProperties ); - filterProperties.putAll( properties ); - workProperties.putAll( properties ); - } - catch ( IOException e ) - { - throw new MavenFilteringException( "Error loading property file '" + filterFile + "'", e ); - } - } - } - } - - private static final class Wrapper - extends FileUtils.FilterWrapper - { - - private LinkedHashSet<String> delimiters; - - private MavenProject project; - - private ValueSource propertiesValueSource; - - private List<String> projectStartExpressions; - - private String escapeString; - - private boolean escapeWindowsPaths; - - private final MavenSession mavenSession; - - private boolean supportMultiLineFiltering; - - Wrapper( LinkedHashSet<String> delimiters, MavenProject project, MavenSession mavenSession, - ValueSource propertiesValueSource, List<String> projectStartExpressions, String escapeString, - boolean escapeWindowsPaths, boolean supportMultiLineFiltering ) - { - super(); - this.delimiters = delimiters; - this.project = project; - this.mavenSession = mavenSession; - this.propertiesValueSource = propertiesValueSource; - this.projectStartExpressions = projectStartExpressions; - this.escapeString = escapeString; - this.escapeWindowsPaths = escapeWindowsPaths; - this.supportMultiLineFiltering = supportMultiLineFiltering; - } - - public Reader getReader( Reader reader ) - { - MultiDelimiterStringSearchInterpolator interpolator = new MultiDelimiterStringSearchInterpolator(); - interpolator.setDelimiterSpecs( delimiters ); - - RecursionInterceptor ri = null; - if ( projectStartExpressions != null && !projectStartExpressions.isEmpty() ) - { - ri = new PrefixAwareRecursionInterceptor( projectStartExpressions, true ); - } - else - { - ri = new SimpleRecursionInterceptor(); - } - - interpolator.addValueSource( propertiesValueSource ); - - if ( project != null ) - { - interpolator.addValueSource( new PrefixedObjectValueSource( projectStartExpressions, project, true ) ); - } - - if ( mavenSession != null ) - { - interpolator.addValueSource( new PrefixedObjectValueSource( "session", mavenSession ) ); - - final Settings settings = mavenSession.getSettings(); - if ( settings != null ) - { - interpolator.addValueSource( new PrefixedObjectValueSource( "settings", settings ) ); - interpolator.addValueSource( - new SingleResponseValueSource( "localRepository", settings.getLocalRepository() ) ); - } - } - - interpolator.setEscapeString( escapeString ); - - if ( escapeWindowsPaths ) - { - interpolator.addPostProcessor( new InterpolationPostProcessor() - { - public Object execute( String expression, Object value ) - { - if ( value instanceof String ) - { - return FilteringUtils.escapeWindowsPath( (String) value ); - } - - return value; - } - } ); - } - - MultiDelimiterInterpolatorFilterReaderLineEnding filterReader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( reader, interpolator, supportMultiLineFiltering ); - filterReader.setRecursionInterceptor( ri ); - filterReader.setDelimiterSpecs( delimiters ); - - filterReader.setInterpolateWithPrefixPattern( false ); - filterReader.setEscapeString( escapeString ); - - return filterReader; - } - - } - } Added: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenStreamFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenStreamFilter.java?rev=1631747&view=auto ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenStreamFilter.java (added) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenStreamFilter.java Tue Oct 14 13:26:08 2014 @@ -0,0 +1,162 @@ +package org.apache.maven.shared.filtering; + +/* + * 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. + */ + +import java.io.*; +import java.util.*; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper; +import org.apache.maven.shared.utils.io.IOUtil; +import org.sonatype.plexus.build.incremental.BuildContext; + +/** + * @author Olivier Lamy + * + * @plexus.component role="org.apache.maven.shared.filtering.MavenFileFilter" + * role-hint="default" + */ +public class DefaultMavenStreamFilter + extends BaseFilter + implements MavenStreamFilter +{ + + /** + * @plexus.requirement + */ + private BuildContext buildContext; + + public InputStream filter( InputStream from, boolean filtering, MavenProject mavenProject, List<String> filters, + boolean escapedBackslashesInFilePath, String encoding, MavenSession mavenSession ) + throws MavenFilteringException + { + MavenResourcesExecution mre = new MavenResourcesExecution(); + mre.setMavenProject( mavenProject ); + mre.setFileFilters( filters ); + mre.setEscapeWindowsPaths( escapedBackslashesInFilePath ); + mre.setMavenSession( mavenSession ); + mre.setInjectProjectBuildFilters( true ); + + List<FilterWrapper> filterWrappers = getDefaultFilterWrappers( mre ); + return filter(from, filtering, filterWrappers, encoding); + } + + + public InputStream filter( MavenStreamFilterRequest mavenFileFilterRequest ) + throws MavenFilteringException + { + List<FilterWrapper> filterWrappers = getDefaultFilterWrappers( mavenFileFilterRequest ); + + return filter(mavenFileFilterRequest.getFrom(), + mavenFileFilterRequest.isFiltering(), filterWrappers, mavenFileFilterRequest.getEncoding()); + } + + + public InputStream filter( InputStream from,boolean filtering, List<FilterWrapper> filterWrappers, + String encoding ) + throws MavenFilteringException + { + // overwrite forced to false to preserve backward comp + return filter( from, filtering, filterWrappers, encoding, false ); + } + + + public InputStream filter( InputStream from, boolean filtering, List<FilterWrapper> filterWrappers, + String encoding, boolean overwrite ) + throws MavenFilteringException + { + try + { + if ( filtering ) + { + FilterWrapper[] wrappers = filterWrappers.toArray( + new FilterWrapper[filterWrappers.size()] ); + return filterWrap(from, encoding, wrappers, false); + } + else + { + return filterWrap(from, encoding, new FilterWrapper[0], overwrite); + } + + } + catch ( IOException e ) + { + throw new MavenFilteringException( e.getMessage(), e ); + } + + } + + + public static InputStream filterWrap(@Nonnull InputStream from, @Nullable String encoding, + @Nullable FilterWrapper[] wrappers, boolean overwrite) + throws IOException + { + if ( wrappers != null && wrappers.length > 0 ) + { + // buffer so it isn't reading a byte at a time! + Reader fileReader = null; + Writer fileWriter = null; + try + { + if ( encoding == null || encoding.length() < 1 ) + { + fileReader = new BufferedReader( new InputStreamReader(from) ); + fileWriter = new FileWriter( to ); + } + else + { + FileInputStream instream = new FileInputStream( from ); + + FileOutputStream outstream = new FileOutputStream( to ); + + fileReader = new BufferedReader( new InputStreamReader( instream, encoding ) ); + + fileWriter = new OutputStreamWriter( outstream, encoding ); + } + + Reader reader = fileReader; + for ( FilterWrapper wrapper : wrappers ) + { + reader = wrapper.getReader( reader ); + } + + IOUtil.copy(reader, fileWriter); + } + finally + { + IOUtil.close( fileReader ); + IOUtil.close( fileWriter ); + } + } + else + { + if ( to.lastModified() < from.lastModified() || overwrite ) + { + filterWrap(from, to); + } + } + } + + +} Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java?rev=1631747&r1=1631746&r2=1631747&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java (original) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java Tue Oct 14 13:26:08 2014 @@ -30,7 +30,7 @@ import java.util.List; * @author Olivier Lamy * */ -public interface MavenFileFilter +public interface MavenFileFilter extends DefaultFilterInfo { /** @@ -81,51 +81,4 @@ public interface MavenFileFilter void copyFile( File from, final File to, boolean filtering, List<FileUtils.FilterWrapper> filterWrappers, String encoding, boolean overwrite ) throws MavenFilteringException; - - /** - * Will return the default FileUtils.FilterWrappers. - * <p/> - * <ul> - * <li>interpolate with token ${} and values from sysProps, project.properties, filters and project filters.</li> - * <li>interpolate with token @ @ and values from sysProps, project.properties, filters and project filters.</li> - * <li>interpolate with token ${} and values from mavenProject interpolation.</li> - * <li>interpolation with token @ @ and values from mavenProject interpolation</li> - * </ul> - * <b>This method is now deprecated and no escape mechanism will be used.</b> - * - * @param mavenProject - * @param filters {@link List} of properties file - * @return {@link List} of FileUtils.FilterWrapper - * @deprecated use {@link #getDefaultFilterWrappers(MavenProject, List, boolean, MavenSession, MavenResourcesExecution)} - */ - List<FileUtils.FilterWrapper> getDefaultFilterWrappers( MavenProject mavenProject, List<String> filters, - boolean escapedBackslashesInFilePath, - MavenSession mavenSession ) - throws MavenFilteringException; - - /** - * @param mavenProject - * @param filters - * @param escapedBackslashesInFilePath - * @param mavenSession - * @param mavenResourcesExecution - * @return {@link List} of FileUtils.FilterWrapper - * @throws MavenFilteringException - * @since 1.0-beta-2 - */ - List<FileUtils.FilterWrapper> getDefaultFilterWrappers( MavenProject mavenProject, List<String> filters, - boolean escapedBackslashesInFilePath, - MavenSession mavenSession, - MavenResourcesExecution mavenResourcesExecution ) - throws MavenFilteringException; - - /** - * @param request - * @return {@link List} of FileUtils.FilterWrapper - * @throws MavenFilteringException - * @since 1.0-beta-3 - */ - List<FileUtils.FilterWrapper> getDefaultFilterWrappers( AbstractMavenFilteringRequest request ) - throws MavenFilteringException; - } Added: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilter.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilter.java?rev=1631747&view=auto ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilter.java (added) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilter.java Tue Oct 14 13:26:08 2014 @@ -0,0 +1,87 @@ +package org.apache.maven.shared.filtering; + +/* + * 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. + */ + +import java.io.File; +import java.io.InputStream; +import java.util.List; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.utils.io.FileUtils; + +/** + * @author Olivier Lamy + * @author Kristian Rosenvold + */ +public interface MavenStreamFilter extends DefaultFilterInfo +{ + + /** + * Will copy a file with some filtering using defaultFilterWrappers. + * + * @param source file to copy/filter + * @param filtering enable or not filering + * @param mavenProject the mavenproject + * @param filters {@link java.util.List} of String which are path to a Property file + * @return an input stream that applies the filter + * @throws org.apache.maven.shared.filtering.MavenFilteringException + * @see #getDefaultFilterWrappers(org.apache.maven.project.MavenProject, java.util.List, boolean, org.apache.maven.execution.MavenSession) + */ + InputStream filter(InputStream source, boolean filtering, MavenProject mavenProject, List<String> filters, + boolean escapedBackslashesInFilePath, String encoding, MavenSession mavenSession) + throws MavenFilteringException; + + /** + * @param mavenStreamFilterRequest The filter request + * @throws org.apache.maven.shared.filtering.MavenFilteringException + * @return an input stream that applies the filter + * @since 1.0-beta-3 + */ + InputStream filter(MavenStreamFilterRequest mavenStreamFilterRequest) + throws MavenFilteringException; + + /** + * @param source The source stream to filter + * @param filtering + * @param filterWrappers {@link java.util.List} of FileUtils.FilterWrapper + * @return an input stream that applies the filter + * @throws org.apache.maven.shared.filtering.MavenFilteringException + */ + InputStream filter(InputStream source, boolean filtering, List<FileUtils.FilterWrapper> filterWrappers, + String encoding) + throws MavenFilteringException; + + + /** + * @param source The source stream to filter + * @param filtering + * @param filterWrappers + * @param encoding + * @param overwrite + * @throws org.apache.maven.shared.filtering.MavenFilteringException + * @return an input stream that applies the filter + * @since 1.0-beta-2 + */ + InputStream filter(InputStream source, boolean filtering, List<FileUtils.FilterWrapper> filterWrappers, + String encoding, boolean overwrite) + throws MavenFilteringException; + +} Added: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilterRequest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilterRequest.java?rev=1631747&view=auto ============================================================================== --- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilterRequest.java (added) +++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenStreamFilterRequest.java Tue Oct 14 13:26:08 2014 @@ -0,0 +1,80 @@ +package org.apache.maven.shared.filtering; + +/* + * 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. + */ + +import java.io.File; +import java.io.InputStream; +import java.util.List; +import java.util.Properties; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.MavenProject; + +/** + * @author Olivier Lamy + * @since 1.0-beta-3 + */ +public class MavenStreamFilterRequest + extends AbstractMavenFilteringRequest +{ + + private InputStream from; + + private boolean filtering; + + public MavenStreamFilterRequest() + { + // nothing + } + + public MavenStreamFilterRequest(InputStream from, boolean filtering, MavenProject mavenProject, + List<String> filters, + boolean escapedBackslashesInFilePath, String encoding, MavenSession mavenSession, + Properties additionalProperties) + { + super( mavenProject, filters, encoding, mavenSession ); + this.from = from; + this.filtering = filtering; + setAdditionalProperties( additionalProperties ); + setEscapeWindowsPaths( escapedBackslashesInFilePath ); + } + + + public InputStream getFrom() + { + return from; + } + + public void setFrom( InputStream from ) + { + this.from = from; + } + + public boolean isFiltering() + { + return filtering; + } + + public void setFiltering( boolean filtering ) + { + this.filtering = filtering; + } + +}