You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2011/07/05 18:22:24 UTC

svn commit: r1143127 - in /maven/archetype/trunk: archetype-common/src/main/java/org/apache/maven/archetype/ maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/ maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/

Author: olamy
Date: Tue Jul  5 16:22:23 2011
New Revision: 1143127

URL: http://svn.apache.org/viewvc?rev=1143127&view=rev
Log:
[ARCHETYPE-371] Add a command line argument to filter/limit the archetypes returned by mvn archetype:generate. Add a first simple implementation on artifactId contains filer value

Modified:
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java
    maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
    maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java?rev=1143127&r1=1143126&r2=1143127&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeGenerationRequest.java Tue Jul  5 16:22:23 2011
@@ -75,8 +75,14 @@ public class ArchetypeGenerationRequest
 
     private Properties properties = new Properties();
 
+    /**
+     *  @since 2.1
+     */
+    private String filter;
+
     public ArchetypeGenerationRequest()
     {
+        // no op
     }
 
     public ArchetypeGenerationRequest( Archetype archetype )
@@ -329,4 +335,16 @@ public class ArchetypeGenerationRequest
 
         return this;
     }
+
+    public String getFilter()
+    {
+        return filter;
+    }
+
+    public ArchetypeGenerationRequest setFilter( String filter )
+    {
+        this.filter = filter;
+
+        return this;
+    }
 }

Modified: maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java?rev=1143127&r1=1143126&r2=1143127&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java (original)
+++ maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java Tue Jul  5 16:22:23 2011
@@ -158,6 +158,14 @@ public class CreateProjectFromArchetypeM
      */
     private String goals;
 
+
+    /**
+     *  Applying some filter on possible archetype currently artifactId name
+     *  @parameter expression="${filter}"
+     *  @since 2.1
+     */
+    private String filter;
+
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
@@ -170,7 +178,8 @@ public class CreateProjectFromArchetypeM
             .setOutputDirectory( basedir.getAbsolutePath() )
             .setLocalRepository( localRepository )
             .setArchetypeRepository( archetypeRepository )
