You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2007/10/06 08:23:54 UTC

svn commit: r582460 - in /maven/sandbox/trunk/archetypeng/archetypeng-plugin/src/main/java/org/apache/maven/archetype: mojos/CreateProjectFromArchetypeMojo.java ui/DefaultArchetypeSelector.java

Author: jvanzyl
Date: Fri Oct  5 23:23:53 2007
New Revision: 582460

URL: http://svn.apache.org/viewvc?rev=582460&view=rev
Log:
o more stripping down of the selector 

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/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=582460&r1=582459&r2=582460&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 Fri Oct  5 23:23:53 2007
@@ -178,20 +178,10 @@
                 );
 
             // Only interactiveMode, repositories and registry file are needed outside the request.
-            selector.selectArchetype(
-                request,
-                settings.getInteractiveMode(),
-                archetypeRegistryFile,
-                repositories
-            );
+            selector.selectArchetype( request, settings.getInteractiveMode(), archetypeRegistryFile, repositories );
 
             // Only interactiveMode, system.properties (configuration properties) and repositories are needed outside the request.
-            configurator.configureArchetype(
-                request,
-                settings.getInteractiveMode(),
-                System.getProperties(),
-                repositories
-            );
+            configurator.configureArchetype( request, settings.getInteractiveMode(), System.getProperties(), repositories );
 
             ArchetypeGenerationResult result = archetyper.generateProjectFromArchetype( request );
         }

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=582460&r1=582459&r2=582460&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 Fri Oct  5 23:23:53 2007
@@ -26,7 +26,6 @@
 import org.apache.maven.archetype.common.ArchetypeFactory;
 import org.apache.maven.archetype.common.ArchetypePropertiesManager;
 import org.apache.maven.archetype.common.ArchetypeRegistryManager;
-import org.apache.maven.archetype.common.Constants;
 import org.apache.maven.archetype.exception.ArchetypeNotDefined;
 import org.apache.maven.archetype.exception.ArchetypeSelectionFailure;
 import org.apache.maven.archetype.exception.UnknownArchetype;
@@ -71,12 +70,7 @@
     private Map archetypeSources;
 
     private ArchetypeDefinition selectArchetype(
-        String archetypeGroupId,
-        String archetypeArtifactId,
-        String archetypeVersion,
         Boolean interactiveMode,
-        File propertyFile,
-        File archetypeRegistryFile,
         ArtifactRepository localRepository,
         List repositories
     )
