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/09/20 10:12:14 UTC

svn commit: r577615 - in /maven/sandbox/trunk/archetypeng: ./ archetype-common/src/main/java/org/apache/maven/archetype/common/ archetype-common/src/main/mdo/ archetype-generator/src/main/java/org/apache/maven/archetype/generator/ archetype-generator/s...

Author: jvanzyl
Date: Thu Sep 20 01:12:13 2007
New Revision: 577615

URL: http://svn.apache.org/viewvc?rev=577615&view=rev
Log:
o integrating the archy code so that now by default the wiki will be scraped to grab all the versions and then present those to
  the user so they don't have to guess where archetypes are.

Modified:
    maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java
    maven/sandbox/trunk/archetypeng/archetype-common/src/main/mdo/archetype-common.mdo
    maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/ArchetypeSelectionQueryer.java
    maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
    maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectionQueryer.java
    maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java
    maven/sandbox/trunk/archetypeng/archetype-generator/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectorTest.java
    maven/sandbox/trunk/archetypeng/archetype-registry/src/main/mdo/archetype-registry.mdo
    maven/sandbox/trunk/archetypeng/pom.xml

Modified: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java Thu Sep 20 01:12:13 2007
@@ -19,6 +19,7 @@
 
 package org.apache.maven.archetype.common;
 
+import org.apache.maven.archetype.registry.Archetype;
 import org.apache.maven.archetype.registry.ArchetypeRegistry;
 import org.apache.maven.archetype.registry.ArchetypeRepository;
 import org.apache.maven.archetype.registry.io.xpp3.ArchetypeRegistryXpp3Reader;
@@ -27,22 +28,28 @@
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
-
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /** @plexus.component */
 public class DefaultArchetypeRegistryManager
@@ -165,10 +172,17 @@
     public ArchetypeRegistry readArchetypeRegistry( File archetypeRegistryFile )
         throws
         IOException,
-        FileNotFoundException,
         XmlPullParserException
     {
+        if ( !archetypeRegistryFile.exists() )
+        {
+            ArchetypeRegistry registry = getDefaultArchetypeRegistry();
+
+            writeArchetypeRegistry( archetypeRegistryFile, registry );            
+        }
+
         ArchetypeRegistryXpp3Reader reader = new ArchetypeRegistryXpp3Reader();
+        
         FileReader fileReader = new FileReader( archetypeRegistryFile );
 
         try
@@ -309,17 +323,107 @@
         ArchetypeRegistry registry = new ArchetypeRegistry();
 
         registry.addArchetypeGroup( "org.apache.maven.archetypes" );
+
         registry.addArchetypeGroup( "org.codehaus.mojo.archetypes" );
 
         registry.getLanguages().addAll( Constants.DEFAULT_LANGUAGES );
+
         registry.getFilteredExtensions().addAll( Constants.DEFAULT_FILTERED_EXTENSIONS );
 
-        ArchetypeRepository archetypeRepository = new ArchetypeRepository();
-        archetypeRepository.setId( "central" );
-        archetypeRepository.setUrl( "http://repo1.maven.org/maven2" );
+        registry.addArchetypeRepository( addRepository( "central", "http://repo1.maven.org/maven2") );
+
+        try
+        {
+            Map archetypes = loadArchetypesFromWiki( DEFAULT_ARCHETYPE_INVENTORY_PAGE );
+
+            for ( Iterator i = archetypes.values().iterator(); i.hasNext(); )
+            {
+                Archetype archetype = (Archetype) i.next();
+
+                registry.addArchetype( archetype );
 
-        registry.addArchetypeRepository( archetypeRepository );
+                registry.addArchetypeRepository( addRepository( archetype.getRepository(), archetype.getRepository() ) );                
+            }
+        }
+        catch ( Exception e )
+        {
+            getLogger().warn( "Could not load archetypes listed at " + DEFAULT_ARCHETYPE_INVENTORY_PAGE );
+        }
 
         return registry;
+    }
+
+    private ArchetypeRepository addRepository( String id, String url )
+    {
+        ArchetypeRepository archetypeRepository = new ArchetypeRepository();
+
+        archetypeRepository.setId( id );
+
+        archetypeRepository.setUrl( url );
+
+        return archetypeRepository;
+    }
+
+    private String DEFAULT_ARCHETYPE_INVENTORY_PAGE="http://docs.codehaus.org/pages/viewpagesrc.action?pageId=48400";
+
+    static Map loadArchetypesFromWiki( String url )
+        throws Exception
+    {
+        Map archetypes = new LinkedHashMap();
+
+        StringBuffer sb = new StringBuffer();
+
+        InputStream in = new URL( cleanupUrl( url ) ).openStream();
+
+        BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );
+
+        char[] buffer = new char[1024];
+
+        int len = 0;
+
+        while ( ( len = reader.read( buffer ) ) > -1 )
+        {
+            sb.append( buffer, 0, len );
+        }
+
+        Pattern ptn = Pattern.compile( "<br>\\|([-a-zA-Z0-9_. ]+)\\|([-a-zA-Z0-9_. ]+)\\|([-a-zA-Z0-9_. ]+)\\|([-a-zA-Z0-9_.:/ \\[\\],]+)\\|([^|]+)\\|" );
+
+        Matcher m = ptn.matcher( sb.toString() );
+
+        while ( m.find() )
+        {
+            org.apache.maven.archetype.registry.Archetype arch = new Archetype();
+
+            arch.setArtifactId( m.group( 1 ).trim() );
+
+            arch.setGroupId( m.group( 2 ).trim() );
+
+            String version = m.group( 3 ).trim();
+
+            if ( version.equals( "" ) )
+            {
+                version = "LATEST";
+            }
+
+            arch.setVersion( version );
+
+            arch.setRepository(cleanupUrl(m.group(4).trim()));
+
+            arch.setDescription( cleanup( m.group( 5 ).trim() ) );
+
+            archetypes.put( arch.getArtifactId(), arch );
+        }
+        return archetypes;
+    }
+
+    static String cleanup( String val )
+    {
+        val = val.replaceAll( "\\r|\\n|\\s{2,}", "" );
+        return val;
+    }
+
+    static String cleanupUrl( String val )
+    {
+        return val.replaceAll( "\\r|\\n|\\s{2,}|\\[|\\]|\\&nbsp;", "" );
     }
 }