-            .setRemoteArtifactRepositories( remoteArtifactRepositories );
+            .setRemoteArtifactRepositories( remoteArtifactRepositories )
+            .setFilter( filter );
 
         try
         {

Modified: maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java?rev=1143127&r1=1143126&r2=1143127&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java (original)
+++ maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java Tue Jul  5 16:22:23 2011
@@ -19,6 +19,7 @@ package org.apache.maven.archetype.ui;
  * under the License.
  */
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
 import org.apache.maven.archetype.ArchetypeManager;
 import org.apache.maven.archetype.catalog.Archetype;
@@ -31,12 +32,16 @@ import org.codehaus.plexus.logging.Abstr
 import org.codehaus.plexus.util.StringUtils;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-/** @plexus.component */
+/**
+ * @plexus.component
+ */
 public class DefaultArchetypeSelector
     extends AbstractLogEnabled
     implements ArchetypeSelector
@@ -47,10 +52,14 @@ public class DefaultArchetypeSelector
 
     static final String DEFAULT_ARCHETYPE_ARTIFACTID = "maven-archetype-quickstart";
 
-    /** @plexus.requirement */
+    /**
+     * @plexus.requirement
+     */
     private ArchetypeSelectionQueryer archetypeSelectionQueryer;
 
-    /** @plexus.requirement */
+    /**
+     * @plexus.requirement
+     */
     private ArchetypeManager archetypeManager;
 
     public void selectArchetype( ArchetypeGenerationRequest request, Boolean interactiveMode, String catalogs )
@@ -67,6 +76,12 @@ public class DefaultArchetypeSelector
 
         Map<String, List<Archetype>> archetypes = getArchetypesByCatalog( catalogs );
 
+        if ( org.apache.commons.lang.StringUtils.isNotBlank( request.getFilter() ) )
+        {
+            // applying some filtering depending on filter parameter
+            archetypes = getFilteredArchetypesByCatalog( archetypes, request );
+        }
+
         if ( definition.isDefined() && StringUtils.isEmpty( request.getArchetypeRepository() ) )
         {
             Map.Entry<String, Archetype> found =
@@ -79,13 +94,15 @@ public class DefaultArchetypeSelector
 
                 updateRepository( definition, archetype, catalogKey );
 
-                getLogger().info( "Archetype repository missing. Using the one from " + archetype
-                                      + " found in catalog " + catalogKey );
+                getLogger().info( "Archetype repository missing. Using the one from " + archetype + " found in catalog "
+                                      + catalogKey );
             }
             else
             {
-                getLogger().warn( "Archetype not found in any catalog. Falling back to central repository (http://repo1.maven.org/maven2)." );
-                getLogger().warn( "Use -DarchetypeRepository=<your repository> if archetype's repository is elsewhere." );
+                getLogger().warn(
+                    "Archetype not found in any catalog. Falling back to central repository (http://repo1.maven.org/maven2)." );
+                getLogger().warn(
+                    "Use -DarchetypeRepository=<your repository> if archetype's repository is elsewhere." );
 
                 definition.setRepository( "http://repo1.maven.org/maven2" );
             }
@@ -132,9 +149,9 @@ public class DefaultArchetypeSelector
             // if artifact ID is set to its default, we still prompt to confirm
             if ( definition.getArtifactId() == null )
             {
-                getLogger().info( "No archetype defined. Using " + DEFAULT_ARCHETYPE_ARTIFACTID + " ("
-                    + definition.getGroupId() + ":" + DEFAULT_ARCHETYPE_ARTIFACTID + ":" + definition.getVersion()
-                    + ")" );
+                getLogger().info(
+                    "No archetype defined. Using " + DEFAULT_ARCHETYPE_ARTIFACTID + " (" + definition.getGroupId() + ":"
+                        + DEFAULT_ARCHETYPE_ARTIFACTID + ":" + definition.getVersion() + ")" );
                 definition.setArtifactId( DEFAULT_ARCHETYPE_ARTIFACTID );
             }
 
@@ -159,6 +176,43 @@ public class DefaultArchetypeSelector
         definition.updateRequest( request );
     }
 
+    /**
+     * apply some filtering on archetypes.
+     * currently only on artifactId contains filter
+     *
+     * @param archetypesPerCatalog
+     * @return
+     */
+    private Map<String, List<Archetype>> getFilteredArchetypesByCatalog(
+        Map<String, List<Archetype>> archetypesPerCatalog, ArchetypeGenerationRequest request )
+    {
+        if ( archetypesPerCatalog == null || archetypesPerCatalog.isEmpty() )
+        {
+            return Collections.emptyMap();
+        }
+        Map<String, List<Archetype>> filtered =
+            new LinkedHashMap<String, List<Archetype>>( archetypesPerCatalog.size() );
+
+        for ( Map.Entry<String, List<Archetype>> entry : archetypesPerCatalog.entrySet() )
+        {
+            List<Archetype> archetypes = new ArrayList<Archetype>();
+            for (Archetype archetype : entry.getValue())
+            {
+                if ( org.apache.commons.lang.StringUtils.contains( archetype.getArtifactId(), request.getFilter() ))
+                {
+                    archetypes.add( archetype );
+                }
+            }
+            if (!archetypes.isEmpty())
+            {
+                filtered.put( entry.getKey(), archetypes );
+            }
+        }
+
+        return filtered;
+    }
+
+
     private Map<String, List<Archetype>> getArchetypesByCatalog( String catalogs )
     {
         if ( catalogs == null )
@@ -277,7 +331,7 @@ public class DefaultArchetypeSelector
 
         return null;
     }
-    
+
     private static <K, V> Map.Entry<K, V> newMapEntry( K key, V value )
     {
         Map<K, V> map = new HashMap<K, V>( 1 );