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 2009/01/31 16:22:35 UTC

svn commit: r739570 - in /maven/archetype/trunk: ./ archetype-common/src/main/java/org/apache/maven/archetype/generator/ archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/ archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ arch...

Author: rafale
Date: Sat Jan 31 15:22:35 2009
New Revision: 739570

URL: http://svn.apache.org/viewvc?rev=739570&view=rev
Log:
Archetype selection now groups archetype by groupId:artifactId, and reask for a version when many version of archetype is found in catalog.

Added:
    maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java   (with props)
    maven/archetype/trunk/nbactions.xml   (with props)
Modified:
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
    maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
    maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java
    maven/archetype/trunk/archetype-samples/webapp/   (props changed)

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java?rev=739570&r1=739569&r2=739570&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java Sat Jan 31 15:22:35 2009
@@ -163,7 +163,7 @@
     {
         return org.codehaus.plexus.util.StringUtils.isNotEmpty( request.getArchetypeGroupId() )
         && org.codehaus.plexus.util.StringUtils.isNotEmpty( request.getArchetypeArtifactId() )
-        &&org.codehaus.plexus.util.StringUtils.isNotEmpty( request.getArchetypeVersion() );
+        && org.codehaus.plexus.util.StringUtils.isNotEmpty( request.getArchetypeVersion() );
     }
 
     /** FileSetArchetype */

Modified: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java?rev=739570&r1=739569&r2=739570&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java (original)
+++ maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java Sat Jan 31 15:22:35 2009
@@ -107,7 +107,10 @@
      * - 'remote' which is the shortcut for 'http://repo1.maven.org/maven2'
      * - 'internal' which is an internal catalog
      *
-     * @parameter expression="${archetypeCatalog}" default-value="internal,local"
+     * Since 2.0-alpha-5, default value is no longer internal,local but remote,local
+     * This can only work if central has a catalog file at root.
+     *
+     * @parameter expression="${archetypeCatalog}" default-value="remote,local"
      */
     private String archetypeCatalog;
 

Added: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java?rev=739570&view=auto
==============================================================================
--- maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java (added)
+++ maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java Sat Jan 31 15:22:35 2009
@@ -0,0 +1,215 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.maven.archetype.ui;
+
+import java.io.IOException;
+import java.util.List;
+import org.codehaus.plexus.components.interactivity.InputHandler;
+import org.codehaus.plexus.components.interactivity.OutputHandler;
+import org.codehaus.plexus.components.interactivity.Prompter;
+import org.codehaus.plexus.components.interactivity.PrompterException;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ *
+ * @author raphaelpieroni
+ * @plexus.component role-hint="archetype"
+ */
+public class ArchetypePrompter implements Prompter {
+
+    /**
+     * @plexus.requirement
+     */
+    private OutputHandler outputHandler;
+
+    /**
+     * @plexus.requirement
+     */
+    private InputHandler inputHandler;
+
+    public String prompt( String message )
+        throws PrompterException
+    {
+        try
+        {
+            writePrompt( message );
+        }
+
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to present prompt", e );
+        }
+
+        try
+        {
+            return inputHandler.readLine();
+        }
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to read user response", e );
+        }
+    }
+
+    public String prompt( String message, String defaultReply )
+        throws PrompterException
+    {
+        try
+        {
+            writePrompt( formatMessage( message, null, defaultReply ) );
+        }
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to present prompt", e );
+        }
+
+        try
+        {
+            String line = inputHandler.readLine();
+
+            if ( StringUtils.isEmpty( line ) )
+            {
+                line = defaultReply;
+            }
+
+            return line;
+        }
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to read user response", e );
+        }
+    }
+
+    public String prompt( String message, List possibleValues, String defaultReply )
+        throws PrompterException
+    {
+        String formattedMessage = formatMessage( message, possibleValues, defaultReply );
+
+        String line;
+
+        do
+        {
+            try
+            {
+                writePrompt( formattedMessage );
+            }
+            catch ( IOException e )
+            {
+                throw new PrompterException( "Failed to present prompt", e );
+            }
+
+            try
+            {
+                line = inputHandler.readLine();
+            }
+            catch ( IOException e )
+            {
+                throw new PrompterException( "Failed to read user response", e );
+            }
+
+            if ( StringUtils.isEmpty( line ) )
+            {
+                line = defaultReply;
+            }
+
+            if ( line != null && !possibleValues.contains( line ) )
+            {
+                try
+                {
+                    outputHandler.writeLine( "Invalid selection." );
+                }
+                catch ( IOException e )
+                {
+                    throw new PrompterException( "Failed to present feedback", e );
+                }
+            }
+        }
+        while ( line == null || !possibleValues.contains( line ) );
+
+        return line;
+    }
+
+    public String prompt( String message, List possibleValues )
+        throws PrompterException
+    {
+        return prompt( message, possibleValues, null );
+    }
+
+    public String promptForPassword( String message )
+        throws PrompterException
+    {
+        try
+        {
+            writePrompt( message );
+        }
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to present prompt", e );
+        }
+
+        try
+        {
+            return inputHandler.readPassword();
+        }
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to read user response", e );
+        }
+    }
+
+    private String formatMessage( String message, List possibleValues, String defaultReply )
+    {
+        StringBuffer formatted = new StringBuffer( message.length() * 2 );
+
+        formatted.append( message );
+        /*if ( possibleValues != null && !possibleValues.isEmpty() )
+        {
+        formatted.append( " (" );
+
+        for ( Iterator it = possibleValues.iterator(); it.hasNext(); )
+        {
+        String possibleValue = (String) it.next();
+
+        formatted.append( possibleValue );
+
+        if ( it.hasNext() )
+        {
+        formatted.append( '/' );
+        }
+        }
+
+        formatted.append( ')' );
+        }*/
+
+        if ( defaultReply != null )
+        {
+            formatted.append( defaultReply );
+        }
+
+        return formatted.toString();
+    }
+
+    private void writePrompt( String message )
+        throws IOException
+    {
+        outputHandler.write( message + ": " );
+    }
+
+    public void showMessage( String message )
+        throws PrompterException
+    {
+        try
+        {
+            writePrompt( message );
+        }
+        catch ( IOException e )
+        {
+            throw new PrompterException( "Failed to present prompt", e );
+        }
+
+    }
+
+
+}

