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 );