All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.maven.shared.filtering.MavenResourcesExecution Maven / Gradle / Ivy

Go to download

A component to assist in filtering of resource files with properties from a Maven project.

There is a newer version: 3.1.2-patch1
Show newest version
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.Reader;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Resource;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.utils.io.FileUtils;
import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import org.codehaus.plexus.interpolation.ValueSource;

/**
 * A bean to configure a resources filtering execution.
 *
 * @author Olivier Lamy
 */
public class MavenResourcesExecution
    extends AbstractMavenFilteringRequest
{

    private List resources;

    private File outputDirectory;

    private List nonFilteredFileExtensions;

    private List filterWrappers;

    private File resourcesBaseDirectory;

    private boolean useDefaultFilterWrappers = false;

    private boolean filterFilenames = false;

    private String encoding;

    /**
     * By default files like {@code .gitignore}, {@code .cvsignore} etc. are excluded which means they will not being
     * copied. If you need them for a particular reason you can do that by settings this to {@code false}. This means
     * all files like the following will be copied.
     * 
    *
  • Misc: **/*~, **/#*#, **/.#*, **/%*%, **/._*
  • *
  • CVS: **/CVS, **/CVS/**, **/.cvsignore
  • *
  • RCS: **/RCS, **/RCS/**
  • *
  • SCCS: **/SCCS, **/SCCS/**
  • *
  • VSSercer: **/vssver.scc
  • *
  • MKS: **/project.pj
  • *
  • SVN: **/.svn, **/.svn/**
  • *
  • GNU: **/.arch-ids, **/.arch-ids/**
  • *
  • Bazaar: **/.bzr, **/.bzr/**
  • *
  • SurroundSCM: **/.MySCMServerInfo
  • *
  • Mac: **/.DS_Store
  • *
  • Serena Dimension: **/.metadata, **/.metadata/**
  • *
  • Mercurial: **/.hg, **/.hg/**, **/.hgignore,
  • *
  • GIT: **/.git, **/.gitignore, **/.gitattributes, **/.git/**
  • *
  • Bitkeeper: **/BitKeeper, **/BitKeeper/**, **/ChangeSet, * **/ChangeSet/**
  • *
  • Darcs: **/_darcs, **/_darcs/**, **/.darcsrepo, * **/.darcsrepo/****/-darcs-backup*, **/.darcs-temp-mail *
* * @since 3.1.0 */ private boolean addDefaultExcludes = true; /** * Overwrite existing files even if the destination files are newer. false by default. * * @since 1.0-beta-2 */ private boolean overwrite = false; /** * Copy any empty directories included in the Resources. * * @since 1.0-beta-2 */ private boolean includeEmptyDirs = false; /** * Do not stop trying to filter tokens when reaching EOL. * * @since 1.0 */ private boolean supportMultiLineFiltering; /** * Do nothing. */ public MavenResourcesExecution() { // no op } /** * As we use a Maven project useDefaultFilterWrappers will be set to true. The * {@code useDefaultExcludes} is set to {@code true}. * * @param resources The list of resources. * @param outputDirectory The output directory. * @param mavenProject The maven project. * @param encoding The given encoding. * @param fileFilters The file filters. * @param nonFilteredFileExtensions The extensions which should not being filtered. * @param mavenSession The maven session. */ public MavenResourcesExecution( List resources, File outputDirectory, MavenProject mavenProject, String encoding, List fileFilters, List nonFilteredFileExtensions, MavenSession mavenSession ) { super( mavenProject, fileFilters, mavenSession ); this.encoding = encoding; this.resources = resources; this.outputDirectory = outputDirectory; this.nonFilteredFileExtensions = nonFilteredFileExtensions; this.useDefaultFilterWrappers = true; this.addDefaultExcludes = true; this.resourcesBaseDirectory = mavenProject.getBasedir(); } /** * @param resources The list of resources. * @param outputDirectory The output directory. * @param encoding The given encoding. * @param filterWrappers The list of filter wrappers. * @param resourcesBaseDirectory The resources base directory. * @param nonFilteredFileExtensions The list of extensions which should not being filtered. */ public MavenResourcesExecution( List resources, File outputDirectory, String encoding, List filterWrappers, File resourcesBaseDirectory, List nonFilteredFileExtensions ) { this(); this.resources = resources; this.outputDirectory = outputDirectory; this.filterWrappers = filterWrappers; this.nonFilteredFileExtensions = nonFilteredFileExtensions; this.resourcesBaseDirectory = resourcesBaseDirectory; this.useDefaultFilterWrappers = false; setEncoding( encoding ); } /** * Return the encoding. * * @return Current encoding. */ public String getEncoding() { return encoding; } /** * Set the value for encoding. * * @param encoding Give the new value for encoding. */ public void setEncoding( String encoding ) { this.encoding = encoding; } /** * @return List of {@link org.apache.maven.model.Resource} */ public List getResources() { return resources; } /** * @param resources List of {@link org.apache.maven.model.Resource} */ public void setResources( List resources ) { this.resources = resources; } /** * @return The output directory. */ public File getOutputDirectory() { return outputDirectory; } /** * @param outputDirectory The output directory. */ public void setOutputDirectory( File outputDirectory ) { this.outputDirectory = outputDirectory; } /** * @return List of {@link String} file extensions not to filter */ public List getNonFilteredFileExtensions() { return nonFilteredFileExtensions; } /** * @param nonFilteredFileExtensions List of {@link String} file extensions to not filter */ public void setNonFilteredFileExtensions( List nonFilteredFileExtensions ) { this.nonFilteredFileExtensions = nonFilteredFileExtensions; } /** * @return List of {@link FileUtils.FilterWrapper} */ public List getFilterWrappers() { return filterWrappers; } /** * @param filterWrappers List of {@link FileUtils.FilterWrapper} */ public void setFilterWrappers( List filterWrappers ) { this.filterWrappers = filterWrappers; } /** * @param filterWrapper The filter wrapper which should be added. */ public void addFilterWrapper( FilterWrapper filterWrapper ) { if ( this.filterWrappers == null ) { this.filterWrappers = new ArrayList(); } this.filterWrappers.add( filterWrapper ); } /** * @param valueSource {@link ValueSource} * @param startExp start token like ${ * @param endExp endToken } * @param escapeString The escape string. * @param multiLineFiltering do we support or use filtering on multi lines with start and endtoken on multi lines * @since 1.0 */ public void addFilerWrapperWithEscaping( final ValueSource valueSource, final String startExp, final String endExp, final String escapeString, final boolean multiLineFiltering ) { addFilterWrapper( new FileUtils.FilterWrapper() { public Reader getReader( Reader reader ) { StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( startExp, endExp ); propertiesInterpolator.addValueSource( valueSource ); propertiesInterpolator.setEscapeString( escapeString ); InterpolatorFilterReaderLineEnding interpolatorFilterReader = new InterpolatorFilterReaderLineEnding( reader, propertiesInterpolator, startExp, endExp, multiLineFiltering ); interpolatorFilterReader.setInterpolateWithPrefixPattern( false ); return interpolatorFilterReader; } } ); } /** * @return The resource base directory. */ public File getResourcesBaseDirectory() { return resourcesBaseDirectory; } /** * @param resourcesBaseDirectory Set the resource base directory. */ public void setResourcesBaseDirectory( File resourcesBaseDirectory ) { this.resourcesBaseDirectory = resourcesBaseDirectory; } /** * @return use default filter wrapper */ public boolean isUseDefaultFilterWrappers() { return useDefaultFilterWrappers; } /** * @param useDefaultFilterWrappers {@link #useDefaultFilterWrappers} */ public void setUseDefaultFilterWrappers( boolean useDefaultFilterWrappers ) { this.useDefaultFilterWrappers = useDefaultFilterWrappers; } /** * @return add the default excludes. */ public boolean isAddDefaultExcludes() { return addDefaultExcludes; } /** * @param addDefaultExcludes {@link #addDefaultExcludes} */ public void setAddDefaultExcludes( boolean addDefaultExcludes ) { this.addDefaultExcludes = addDefaultExcludes; } /** * Overwrite existing files even if the destination files are newer. * * @return {@link #overwrite} * @since 1.0-beta-2 */ public boolean isOverwrite() { return overwrite; } /** * Overwrite existing files even if the destination files are newer. * * @param overwrite overwrite true or false. * @since 1.0-beta-2 */ public void setOverwrite( boolean overwrite ) { this.overwrite = overwrite; } /** * Copy any empty directories included in the Resources. * * @return {@link #includeEmptyDirs} * @since 1.0-beta-2 */ public boolean isIncludeEmptyDirs() { return includeEmptyDirs; } /** * Copy any empty directories included in the Resources. * * @param includeEmptyDirs {@code true} to include empty directories, otherwise {@code false}. * @since 1.0-beta-2 */ public void setIncludeEmptyDirs( boolean includeEmptyDirs ) { this.includeEmptyDirs = includeEmptyDirs; } /** * @return {@code true} if filenames are filtered, otherwise {@code false} * @since 1.2 */ public boolean isFilterFilenames() { return filterFilenames; } /** * @param filterFilenames {@code true} if filenames should be filtered, otherwise {@code false} * @since 1.2 */ public void setFilterFilenames( boolean filterFilenames ) { this.filterFilenames = filterFilenames; } /** * @return {@link MavenResourcesExecution} */ public MavenResourcesExecution copyOf() { MavenResourcesExecution mre = new MavenResourcesExecution(); mre.setAdditionalProperties( mre.getAdditionalProperties() ); mre.setEncoding( mre.getEncoding() ); mre.setEscapedBackslashesInFilePath( mre.isEscapedBackslashesInFilePath() ); mre.setEscapeString( mre.getEscapeString() ); mre.setFileFilters( copyList( mre.getFileFilters() ) ); mre.setFilterWrappers( copyList( mre.getFilterWrappers() ) ); mre.setIncludeEmptyDirs( mre.isIncludeEmptyDirs() ); mre.setInjectProjectBuildFilters( mre.isInjectProjectBuildFilters() ); mre.setMavenProject( mre.getMavenProject() ); mre.setMavenSession( mre.getMavenSession() ); mre.setNonFilteredFileExtensions( copyList( mre.getNonFilteredFileExtensions() ) ); mre.setOutputDirectory( mre.getOutputDirectory() ); mre.setOverwrite( mre.isOverwrite() ); mre.setProjectStartExpressions( copyList( mre.getProjectStartExpressions() ) ); mre.setResources( copyList( mre.getResources() ) ); mre.setResourcesBaseDirectory( mre.getResourcesBaseDirectory() ); mre.setUseDefaultFilterWrappers( mre.isUseDefaultFilterWrappers() ); mre.setAddDefaultExcludes( mre.isAddDefaultExcludes() ); mre.setSupportMultiLineFiltering( mre.isSupportMultiLineFiltering() ); return mre; } private List copyList( List lst ) { if ( lst == null ) { return null; } else if ( lst.isEmpty() ) { return new ArrayList(); } else { return new ArrayList( lst ); } } /** {@inheritDoc} */ public boolean isSupportMultiLineFiltering() { return supportMultiLineFiltering; } /** {@inheritDoc} */ public void setSupportMultiLineFiltering( boolean supportMultiLineFiltering ) { this.supportMultiLineFiltering = supportMultiLineFiltering; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy