You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2010/04/05 19:03:36 UTC
svn commit: r930907 -
/maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/test/InternalCatalogFromWiki.java
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 );
}
}