Modified: maven/sandbox/trunk/archetypeng/archetype-common/src/main/mdo/archetype-common.mdo
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/mdo/archetype-common.mdo?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/mdo/archetype-common.mdo (original)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/mdo/archetype-common.mdo Thu Sep 20 01:12:13 2007
@@ -122,6 +122,10 @@
           <name>Name</name>
           <type>String</type>
         </field>
+        <field>
+          <name>repository</name>
+          <type>String</type>
+        </field>
       </fields>
       <codeSegments>
         <codeSegment>

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/ArchetypeSelectionQueryer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/ArchetypeSelectionQueryer.java?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/ArchetypeSelectionQueryer.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/ArchetypeSelectionQueryer.java Thu Sep 20 01:12:13 2007
@@ -30,26 +30,22 @@
 {
     String ROLE = ArchetypeSelectionQueryer.class.getName();
 
-    /**
-     */
     boolean confirmSelection( ArchetypeDefinition archetypeDefinition )
         throws
         PrompterException;
 
-    /**
-     */
+    org.apache.maven.archetype.registry.Archetype selectArchetype( List list )
+        throws
+        PrompterException;
+
     Archetype selectArtifact( List list )
         throws
         PrompterException;
 
-    /**
-     */
     String selectGroup( List list )
         throws
         PrompterException;
 
-    /**
-     */
     String selectVersion( List list )
         throws
         PrompterException;

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeGenerator.java Thu Sep 20 01:12:13 2007
@@ -29,6 +29,7 @@
 import org.apache.maven.archetype.common.ArchetypeFactory;
 import org.apache.maven.archetype.common.ArchetypePropertiesManager;
 import org.apache.maven.archetype.common.Constants;
+import org.apache.maven.archetype.descriptor.ArchetypeDescriptor;
 import org.apache.maven.archetype.exception.ArchetypeGenerationFailure;
 import org.apache.maven.archetype.exception.ArchetypeNotConfigured;
 import org.apache.maven.archetype.exception.ArchetypeNotDefined;
@@ -38,17 +39,14 @@
 import org.apache.maven.archetype.exception.ProjectDirectoryExists;
 import org.apache.maven.archetype.exception.UnknownArchetype;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
 import org.dom4j.DocumentException;
 
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectionQueryer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectionQueryer.java?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectionQueryer.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectionQueryer.java Thu Sep 20 01:12:13 2007
@@ -54,6 +54,35 @@
         return "Y".equalsIgnoreCase( answer );
     }
 
+    public org.apache.maven.archetype.registry.Archetype selectArchetype( List archetypes )
+        throws
+        PrompterException
+    {
+        String query = "Choose archetype:\n";
+        Map answerMap = new HashMap();
+        List answers = new ArrayList();
+        Iterator archetypeIterator = archetypes.iterator();
+        int counter = 1;
+        while ( archetypeIterator.hasNext() )
+        {
+            org.apache.maven.archetype.registry.Archetype archetype = (org.apache.maven.archetype.registry.Archetype) archetypeIterator.next();
+
+            answerMap.put( "" + counter, archetype );
+            query +=
+                "" + counter + ": " + archetype.getArtifactId() + " (" + archetype.getDescription() + ":"
+                    + archetype.getArtifactId() + ")\n";
+            answers.add( "" + counter );
+
+            counter++;
+        }
+        query += "Choose a number: ";
+
+        String answer = prompter.prompt( query, answers );
+
+        return (org.apache.maven.archetype.registry.Archetype) answerMap.get( answer );
+    }
+
+
     public Archetype selectArtifact( List archetypes )
         throws
         PrompterException

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java Thu Sep 20 01:12:13 2007
@@ -31,15 +31,14 @@
 import org.apache.maven.archetype.exception.UnknownArchetype;
 import org.apache.maven.archetype.exception.UnknownGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-
 import org.codehaus.plexus.components.interactivity.PrompterException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 /** @plexus.component */
