You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by pt...@apache.org on 2019/10/29 07:41:09 UTC

[maven-archetype] 01/01: ARCHETYPE-548 Filter files with no extension.

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 <pa...@gmail.com>
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<>();