You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ra...@apache.org on 2007/11/27 00:30:41 UTC

svn commit: r598461 - in /maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype: mojos/ ui/

Author: rafale
Date: Mon Nov 26 15:30:32 2007
New Revision: 598461

URL: http://svn.apache.org/viewvc?rev=598461&view=rev
Log:
enchanced selection using multiple sources (-DarchetypeCatalog=local,internal,remote,http://...,file://...)

Modified:
    maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
    maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelectionQueryer.java
    maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelector.java
    maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java
    maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java

Modified: maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java?rev=598461&r1=598460&r2=598461&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java (original)
+++ maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java Mon Nov 26 15:30:32 2007
@@ -94,6 +94,13 @@
     private String archetypeVersion;
 
     /**
+     * The archetype's catalogs.
+     *
+     * @parameter expression="${archetypeCatalog}" default-value="internal"
+     */
+    private String archetypeCatalog;
+
+    /**
      * Local maven repository.
      *
      * @parameter expression="${localRepository}"
@@ -105,11 +112,11 @@
     /**
      * User settings use to check the interactiveMode.
      *
-     * @parameter expression="${settings}"
+     * @parameter expression="${settings.interactiveMode}"
      * @required
      * @readonly
      */
-    private Settings settings;
+    private Boolean interactiveMode;
 
     /** @parameter expression="${basedir}" */
     private File basedir;
@@ -136,9 +143,9 @@
 
         try
         {
-            selector.selectArchetype( request, settings.getInteractiveMode() );
+            selector.selectArchetype( request, interactiveMode, archetypeCatalog );
 
-            configurator.configureArchetype( request, settings.getInteractiveMode(), executionProperties );
+            configurator.configureArchetype( request, interactiveMode, executionProperties );
 
             ArchetypeGenerationResult result = archetype.generateProjectFromArchetype( request );
         }

Modified: maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelectionQueryer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelectionQueryer.java?rev=598461&r1=598460&r2=598461&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelectionQueryer.java (original)
+++ maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelectionQueryer.java Mon Nov 26 15:30:32 2007
@@ -20,6 +20,8 @@
 package org.apache.maven.archetype.ui;
 
 //import org.apache.maven.archetype.common.Archetype;
+import java.util.Map;
+import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.common.ArchetypeDefinition;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 
@@ -29,13 +31,16 @@
 {
     String ROLE = ArchetypeSelectionQueryer.class.getName();
 
+    public Archetype selectArchetype( Map map )
+        throws PrompterException;
+
     boolean confirmSelection( ArchetypeDefinition archetypeDefinition )
         throws
         PrompterException;
 
-    org.apache.maven.archetype.catalog.Archetype selectArchetype( List list )
-        throws
-        PrompterException;
+//    Archetype selectArchetype( List list )
+//        throws
+//        PrompterException;
 
 //    Archetype selectArtifact( List list )
 //        throws

Modified: maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelector.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelector.java?rev=598461&r1=598460&r2=598461&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelector.java (original)
+++ maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypeSelector.java Mon Nov 26 15:30:32 2007
@@ -36,8 +36,17 @@
 {
     String ROLE = ArchetypeSelector.class.getName();
 
-    void selectArchetype( ArchetypeGenerationRequest request,
-                          Boolean interactiveMode )
+//    void selectArchetype( ArchetypeGenerationRequest request,
+//                          Boolean interactiveMode )
+//        throws
+//        ArchetypeNotDefined,
+//        UnknownArchetype,
+//        UnknownGroup,
+//        IOException,
+//        PrompterException,
+//        ArchetypeSelectionFailure;
+
+    void selectArchetype( ArchetypeGenerationRequest request, Boolean interactiveMode, String catalogs )
         throws
         ArchetypeNotDefined,
         UnknownArchetype,

Modified: maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java?rev=598461&r1=598460&r2=598461&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java (original)
+++ maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java Mon Nov 26 15:30:32 2007
@@ -20,6 +20,7 @@
 package org.apache.maven.archetype.ui;
 
 //import org.apache.maven.archetype.common.Archetype;
+import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.common.ArchetypeDefinition;
 import org.codehaus.plexus.components.interactivity.Prompter;
 import org.codehaus.plexus.components.interactivity.PrompterException;
@@ -53,9 +54,8 @@
         return "Y".equalsIgnoreCase( answer );
     }
 
-    public org.apache.maven.archetype.catalog.Archetype selectArchetype( List archetypes )
-        throws
-        PrompterException
+    public Archetype selectArchetype( List archetypes )
+        throws PrompterException
     {
         String query = "Choose archetype:\n";
         Map answerMap = new HashMap();
@@ -74,6 +74,42 @@
 
             counter++;
         }
+        query += "Choose a number: ";
+
+        String answer = prompter.prompt( query, answers );
+
+        return (org.apache.maven.archetype.catalog.Archetype) answerMap.get( answer );
+    }
+
+    public Archetype selectArchetype( Map catalogs )
+        throws PrompterException
+    {
+        String query = "Choose archetype:\n";
+        Map answerMap = new HashMap();
+        List answers = new ArrayList();
+
+        Iterator catalogIterator = catalogs.keySet().iterator();
+        int counter = 1;
+        while ( catalogIterator.hasNext() )
+        {
+            String catalog = (String) catalogIterator.next();
+
+            Iterator archetypeIterator = ((List) catalogs.get( catalog )).iterator();
+            while ( archetypeIterator.hasNext() )
+            {
+                org.apache.maven.archetype.catalog.Archetype archetype = (org.apache.maven.archetype.catalog.Archetype) archetypeIterator.next();
+
+                answerMap.put( "" + counter, archetype );
+                query +=
+                    "" + counter + ": " + catalog +
+                    " -> " + archetype.getArtifactId() + " (" + archetype.getDescription() + ")\n";
+                answers.add( "" + counter );
+
+                counter++;
+            }
+
+        }
+
         query += "Choose a number: ";
 
         String answer = prompter.prompt( query, answers );

Modified: maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java?rev=598461&r1=598460&r2=598461&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java (original)
+++ maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelector.java Mon Nov 26 15:30:32 2007
@@ -30,16 +30,14 @@
 import org.apache.maven.archetype.source.ArchetypeDataSourceException;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.PropertyUtils;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import org.apache.commons.collections.iterators.ArrayIterator;
 
 /** @plexus.component */
 public class DefaultArchetypeSelector
@@ -48,6 +46,8 @@
 {
     /** @plexus.requirement */
     private ArchetypeSelectionQueryer archetypeSelectionQueryer;
+    /** @plexus.requirement */
+    private org.apache.maven.archetype.Archetype archetype;
 
     /** @plexus.requirement role="org.apache.maven.archetype.source.ArchetypeDataSource" */
     private Map archetypeSources;
@@ -59,22 +59,62 @@
         UnknownGroup,
         IOException,
         PrompterException,
+        ArchetypeSelectionFailure{throw new UnsupportedOperationException("change method");}
+
+    public void selectArchetype( ArchetypeGenerationRequest request, Boolean interactiveMode, String catalogs )
+        throws
+        ArchetypeNotDefined,
+        UnknownArchetype,
+        UnknownGroup,
+        IOException,
+        PrompterException,
         ArchetypeSelectionFailure
     {
         ArchetypeDefinition definition = new ArchetypeDefinition();
-        
+
         definition.setArtifactId( request.getArchetypeArtifactId() );
- 
+
         definition.setGroupId( request.getArchetypeGroupId() );
-        
+
         definition.setVersion( request.getArchetypeVersion() );
-        
+
+        // buggy? what in else statement
         if ( interactiveMode.booleanValue() )
         {
+            // buggy? what in else statement
             if ( !definition.isDefined() )
             {
-                List archetypes = new ArrayList();
+                Map archetypes = new HashMap();
 
+                Iterator ca = new ArrayIterator( StringUtils.split( catalogs, "," ) );
+                while(ca.hasNext())
+                {
+                    String catalog = (String) ca.next();
+                    
+                    if ("internal".equalsIgnoreCase(catalog))
+                    {//System.err.println("UNSING internal");
+                        archetypes.put("internal", archetype.getInternalCatalog().getArchetypes());
+                    }
+                    else if ("local".equalsIgnoreCase(catalog))
+                    {//System.err.println("UNSING local");
+                        archetypes.put("local", archetype.getDefaultLocalCatalog().getArchetypes());
+                    }
+                    else if ("remote".equalsIgnoreCase(catalog))
+                    {//System.err.println("UNSING remote");
+                        archetypes.put("remote", archetype.getRemoteCatalog().getArchetypes());
+                    }
+                    else if (catalog.startsWith("file://"))
+                    {//System.err.println("UNSING local "+catalog);
+                        String path = catalog.substring(7);
+                        archetypes.put("local", archetype.getLocalCatalog(path).getArchetypes());
+                    }
+                    else if (catalog.startsWith("http://"))
+                    {//System.err.println("UNSING remote "+catalog);
+                        archetypes.put("remote", archetype.getRemoteCatalog(catalog));
+                    }
+                }
+                
+                /*
                 File archetypeCatalogPropertiesFile = new File( System.getProperty( "user.home" ), ".m2/archetype-catalog.properties" );
 
                 if ( archetypeCatalogPropertiesFile.exists() )
@@ -104,38 +144,31 @@
                         }
                     }
                 }
+                */
 
                 if ( archetypes.size() == 0 )
                 {
-                    getLogger().debug( "Using wiki catalog" );
-
-                    try
-                    {
-                        ArchetypeDataSource source = (ArchetypeDataSource) archetypeSources.get( "internal-catalog" );
+                    getLogger().debug( "Using internal catalog" );
 
-                        archetypes.addAll( source.getArchetypeCatalog( new Properties() ).getArchetypes() );
-                    }
-                    catch ( ArchetypeDataSourceException e )
-                    {
-                        getLogger().warn( "Unable to get archetypes from default wiki  source. [" + e.getMessage() + "]" );
-                    }
+                        archetypes.put("internal", archetype.getInternalCatalog().getArchetypes());
                 }
 
+                // buggy? what in else statement
                 if ( archetypes.size() > 0 )
                 {
-                    Archetype archetype = archetypeSelectionQueryer.selectArchetype( archetypes );
+                    Archetype selectedArchetype = archetypeSelectionQueryer.selectArchetype( archetypes );
 
-                    definition.setArtifactId( archetype.getArtifactId() );
+                    definition.setArtifactId( selectedArchetype.getArtifactId() );
 
-                    definition.setName( archetype.getArtifactId() );
+                    definition.setName( selectedArchetype.getArtifactId() );
 
-                    definition.setGroupId( archetype.getGroupId() );
+                    definition.setGroupId( selectedArchetype.getGroupId() );
 
-                    definition.setVersion( archetype.getVersion() );
+                    definition.setVersion( selectedArchetype.getVersion() );
 
-                    definition.setRepository( archetype.getRepository() );
+                    definition.setRepository( selectedArchetype.getRepository() );
 
-                    String goals = StringUtils.join( archetype.getGoals().iterator(), "," );
+                    String goals = StringUtils.join( selectedArchetype.getGoals().iterator(), "," );
 
                     definition.setGoals( goals );
                 }
@@ -162,7 +195,7 @@
 
         request.setArchetypeRepository( definition.getRepository() );
 
-        request.setRemoteRepository( definition.getRepository() );        
+        request.setRemoteRepository( definition.getRepository() );
     }
 
     private Properties getArchetypeDataSourceProperties( String sourceRoleHint,