Author: krosenvold Date: Tue Oct 14 13:28:26 2014 New Revision: 1631749 URL: http://svn.apache.org/r1631749 Log: Revert accidental commit "Aded stuff"
Removed: 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 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=1631749&r1=1631748&r2=1631749&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:28:26 2014 @@ -53,7 +53,7 @@ import org.sonatype.plexus.build.increme * role-hint="default" */ public class DefaultMavenFileFilter - extends BaseFilter + extends AbstractLogEnabled implements MavenFileFilter { @@ -130,4 +130,275 @@ 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; + } + + } + } 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=1631749&r1=1631748&r2=1631749&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:28:26 2014 @@ -30,7 +30,7 @@ import java.util.List; * @author Olivier Lamy * */ -public interface MavenFileFilter extends DefaultFilterInfo +public interface MavenFileFilter { /** @@ -81,4 +81,51 @@ public interface MavenFileFilter extends 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; + }