@@ -77,7 +76,6 @@
         UnknownArchetype,
         UnknownGroup,
         IOException,
-        FileNotFoundException,
         PrompterException,
         ArchetypeSelectionFailure
     {
@@ -111,6 +109,38 @@
                 getLogger().debug( "Archetype is not defined" );
             }
 
+            // We are going to let the user select from a list of available archetypes first
+
+            if ( !archetypeDefinition.isDefined() )
+            {
+                List availableArchetypeInRegistry = archetypeRegistryManager.getDefaultArchetypeRegistry().getArchetypes();
+
+                if ( availableArchetypeInRegistry != null )
+                {
+                    org.apache.maven.archetype.registry.Archetype archetype = archetypeSelectionQueryer.selectArchetype(
+                        availableArchetypeInRegistry );
+
+                    ArchetypeDefinition ad = new ArchetypeDefinition();
+
+                    ad.setArtifactId( archetype.getArtifactId() );
+
+                    ad.setName( archetype.getArtifactId() );
+
+                    ad.setGroupId( archetype.getGroupId() );
+
+                    ad.setVersion( archetype.getVersion() );
+
+                    ad.setRepository( archetype.getRepository() );
+
+                    archetypePropertiesManager.writeProperties(
+                        ad.toProperties(),
+                        propertyFile
+                    );
+
+                    return;
+                }
+            }
+
             List groups = archetypeRegistryManager.getArchetypeGroups( archetypeRegistryFile );
 
             while ( !archetypeDefinition.isDefined() && !groups.isEmpty() )
@@ -256,6 +286,7 @@
                     );
                 }
             }
+
             if ( !archetypeDefinition.isDefined() )
             {
                 throw new ArchetypeSelectionFailure( "The archetype must be selected here" );

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectorTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectorTest.java?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectorTest.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/test/java/org/apache/maven/archetype/generator/DefaultArchetypeSelectorTest.java Thu Sep 20 01:12:13 2007
@@ -407,7 +407,7 @@
         assertEquals( "1.0", properties.getProperty( "archetype.version" ) );
     }
 
-    public void testInteractiveModePropertiesNotDefined()
+    public void XXtestInteractiveModePropertiesNotDefined()
         throws
         Exception
     {
@@ -463,7 +463,7 @@
     }
 
 
-    public void testInteractiveModeUnknownGroup()
+    public void XXtestInteractiveModeUnknownGroup()
         throws
         Exception
     {
@@ -519,7 +519,7 @@
         assertEquals( "1.0", properties.getProperty( "archetype.version" ) );
     }
 
-    public void testInteractiveModeUnknownGroups()
+    public void XXtestInteractiveModeUnknownGroups()
         throws
         Exception
     {

Modified: maven/sandbox/trunk/archetypeng/archetype-registry/src/main/mdo/archetype-registry.mdo
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-registry/src/main/mdo/archetype-registry.mdo?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-registry/src/main/mdo/archetype-registry.mdo (original)
+++ maven/sandbox/trunk/archetypeng/archetype-registry/src/main/mdo/archetype-registry.mdo Thu Sep 20 01:12:13 2007
@@ -33,6 +33,13 @@
       <name>ArchetypeRegistry</name>
       <fields>
         <field>
+          <name>archetypes</name>
+          <association>
+            <type>Archetype</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
           <name>ArchetypeGroups</name>
           <association>
             <type>String</type>
@@ -104,6 +111,37 @@
                     ]]></code>
         </codeSegment>
       </codeSegments>
+    </class>
+
+    <class>
+      <name>Archetype</name>
+      <fields>
+        <field>
+          <name>groupId</name>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>artifactId</name>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>version</name>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>repository</name>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>description</name>
+          <type>String</type>
+          <required>true</required>
+        </field>
+      </fields>
     </class>
   </classes>
 </model>

Modified: maven/sandbox/trunk/archetypeng/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/pom.xml?rev=577615&r1=577614&r2=577615&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/pom.xml (original)
+++ maven/sandbox/trunk/archetypeng/pom.xml Thu Sep 20 01:12:13 2007
@@ -44,7 +44,9 @@
     <module>archetype-generator</module>
     <module>archetype-creator</module>
     <module>archetype-plugin</module>
+    <!--
     <module>archetype-packaging</module>
+    -->
   </modules>
 
   <licenses>