Author: hboutemy
Date: Mon Apr  5 17:03:36 2010
New Revision: 930907

URL: http://svn.apache.org/viewvc?rev=930907&view=rev
Log:
code refactoring

Modified:
    
maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/test/InternalCatalogFromWiki.java

Modified: 
maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/test/InternalCatalogFromWiki.java
URL: 
http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/test/InternalCatalogFromWiki.java?rev=930907&r1=930906&r2=930907&view=diff
==============================================================================
--- 
maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/test/InternalCatalogFromWiki.java
 (original)
+++ 
maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/test/InternalCatalogFromWiki.java
 Mon Apr  5 17:03:36 2010
@@ -17,12 +17,6 @@ package org.apache.maven.archetype.test;
  *  under the License.
  */
 
-import java.io.File;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
 import org.apache.maven.archetype.ArchetypeGenerationRequest;
 import org.apache.maven.archetype.ArchetypeGenerationResult;
 import org.apache.maven.archetype.catalog.Archetype;
@@ -30,74 +24,131 @@ import org.apache.maven.archetype.catalo
 import org.apache.maven.archetype.catalog.io.xpp3.ArchetypeCatalogXpp3Writer;
 import org.apache.maven.archetype.common.ArchetypeArtifactManager;
 import org.apache.maven.archetype.common.ArchetypeRegistryManager;
+import org.apache.maven.archetype.exception.UnknownArchetype;
 import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
 import org.apache.maven.archetype.metadata.RequiredProperty;
 import org.apache.maven.archetype.source.ArchetypeDataSource;
+import org.apache.maven.archetype.source.ArchetypeDataSourceException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
 
 /**
+ * Generate catalog content from Wiki to replace internal catalog.
  *
  * @author rafale
  */
 public class InternalCatalogFromWiki
     extends PlexusTestCase
 {
+    private static final String CENTRAL = "http://repo1.apache.org/maven2";;
 
-    public void testInternalCatalog()
-        throws Exception
-    {
-        ArchetypeRegistryManager registryManager = (ArchetypeRegistryManager) 
lookup( ArchetypeRegistryManager.ROLE );
+    private ArtifactRepository localRepository;
 
-        ArtifactRepository localRepository = registryManager.createRepository( 
new File( getBasedir(),
-                "target/test-classes/repositories/local" 
).toURI().toURL().toExternalForm(),
-                "local-repo");
+    private ArchetypeArtifactManager aam;
 
-        File outputDirectory = new File( getBasedir(), 
"target/internal-archetypes-projects" );
-        outputDirectory.mkdirs();
+    private ArchetypeRegistryManager arm;
 
-        org.apache.maven.archetype.Archetype plexusarchetype =
-            (org.apache.maven.archetype.Archetype) lookup( 
org.apache.maven.archetype.Archetype.class.getName() );
-        ArchetypeArtifactManager aam = (ArchetypeArtifactManager) lookup( 
ArchetypeArtifactManager.class.getName() );
-        ArchetypeRegistryManager arm = (ArchetypeRegistryManager) lookup( 
ArchetypeRegistryManager.class.getName() );
+    private org.apache.maven.archetype.Archetype plexusarchetype;
+
+    private File outputDirectory;
 
-//        ArchetypeDataSource ads =  (ArchetypeDataSource) lookup( 
ArchetypeDataSource.ROLE, "wiki" );
+    private ArchetypeCatalog fetchArchetypeCatalogFromWiki()
+        throws ArchetypeDataSourceException
+    {
+        // ArchetypeDataSource ads =  (ArchetypeDataSource) lookup( 
ArchetypeDataSource.ROLE, "wiki" );
         ArchetypeDataSource ads = new WikiArchetypeDataSource();
 
+        // fetch and parse Wiki page content
         ArchetypeCatalog ac = ads.getArchetypeCatalog( new Properties() );
-        List modifiedArchetypes = new ArrayList();
-        Iterator archetypes = ac.getArchetypes().iterator();
-        while ( archetypes.hasNext() )
+
+        for ( Iterator archetypes = ac.getArchetypes().iterator(); 
archetypes.hasNext(); )
         {
             Archetype archetype = (Archetype) archetypes.next();
+
             if ( archetype.getRepository() != null
-                && archetype.getRepository().indexOf( 
"repo1.apache.org/maven2" ) >= 0 )
+                && archetype.getRepository().indexOf( CENTRAL.substring( 7 ) ) 
>= 0 )
             {
                 archetype.setRepository( null );
             }
-            modifiedArchetypes.add( archetype );
         }