@@ -88,19 +82,7 @@
         PrompterException,
         ArchetypeSelectionFailure
     {
-        //TODO: This should be removed, we are using it for testing but we need a programmatic way to perform testing
-        //      and not rely on dropping properties files around.
-
-        Properties properties =
-            initialiseArchetypeId(
-                archetypeGroupId,
-                archetypeArtifactId,
-                archetypeVersion,
-                propertyFile
-            );
-
-        ArchetypeDefinition archetypeDefinition =
-            archetypeFactory.createArchetypeDefinition( properties );
+        ArchetypeDefinition archetypeDefinition = new ArchetypeDefinition();
 
         if ( interactiveMode.booleanValue() )
         {
@@ -226,35 +208,6 @@
         return p;
     }
 
-    private Properties initialiseArchetypeId(
-        String archetypeGroupId,
-        String archetypeArtifactId,
-        String archetypeVersion,
-        File propertyFile
-    )
-        throws
-        IOException
-    {
-        Properties properties = new Properties();
-
-        if ( archetypeGroupId != null )
-        {
-            properties.setProperty( Constants.ARCHETYPE_GROUP_ID, archetypeGroupId );
-        }
-
-        if ( archetypeArtifactId != null )
-        {
-            properties.setProperty( Constants.ARCHETYPE_ARTIFACT_ID, archetypeArtifactId );
-        }
-
-        if ( archetypeVersion != null )
-        {
-            properties.setProperty( Constants.ARCHETYPE_VERSION, archetypeVersion );
-        }
-
-        return properties;
-    }
-
     public void selectArchetype(
         ArchetypeGenerationRequest request,
         Boolean interactiveMode,
@@ -269,23 +222,111 @@
         PrompterException,
         ArchetypeSelectionFailure
     {
-        // propertyFile is no longer needed, set to null!
-        // archetypeRegistryFile is no longer used, set to null!
-        ArchetypeDefinition definition = selectArchetype(
-            request.getArchetypeGroupId(),
-            request.getArchetypeArtifactId(),
-            request.getArchetypeVersion(),
-            interactiveMode,
-            null,
-            null,
-            request.getLocalRepository(),
-            repositories );
-
-        request.setArchetypeGroupId( definition.getGroupId() );
-        request.setArchetypeArtifactId( definition.getArtifactId() );
-        request.setArchetypeVersion( definition.getVersion() );
-        request.setArchetypeRepository( definition.getRepository() );
-        request.setArchetypeGoals( definition.getGoals() );
-        request.setArchetypeName( definition.getName() );
+        ArchetypeDefinition definition = new ArchetypeDefinition();
+
+        if ( interactiveMode.booleanValue() )
+        {
+            if ( !definition.isDefined() )
+            {
+                List archetypes = new ArrayList();
+
+                File archetypeCatalogPropertiesFile = new File( System.getProperty( "user.home" ), ".m2/archetype-catalog.properties" );
+
+                if ( archetypeCatalogPropertiesFile.exists() )
+                {
+                    Properties archetypeCatalogProperties = PropertyUtils.loadProperties( archetypeCatalogPropertiesFile );
+
+                    getLogger().debug( "Using catalogs " + archetypeCatalogProperties );
+
+                    String[] sources = StringUtils.split( archetypeCatalogProperties.getProperty( "sources" ), "," );
+
+                    for ( int i = 0; i < sources.length; i++ )
+                    {
+                        String sourceRoleHint = sources[i];
+
+                        getLogger().debug( "Reading catalog " + sourceRoleHint );
+
+                        try
+                        {
+                            ArchetypeDataSource source = (ArchetypeDataSource) archetypeSources.get( sourceRoleHint );
+
+                            archetypes.addAll(
+                                source.getArchetypes( getArchetypeDataSourceProperties( sourceRoleHint, archetypeCatalogProperties ) ) );
+                        }
+                        catch ( ArchetypeDataSourceException e )
+                        {
+                            getLogger().warn( "Unable to get archetypes from " + sourceRoleHint + " source. [" + e.getMessage() + "]" );
+                        }
+                    }
+                }
+
+                if ( archetypes.size() == 0 )
+                {
+                    getLogger().debug( "Using wiki catalog" );
+
+                    try
+                    {
+                        ArchetypeDataSource source = (ArchetypeDataSource) archetypeSources.get( "wiki" );
+
+                        archetypes.addAll( source.getArchetypes( new Properties() ) );
+                    }
+                    catch ( ArchetypeDataSourceException e )
+                    {
+                        getLogger().warn( "Unable to get archetypes from default wiki  source. [" + e.getMessage() + "]" );
+                    }
+                }
+
+                if ( archetypes.size() > 0 )
+                {
+                    Archetype archetype = archetypeSelectionQueryer.selectArchetype( archetypes );
+
+                    definition.setArtifactId( archetype.getArtifactId() );
+
+                    definition.setName( archetype.getArtifactId() );
+
+                    definition.setGroupId( archetype.getGroupId() );
+
+                    definition.setVersion( archetype.getVersion() );
+
+                    definition.setRepository( archetype.getRepository() );
+
+                    String goals = StringUtils.join( archetype.getGoals().iterator(), "," );
+
+                    definition.setGoals( goals );
+                }
+            }
+        }
+
+        // Make sure the groupId and artifactId are valid, the version may just default to
+        // the latest release.
+
+        if ( !definition.isPartiallyDefined() )
+        {
+            throw new ArchetypeSelectionFailure( "No valid archetypes could be found to choose." );
+        }
+
+        //TODO: this needs to be remove and let the generator take the selection + configuration and do what's 
+        //      necessary. The selector should not be downloading anything.
+
+        repositories.add(
+            archetypeRegistryManager.createRepository( definition.getRepository(), definition.getArtifactId() + "-repo" ) );
+
+        if ( !archetypeArtifactManager.exists( definition, request.getLocalRepository(), repositories ) )
+        {
+            throw new UnknownArchetype(
+                "The desired archetype does not exist (" + definition.getGroupId() + ":"
+                    + definition.getArtifactId() + ":" + definition.getVersion()
+                    + ")"
+            );
+        }
+        else
+        {
+            request.setArchetypeGroupId( definition.getGroupId() );
+            request.setArchetypeArtifactId( definition.getArtifactId() );
+            request.setArchetypeVersion( definition.getVersion() );
+            request.setArchetypeRepository( definition.getRepository() );
+            request.setArchetypeGoals( definition.getGoals() );
+            request.setArchetypeName( definition.getName() );
+        }
     }
 }