[ 
http://jira.codehaus.org/browse/ARCHETYPE-371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=265316#action_265316
 ] 

Fred Bricon commented on ARCHETYPE-371:
---------------------------------------

After a bit of hacking, I managed to get the following results :

{noformat}
[fbricon@fbricon Temp]$ mvn 
org.apache.maven.plugins:maven-archetype-plugin:2.1-SNAPSHOT:generate 
-Dfilter=jee
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-archetype-plugin:2.1-SNAPSHOT:generate (default-cli) @ 
standalone-pom >>>
[INFO] 
[INFO] <<< maven-archetype-plugin:2.1-SNAPSHOT:generate (default-cli) @ 
standalone-pom <<<
[INFO] 
[INFO] --- maven-archetype-plugin:2.1-SNAPSHOT:generate (default-cli) @ 
standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart 
(org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> ear-jee5 (-)
2: remote -> ejb-jee5 (-)
3: remote -> webapp-jee5 (-)
4: remote -> jee6-basic-archetype (-)
5: remote -> jee6-minimal-archetype (-)
6: remote -> jee6-sandbox-archetype (-)
7: remote -> jee6-sandbox-demo-archetype (-)
8: remote -> jee6-servlet-basic-archetype (-)
9: remote -> jee6-servlet-demo-archetype (-)
10: remote -> jee6-servlet-minimal-archetype (-)
11: remote -> jee6-servlet-sandbox-archetype (-)
12: remote -> imixs-workflow-jee-archetype (Imixs Workflow JEE Archetype 
provides a JEE Sample Application)
13: remote -> weld-jsf-jee (Weld archetype for creating a Java EE 6 application 
using JSF 2.0, CDI 1.0, EJB 3.1 and JPA 2.0 (persistence unit included))
14: remote -> weld-jsf-jee-minimal (Weld archetype for creating a minimal Java 
EE 6 application using JSF 2.0, CDI 1.0 and EJB 3.1 (persistence unit not 
included))
Choose a number: : 13
Downloading: 
http://repo1.maven.org/maven2/org/jboss/weld/archetypes/weld-jsf-jee/1.0.0-BETA1/weld-jsf-jee-1.0.0-BETA1.jar
Downloaded: 
http://repo1.maven.org/maven2/org/jboss/weld/archetypes/weld-jsf-jee/1.0.0-BETA1/weld-jsf-jee-1.0.0-BETA1.jar
 (138 KB at 121.2 KB/sec)
Downloading: 
http://repo1.maven.org/maven2/org/jboss/weld/archetypes/weld-jsf-jee/1.0.0-BETA1/weld-jsf-jee-1.0.0-BETA1.pom
Downloaded: 
http://repo1.maven.org/maven2/org/jboss/weld/archetypes/weld-jsf-jee/1.0.0-BETA1/weld-jsf-jee-1.0.0-BETA1.pom
 (2 KB at 1.9 KB/sec)
Define value for property 'groupId': : foo.bar
Define value for property 'artifactId': : weldy
[INFO] Using property: version = 1.0.0-SNAPSHOT
Define value for property 'package':  foo.bar: : 
Confirm properties configuration:
groupId: foo.bar
artifactId: weldy
version: 1.0.0-SNAPSHOT
package: foo.bar
 Y: : 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 31.635s
[INFO] Finished at: Sun May 01 00:09:10 CEST 2011
[INFO] Final Memory: 6M/245M
[INFO] ------------------------------------------------------------------------

{noformat}

Basically, the code in org.apache.maven.archetype.ui.DefaultArchetypeSelector 
looks like :

{noformat}
    public void selectArchetype( ArchetypeGenerationRequest request, Boolean 
interactiveMode, String catalogs )
        throws ArchetypeNotDefined, UnknownArchetype, UnknownGroup, 
IOException, PrompterException,
        ArchetypeSelectionFailure
    {
        ...
        Map<String, List<Archetype>> archetypes = 
getFilteredArchetypes(getArchetypesByCatalog( catalogs ), 
                                                                                
                request.getFilter() );
        ...
{noformat}

{noformat}
    private Map<String, List<Archetype>> getFilteredArchetypes( Map<String, 
List<Archetype>> archetypesByCatalog, 
                                                                                
                                        final String filter) {
        
        if (StringUtils.isNotEmpty(filter) && !archetypesByCatalog.isEmpty()) 
        {
                for (Map.Entry<String, List<Archetype>> entry : 
archetypesByCatalog.entrySet()) 
                {
                CollectionUtils.filter(entry.getValue(), new Predicate() 
                {
                                        public boolean evaluate(Object 
archetype) 
                                        {
                                                return ((Archetype) 
archetype).getArtifactId().contains(filter);
                                        }
                                });
                }
        }
                return archetypesByCatalog;
        }
{noformat}

This implementation has a minimum impact on the code. However, doing the actual 
filtering would probably be more appropriate directly in the ArchetypeCatalog 
class, but that would require more code change. It's debatable.

If this implementation suits you, I can add some test cases and attach a patch 
here. You tell me :-)



> Add a command line argument to filter/limit the archetypes returned by mvn 
> archetype:generate
> ---------------------------------------------------------------------------------------------
>
>                 Key: ARCHETYPE-371
>                 URL: http://jira.codehaus.org/browse/ARCHETYPE-371
>             Project: Maven Archetype
>          Issue Type: New Feature
>          Components: Plugin
>    Affects Versions: 2.0
>         Environment: Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
> Maven home: /usr/local/maven
> Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
> Default locale: fr_FR, platform encoding: UTF-8
> OS name: "linux", version: "2.6.35.12-90.fc14.x86_64", arch: "amd64", family: 
> "unix"
>            Reporter: Fred Bricon
>
> Currently, running mvn archetype:generate returns 390 archetypes, on my 
> machine.
> By default, th window buffer of my terminal isn't set big enough so I can see 
> the first archetypes in the list.
> So, I think it would be really useful to have a CLI arg allowing us to filter 
> the archetypes containing a string.
> Ex: running {code}mvn archetype:generate -Dfilter=webapp{code} would return 
> only the archetypes having webapp in their artifactId.
> What do you think?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to