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