-        ac.setArchetypes( modifiedArchetypes );
 
-        System.out.println( "AR=" + ac.getArchetypes() );
+        System.out.println( "found " + ac.getArchetypes().size() + " 
archetypes on http://docs.codehaus.org/display/MAVENUSER/Archetypes+List"; );
 
-        StringWriter sw = new StringWriter();
+        for ( Iterator archetypes = ac.getArchetypes().iterator(); 
archetypes.hasNext(); )
+        {
+            Archetype archetype = (Archetype) archetypes.next();
+            System.out.println( "  " + archetype );
+        }
 
-        ArchetypeCatalogXpp3Writer acxw = new ArchetypeCatalogXpp3Writer();
-        acxw.write( sw, ac );
+        return ac;
+    }
+
+    private ArchetypeGenerationResult testArchetype( int count, Archetype 
archetype )
+        throws UnknownArchetype
+    {
+        System.out.println( "\n\nTesting archetype #" + count + ": " + 
archetype );
+
+        ArchetypeGenerationRequest request =
+            new ArchetypeGenerationRequest( archetype )
+            .setGroupId( "groupId" + count )
+            .setArtifactId( "artifactId" + count + "-" + 
archetype.getArtifactId() )
+            .setVersion( "version" + count )
+            .setPackage( "package" + count )
+            .setOutputDirectory( outputDirectory.getPath() )
+            .setLocalRepository( localRepository );
+
+        Properties properties = new Properties();
+
+        ArtifactRepository repository =
+            arm.createRepository( archetype.getRepository(), 
archetype.getRepository() + "-repo" );
+
+        if ( aam.isFileSetArchetype( archetype.getGroupId(), 
archetype.getArtifactId(), archetype.getVersion(),
+                                     repository, localRepository, new 
ArrayList( /* repositories */) ) )
+        {
+            ArchetypeDescriptor descriptor =
+                aam.getFileSetArchetypeDescriptor( archetype.getGroupId(), 
archetype.getArtifactId(),
+                                                   archetype.getVersion(), 
repository, localRepository,
+                                                   new ArrayList( /* 
repositories */) );
+
+            for ( Iterator required = 
descriptor.getRequiredProperties().iterator(); required.hasNext(); )
+            {
+                RequiredProperty prop = (RequiredProperty) required.next();
+
+                properties.setProperty( prop.getKey(), prop.getDefaultValue() 
!= null
+                    && !"".equals( prop.getDefaultValue() ) ? 
prop.getDefaultValue() : "test-value" );
+            }
+
+        }
+        request.setProperties( properties );
 
-        System.out.println( "AC=" + sw.toString() );
+        return plexusarchetype.generateProjectFromArchetype( request );
+    }
+
+    public void testInternalCatalog()
+        throws Exception
+    {
+        ArchetypeCatalog ac = fetchArchetypeCatalogFromWiki();
+
+        System.out.println( "Testing archetypes to " + 
outputDirectory.getPath() );
+
+        List validArchetypes = new ArrayList();
 
-        List archetypesUsed = new ArrayList();
-        List archetypesRemoved = new ArrayList();
-        archetypes = ac.getArchetypes().iterator();
         int count = 1;
 
-        while ( archetypes.hasNext() )
+        List errors = new ArrayList();
+
+        for ( Iterator archetypes = ac.getArchetypes().iterator(); 
archetypes.hasNext(); )
         {
-            org.apache.maven.archetype.catalog.Archetype a =
-                (org.apache.maven.archetype.catalog.Archetype) 
archetypes.next();
-            org.apache.maven.archetype.catalog.Archetype ar = new 
org.apache.maven.archetype.catalog.Archetype();
+            Archetype a = (Archetype) archetypes.next();
+            Archetype ar = new Archetype();
 
             ar.setGroupId( a.getGroupId() );
             ar.setArtifactId( a.getArtifactId() );
@@ -109,116 +160,104 @@ public class InternalCatalogFromWiki
 
             if ( ar.getRepository() == null )
             {
-                ar.setRepository( "http://repo1.maven.org/maven2"; );
+                ar.setRepository( CENTRAL );
             }
-            System.err.println( "\n\n\n\n\n\nTesting archetype " + ar );
-            ArchetypeGenerationRequest request =
-                new ArchetypeGenerationRequest( ar )
-                .setGroupId( "groupId" + count )
-                .setArtifactId( "artifactId" + count )
-                .setVersion( "version" + count )
-                .setPackage( "package" + count )
-                .setOutputDirectory( outputDirectory.getPath() )
-                .setLocalRepository( localRepository );
-
-            Properties properties = new Properties();
-            if ( aam.isFileSetArchetype( a.getGroupId(), a.getArtifactId(), 
"RELEASE",
-                                         arm.createRepository( 
a.getRepository(), a.getRepository() + "-repo" ),
-                                         localRepository, new ArrayList( /* 
repositories */) ) )
-            {
-                ArchetypeDescriptor descriptor =
-                    aam.getFileSetArchetypeDescriptor( a.getGroupId(), 
a.getArtifactId(), "RELEASE",
-                                                       arm.createRepository( 
a.getRepository(), a.getRepository()
-                                                           + "-repo" ), 
localRepository,
-                                                       new ArrayList( /* 
repositories */) );
 
-                Iterator required = 
descriptor.getRequiredProperties().iterator();
-                while ( required.hasNext() )
-                {
-                    RequiredProperty prop = (RequiredProperty) required.next();
+            ArchetypeGenerationResult generationResult = testArchetype( count, 
ar );
 
-                    properties.setProperty( prop.getKey(), 
prop.getDefaultValue() != null
-                        && !"".equals( prop.getDefaultValue() ) ? 
prop.getDefaultValue() : "test-value" );
-                }
-
-            }
-            request.setProperties( properties );
-            ArchetypeGenerationResult generationResult = 
plexusarchetype.generateProjectFromArchetype( request );
-            if ( generationResult != null && generationResult.getCause() != 
null )
+            if ( generationResult.getCause() != null )
             {
+                // RELEASE version failed: try with the version specified in 
the Wiki
                 ar.setVersion( a.getVersion() );
-                request =
-                    new ArchetypeGenerationRequest( ar )
-                    .setGroupId( "groupId" + count )
-                    .setArtifactId( "artifactId" + count )
-                    .setVersion( "version" + count )
-                    .setPackage( "package" + count )
-                    .setOutputDirectory( outputDirectory.getPath() )
-                    .setLocalRepository( localRepository );
-
-                properties = new Properties();
-                if ( aam.isFileSetArchetype( a.getGroupId(), 
a.getArtifactId(), a.getVersion(),
-                                             arm.createRepository( 
a.getRepository(), a.getRepository() + "-repo" ),
-                                             localRepository, new ArrayList( 
/* repositories */) ) )
-                {
-                    ArchetypeDescriptor descriptor =
-                        aam.getFileSetArchetypeDescriptor( a.getGroupId(), 
a.getArtifactId(), a.getVersion(),
-                                                           
arm.createRepository( a.getRepository(), a.getRepository()
-                                                               + "-repo" ), 
localRepository,
-                                                           new ArrayList( /* 
repositories */) );
 
-                    Iterator required = 
descriptor.getRequiredProperties().iterator();
-                    while ( required.hasNext() )
-                    {
-                        RequiredProperty prop = (RequiredProperty) 
required.next();
+                generationResult = testArchetype( count, ar );
 
-                        properties.setProperty( prop.getKey(), 
prop.getDefaultValue() != null
-                            && !"".equals( prop.getDefaultValue() ) ? 
prop.getDefaultValue() : "test-value" );
-                    }
-
-                }
-                request.setProperties( properties );
-                generationResult = 
plexusarchetype.generateProjectFromArchetype( request );
-                if ( generationResult != null && generationResult.getCause() 
!= null )
+                if ( generationResult.getCause() == null )
                 {
-                    if ( "http://repo1.maven.org/maven2".equals( 
ar.getRepository() ) )
+                    if ( !( ar.getVersion().indexOf( "SNAPSHOT" ) > 0 )
+                        && !( ar.getVersion().indexOf( "snapshot" ) > 0 ) )
+                    {
+                        validArchetypes.add( ar );
+                    }
+                    else
                     {
-                        ar.setRepository( null );
+                        System.err.println( "???????????" );
                     }
-                    // archetypesRemoved.add(ar);
                 }
                 else
                 {
-                    if ( "http://repo1.maven.org/maven2".equals( 
ar.getRepository() ) )
-                    {
-                        ar.setRepository( null );
-                    }
-                    if ( !( ar.getVersion().indexOf( "SNAPSHOT" ) > 0 )
-                        && !( ar.getVersion().indexOf( "snapshot" ) > 0 ) )
-                    {
-                        archetypesUsed.add( ar );
-                    }
+                    errors.add( ar + " " + 
generationResult.getCause().getMessage() );
                 }
             }
             else
             {
-                if ( "http://repo1.maven.org/maven2".equals( 
ar.getRepository() ) )
-                {
-                    ar.setRepository( null );
-                }
-                archetypesUsed.add( ar );
+                validArchetypes.add( ar );
             }
+
+            if ( CENTRAL.equals( ar.getRepository() ) )
+            {
+                ar.setRepository( null );
+            }
+
             count++;
-            System.err.println( "\n\n\n\n\n" );
+
+            System.out.println( "\n\n" );
         }
-        ac = new ArchetypeCatalog();
-        ac.setArchetypes( archetypesUsed );
 
-        sw = new StringWriter();
-        acxw = new ArchetypeCatalogXpp3Writer();
-        acxw.write( sw, ac );
+        ArchetypeCatalog fac = new ArchetypeCatalog();
+        fac.setArchetypes( validArchetypes );
+
+        StringWriter sw = new StringWriter();
+        ArchetypeCatalogXpp3Writer acxw = new ArchetypeCatalogXpp3Writer();
+        acxw.write( sw, fac );
 
         System.err.println( "Resulting catalog is\n" + sw.toString() );
-        System.err.println( "Removed archetypes are \n" + archetypesRemoved );
+
+        System.err.println( "This catalog contains " + 
fac.getArchetypes().size() + " archetypes." );
+
+        if ( ac.getArchetypes().size() > fac.getArchetypes().size() )
+        {
+            System.err.println();
+            System.err.println( "Removed " + ( ac.getArchetypes().size() - 
fac.getArchetypes().size() )
+                + " archetype(s) from Wiki page:" );
+
+            List removedArchetypes = new ArrayList( ac.getArchetypes() );
+            removedArchetypes.removeAll( validArchetypes );
+
+            for ( Iterator archetypes = removedArchetypes.iterator(); 
archetypes.hasNext(); )
+            {
+                Archetype archetype = (Archetype) archetypes.next();
+                System.err.println( "  " + archetype );
+            }
+
+            System.err.println();
+            System.err.println( "Got " + errors.size() + " error message(s): " 
);
+            for ( Iterator iterator = errors.iterator(); iterator.hasNext(); )
+            {
+                System.err.println( "  " + iterator.next() );
+            }
+        }
+    }
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        ArchetypeRegistryManager registryManager = (ArchetypeRegistryManager) 
lookup( ArchetypeRegistryManager.ROLE );
+
+        File local = new File( getBasedir(), 
"target/test-classes/repositories/local" );
+        localRepository = registryManager.createRepository( 
local.toURI().toURL().toExternalForm(), "local-repo");
+
+        aam = (ArchetypeArtifactManager) lookup( 
ArchetypeArtifactManager.class.getName() );
+        arm = (ArchetypeRegistryManager) lookup( 
ArchetypeRegistryManager.class.getName() );
+
+        plexusarchetype =
+            (org.apache.maven.archetype.Archetype) lookup( 
org.apache.maven.archetype.Archetype.class.getName() );
+
+        outputDirectory = new File( getBasedir(), 
"target/internal-archetypes-projects" );
+        outputDirectory.mkdirs();
+
+        FileUtils.cleanDirectory( outputDirectory );
     }
 }


Reply via email to