This is an automated email from the ASF dual-hosted git repository. ptahchiev pushed a commit to branch ARCHETYPE-548 in repository https://gitbox.apache.org/repos/asf/maven-archetype.git
commit 10dbef72a2b1d37ffa959b2935b2df20675723dc Author: petar.tahchiev <[email protected]> AuthorDate: Tue Oct 29 09:39:17 2019 +0200 ARCHETYPE-548 Filter files with no extension. This commit introduces a new property (archetype.filteredFileNames) which allows users to specify not only filtered file extensions but also comma-separated file-names of files that do not have any extension. --- .../maven/archetype/ArchetypeCreationRequest.java | 24 ++++++++++--- .../apache/maven/archetype/common/Constants.java | 2 ++ .../archetype/creator/FilesetArchetypeCreator.java | 39 ++++++++++++++-------- .../mojos/CreateArchetypeFromProjectMojo.java | 39 ++++++++++++++++++++-- 4 files changed, 84 insertions(+), 20 deletions(-) diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java index c24b1b6..0fed856 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java @@ -41,7 +41,9 @@ public class ArchetypeCreationRequest private List<String> languages = new ArrayList<>(); - private List<String> filtereds = new ArrayList<>(); + private List<String> filteredFileNames = new ArrayList<>(); + + private List<String> filteredFileExtensions = new ArrayList<>(); private String defaultEncoding = "UTF-8"; @@ -133,14 +135,26 @@ public class ArchetypeCreationRequest return this; } - public List<String> getFiltereds() + public List<String> getFilteredFileNames() + { + return filteredFileNames; + } + + public ArchetypeCreationRequest setFilteredFileNames( List<String> filteredFileNames ) + { + this.filteredFileNames = filteredFileNames; + + return this; + } + + public List<String> getFilteredFileExtensions() { - return filtereds; + return filteredFileExtensions; } - public ArchetypeCreationRequest setFiltereds( List<String> filtereds ) + public ArchetypeCreationRequest setFilteredFileExtensions( List<String> filteredFileExtensions ) { - this.filtereds = filtereds; + this.filteredFileExtensions = filteredFileExtensions; return this; } diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java index db5ce46..0b0cc44 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java @@ -46,6 +46,8 @@ public interface Constants String ARTIFACT_ID = "artifactId"; + String ARCHETYPE_FILTERED_FILENAMES = "archetype.filteredFileNames"; + String ARCHETYPE_FILTERED_EXTENSIONS = "archetype.filteredExtensions"; String ARCHETYPE_LANGUAGES = "archetype.languages"; diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java index 1148f34..be55548 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java @@ -108,7 +108,8 @@ public class FilesetArchetypeCreator { MavenProject project = request.getProject(); List<String> languages = request.getLanguages(); - List<String> filtereds = request.getFiltereds(); + List<String> filteredFileNames = request.getFilteredFileNames(); + List<String> filteredFileExtensions = request.getFilteredFileExtensions(); String defaultEncoding = request.getDefaultEncoding(); boolean preserveCData = request.isPreserveCData(); boolean keepParent = request.isKeepParent(); @@ -203,7 +204,8 @@ public class FilesetArchetypeCreator } } - List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, filtereds, defaultEncoding ); + List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, + filteredFileNames, filteredFileExtensions, defaultEncoding ); getLogger().debug( "Resolved filesets for " + archetypeDescriptor.getName() ); archetypeDescriptor.setFileSets( filesets ); @@ -229,7 +231,8 @@ public class FilesetArchetypeCreator ModuleDescriptor moduleDescriptor = createModule( reverseProperties, rootArtifactId, moduleId, packageName, FileUtils.resolveFile( basedir, moduleId ), - new File( archetypeFilesDirectory, moduleIdDirectory ), languages, filtereds, + new File( archetypeFilesDirectory, moduleIdDirectory ), + languages, filteredFileNames, filteredFileExtensions, defaultEncoding, preserveCData, keepParent ); archetypeDescriptor.addModule( moduleDescriptor ); @@ -985,7 +988,9 @@ public class FilesetArchetypeCreator private ModuleDescriptor createModule( Properties reverseProperties, String rootArtifactId, String moduleId, String packageName, File basedir, File archetypeFilesDirectory, - List<String> languages, List<String> filtereds, String defaultEncoding, + List<String> languages, List<String> filteredFileNames, + List<String> filteredFileExtensions, + String defaultEncoding, boolean preserveCData, boolean keepParent ) throws IOException, XmlPullParserException { @@ -1023,7 +1028,8 @@ public class FilesetArchetypeCreator List<String> fileNames = resolveFileNames( pom, basedir, excludePatterns ); - List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, filtereds, defaultEncoding ); + List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, + filteredFileNames, filteredFileExtensions, defaultEncoding ); getLogger().debug( "Resolved filesets for module " + archetypeDescriptor.getName() ); archetypeDescriptor.setFileSets( filesets ); @@ -1048,8 +1054,9 @@ public class FilesetArchetypeCreator ModuleDescriptor moduleDescriptor = createModule( reverseProperties, rootArtifactId, subModuleId, packageName, FileUtils.resolveFile( basedir, subModuleId ), - FileUtils.resolveFile( archetypeFilesDirectory, subModuleIdDirectory ), languages, - filtereds, defaultEncoding, preserveCData, keepParent ); + FileUtils.resolveFile( archetypeFilesDirectory, subModuleIdDirectory ), + languages, filteredFileNames, + filteredFileExtensions, defaultEncoding, preserveCData, keepParent ); archetypeDescriptor.addModule( moduleDescriptor ); @@ -1370,12 +1377,13 @@ public class FilesetArchetypeCreator } private List<FileSet> resolveFileSets( String packageName, List<String> fileNames, List<String> languages, - List<String> filtereds, String defaultEncoding ) + List<String> filteredFileNames, + List<String> filteredExtensions, String defaultEncoding ) { List<FileSet> resolvedFileSets = new ArrayList<>(); getLogger().debug( - "Resolving filesets with package=" + packageName + ", languages=" + languages + " and extentions=" - + filtereds ); + "Resolving filesets with package=" + packageName + ", languages=" + languages + + ", fileNames=" + filteredFileNames + " and extentions=" + filteredExtensions ); List<String> files = new ArrayList<>( fileNames ); @@ -1389,7 +1397,12 @@ public class FilesetArchetypeCreator getLogger().debug( "Using languages includes " + languageIncludes ); StringBuilder filteredIncludes = new StringBuilder(); - for ( String filtered : filtereds ) + for ( String filtered : filteredFileNames ) + { + filteredIncludes.append( ( ( filteredIncludes.length() == 0 ) ? "" : "," ) + "**/" + filtered ); + } + + for ( String filtered : filteredExtensions ) { filteredIncludes.append( ( ( filteredIncludes.length() == 0 ) ? "" : "," ) + "**/" + ( filtered.startsWith( "." ) ? "" : "*." ) @@ -1718,9 +1731,9 @@ public class FilesetArchetypeCreator List<String> excludes = new ArrayList<>(); for ( String extension : extensions ) - { + { includes.add( "**/*." + extension ); - } + } return createFileSet( excludes, false, filtered, group, includes, defaultEncoding ); } diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java index 68b3aa4..6df89de 100644 --- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java +++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java @@ -117,6 +117,12 @@ public class CreateArchetypeFromProjectMojo private ArchetypeManager manager; /** + * File file names which are checked for project's text files (vs binary files). + */ + @Parameter( property = "archetype.filteredFileNames" ) + private String archetypeFilteredFileNames; + + /** * File extensions which are checked for project's text files (vs binary files). */ @Parameter( property = "archetype.filteredExtentions" ) @@ -247,12 +253,14 @@ public class CreateArchetypeFromProjectMojo configurator.configureArchetypeCreation( project, Boolean.valueOf( interactive ), executionProperties, propertyFile, languages ); - List<String> filtereds = getFilteredExtensions( archetypeFilteredExtentions, propertyFile ); + List<String> filteredFileNames = getFilteredFileNames( archetypeFilteredFileNames, propertyFile ); + List<String> filteredFileExtensions = getFilteredExtensions( archetypeFilteredExtentions, propertyFile ); ArchetypeCreationRequest request = new ArchetypeCreationRequest().setDefaultEncoding( defaultEncoding ).setProject( project ) /* Used when in interactive mode */.setProperties( properties ).setLanguages( languages ) - /* Should be refactored to use some ant patterns */.setFiltereds( filtereds ) + .setFilteredFileNames( filteredFileNames ) + /* Should be refactored to use some ant patterns */.setFilteredFileExtensions( filteredFileExtensions ) /* This should be correctly handled */.setPreserveCData( preserveCData ).setKeepParent( keepParent ).setPartialArchetype( partialArchetype ) .setLocalRepository( localRepository ).setProjectBuildingRequest( session.getProjectBuildingRequest() ) @@ -293,6 +301,33 @@ public class CreateArchetypeFromProjectMojo } } + private List<String> getFilteredFileNames( String archetypeFilteredFileNames, File propertyFile ) throws IOException + { + List<String> filteredFileNames = new ArrayList<>(); + + if ( StringUtils.isNotEmpty( archetypeFilteredFileNames ) ) + { + filteredFileNames.addAll( Arrays.asList( StringUtils.split( archetypeFilteredFileNames, "," ) ) ); + + getLog().debug( "Found in command line fileNames = " + filteredFileNames ); + } + + if ( filteredFileNames.isEmpty() && propertyFile != null && propertyFile.exists() ) + { + Properties properties = PropertyUtils.loadProperties( propertyFile ); + + String fileNames = properties.getProperty( Constants.ARCHETYPE_FILTERED_FILENAMES ); + if ( StringUtils.isNotEmpty( fileNames ) ) + { + filteredFileNames.addAll( Arrays.asList( fileNames.split( "," ) ) ); + } + + getLog().debug( "Found in propertyFile " + propertyFile.getName() + " fileNames = " + filteredFileNames ); + } + + return filteredFileNames; + } + private List<String> getFilteredExtensions( String archetypeFilteredExtentions, File propertyFile ) throws IOException { List<String> filteredExtensions = new ArrayList<>();