Propchange: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/ArchetypePrompter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java?rev=739570&r1=739569&r2=739570&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java (original)
+++ maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/ui/DefaultArchetypeSelectionQueryer.java Sat Jan 31 15:22:35 2009
@@ -38,7 +38,7 @@
     extends AbstractLogEnabled
     implements ArchetypeSelectionQueryer
 {
-    /** @plexus.requirement */
+    /** @plexus.requirement role-hint="archetype" */
     private Prompter prompter;
 
     public boolean confirmSelection( ArchetypeDefinition archetypeDefinition )
@@ -91,9 +91,10 @@
         throws PrompterException
     {
         String query = "Choose archetype:\n";
-        Map answerMap = new HashMap();
+        Map archetypeAnswerMap = new HashMap();
+        Map reversedArchetypeAnswerMap = new HashMap();
         List answers = new ArrayList();
-
+        List archetypeVersions;
         Iterator catalogIterator = catalogs.keySet().iterator();
         int counter = 1;
         int defaultSelection = 0;
@@ -105,21 +106,34 @@
             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 );
-
-                // the version is not tested. This is intentional.
-                if ( defaultDefinition != null && archetype.getGroupId().equals( defaultDefinition.getGroupId() ) &&
-                    archetype.getArtifactId().equals( defaultDefinition.getArtifactId() ) )
+                String mapKey = ""+counter;
+                String archetypeKey = archetype.getGroupId()+":"+archetype.getArtifactId();
+                if( reversedArchetypeAnswerMap.containsKey( archetypeKey ) )
+                {
+                    mapKey = (String) reversedArchetypeAnswerMap.get( archetypeKey );
+                    archetypeVersions = (List) archetypeAnswerMap.get( mapKey );
+                }
+                else
                 {
-                    defaultSelection = counter;
+                    archetypeVersions = new ArrayList();
+                    archetypeAnswerMap.put( mapKey, archetypeVersions );
+                    reversedArchetypeAnswerMap.put(archetypeKey, mapKey);
+                    query +=
+                        mapKey + ": " + catalog +
+                        " -> " + archetype.getArtifactId() + " (" + archetype.getDescription() + ")\n";
+                    answers.add( mapKey );
+
+                    // the version is not tested. This is intentional.
+                    if ( defaultDefinition != null && archetype.getGroupId().equals( defaultDefinition.getGroupId() ) &&
+                        archetype.getArtifactId().equals( defaultDefinition.getArtifactId() ) )
+                    {
+                        defaultSelection = counter;
+                    }
+
+                    counter++;
                 }
+                archetypeVersions.add( archetype );
 
-                counter++;
             }
 
         }
@@ -136,7 +150,44 @@
             answer = prompter.prompt( query, answers, Integer.toString( defaultSelection ) );
         }
 
-        return (org.apache.maven.archetype.catalog.Archetype) answerMap.get( answer );
+        archetypeVersions = (List) archetypeAnswerMap.get( answer );
+
+        if( archetypeVersions.size() == 1 )
+        {
+            return (org.apache.maven.archetype.catalog.Archetype) archetypeVersions.get( 0 );
+        }
+        else
+        {
+            return selectVersion( archetypeVersions );
+        }
+    }
+    private org.apache.maven.archetype.catalog.Archetype selectVersion( List archetypes )
+        throws
+        PrompterException
+    {
+        String query = "Choose version: \n";
+        Map answerMap = new HashMap();
+        List answers = new ArrayList();
+
+        Iterator archetypeVersionsKeys = archetypes.iterator();
+        int counter = 1;
+        org.apache.maven.archetype.catalog.Archetype archetype;
+        while ( archetypeVersionsKeys.hasNext() )
+        {
+            archetype = (org.apache.maven.archetype.catalog.Archetype) archetypeVersionsKeys.next();
+            String archetypeVersion = archetype.getVersion();
+
+            answerMap.put( "" + counter, archetype );
+            query += "" + counter + ": " + archetypeVersion + "\n";
+            answers.add( "" + counter );
+
+            counter++;
+        }
+        query += "Choose a number: ";
+
+        String answer = prompter.prompt( query, answers );
+
+        return  (Archetype) answerMap.get( answer );
     }
 
 //

Propchange: maven/archetype/trunk/archetype-samples/webapp/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sat Jan 31 15:22:35 2009
@@ -0,0 +1 @@
+target

Added: maven/archetype/trunk/nbactions.xml
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/nbactions.xml?rev=739570&view=auto
==============================================================================
--- maven/archetype/trunk/nbactions.xml (added)
+++ maven/archetype/trunk/nbactions.xml Sat Jan 31 15:22:35 2009
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<actions>
+        <action>
+            <actionName>CUSTOM-clean-install-skip</actionName>
+            <displayName>clean-install-skip</displayName>
+            <goals>
+                <goal>clean</goal>
+                <goal>install</goal>
+            </goals>
+            <properties>
+                <maven.test.skip>true</maven.test.skip>
+            </properties>
+        </action>
+    </actions>

Propchange: maven/archetype/trunk/nbactions.xml
------------------------------------------------------------------------------
    svn:eol-style = native