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 2008/01/08 21:49:20 UTC

svn commit: r610142 - in /maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src: main/java/org/apache/maven/archetype/common/ main/java/org/apache/maven/archetype/common/util/ main/java/org/apache/maven/archetype/repos...

Author: rafale
Date: Tue Jan  8 12:49:18 2008
New Revision: 610142

URL: http://svn.apache.org/viewvc?rev=610142&view=rev
Log:
First draft for a repository crowler component

Added:
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java   (with props)
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/RepositoryCrawler.java   (with props)
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawlerTest.java   (with props)
Modified:
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
    maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo

Modified: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java?rev=610142&r1=610141&r2=610142&view=diff
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java (original)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java Tue Jan  8 12:49:18 2008
@@ -20,18 +20,22 @@
 package org.apache.maven.archetype.common;
 
 import org.apache.maven.archetype.exception.UnknownArchetype;
-import org.apache.maven.archetype.exception.UnknownGroup;
 import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.List;
 import java.util.zip.ZipFile;
+import org.apache.maven.model.Model;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 public interface ArchetypeArtifactManager
 {
     String ROLE = ArchetypeArtifactManager.class.getName();
 
+    public Model getArchetypePom(File jar) throws XmlPullParserException, UnknownArchetype, IOException;
+
     /**
      */
     File getArchetypeFile(
@@ -99,6 +103,8 @@
         ArtifactRepository localRepository,
         List repositories
     );
+    
+    boolean isFileSetArchetype( File archetypeFile );
 
     /**
      */
@@ -135,6 +141,8 @@
         ArtifactRepository localRepository,
         List repositories
     );
+    
+    boolean isOldArchetype( File archetypeFile );
 
     /**
      */
@@ -145,6 +153,11 @@
                           ArtifactRepository archetypeRepository,
         ArtifactRepository localRepository,
         List repositories
+    )
+        throws
+        UnknownArchetype;
+    org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor getOldArchetypeDescriptor(
+        File archetypeFile
     )
         throws
         UnknownArchetype;

Modified: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java?rev=610142&r1=610141&r2=610142&view=diff
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java (original)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java Tue Jan  8 12:49:18 2008
@@ -20,19 +20,15 @@
 package org.apache.maven.archetype.common;
 
 import org.apache.maven.archetype.exception.UnknownArchetype;
-import org.apache.maven.archetype.exception.UnknownGroup;
 import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
 import org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Reader;
 import org.apache.maven.archetype.old.descriptor.ArchetypeDescriptorBuilder;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
-import org.apache.maven.artifact.repository.metadata.Plugin;
-import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
-import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
 import org.apache.maven.archetype.downloader.DownloadException;
 import org.apache.maven.archetype.downloader.DownloadNotFoundException;
 import org.apache.maven.archetype.downloader.Downloader;
+import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -47,11 +43,11 @@
 import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Enumeration;
-import java.util.Iterator;
 import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
+import org.apache.maven.model.Model;
 
 /** @plexus.component */
 public class DefaultArchetypeArtifactManager
@@ -64,6 +60,9 @@
     /** @plexus.requirement */
     private RepositoryMetadataManager repositoryMetadataManager;
 
+    /** @plexus.requirement */
+    private PomManager pomManager;
+
     public File getArchetypeFile(
         final String groupId,
         final String artifactId,
@@ -200,10 +199,29 @@
                     repositories
                 );
 
-            org.apache.maven.archetype.metadata.ArchetypeDescriptor descriptor =
-                loadFileSetArchetypeDescriptor( archetypeJarLoader );
+            return isFileSetArchetype(archetypeJarLoader);
+        }
+        catch ( XmlPullParserException e )
+        {
+            return false;
+        }
+        catch ( IOException e )
+        {
+            return false;
+        }
+        catch ( UnknownArchetype e )
+        {
+            return false;
+        }
+    }
+
+    public boolean isFileSetArchetype(File archetypeFile) {
+        try
+        {
+            ClassLoader archetypeJarLoader =
+                getArchetypeJarLoader(archetypeFile);
 
-            return descriptor.getName() != null;
+            return isFileSetArchetype(archetypeJarLoader);
         }
         catch ( XmlPullParserException e )
         {
@@ -329,10 +347,29 @@
                     repositories
                 );
 
-            org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor descriptor =
-                loadOldArchetypeDescriptor( archetypeJarLoader );
+            return isOldArchetype(archetypeJarLoader);
+        }
+        catch ( XmlPullParserException e )
+        {
+            return false;
+        }
+        catch ( IOException e )
+        {
+            return false;
+        }
+        catch ( UnknownArchetype ex )
+        {
+            return false;
+        }
+    }
+
+    public boolean isOldArchetype(File archetypeFile) {
+        try
+        {
+            ClassLoader archetypeJarLoader =
+                getArchetypeJarLoader(archetypeFile);
 
-            return descriptor.getId() != null;
+            return isOldArchetype(archetypeJarLoader);
         }
         catch ( XmlPullParserException e )
         {
@@ -398,6 +435,24 @@
         return new InputStreamReader( is );
     }
 
+    private boolean isFileSetArchetype ( ClassLoader archetypeJarLoader )
+    throws XmlPullParserException, IOException
+    {
+        org.apache.maven.archetype.metadata.ArchetypeDescriptor descriptor =
+            loadFileSetArchetypeDescriptor ( archetypeJarLoader );
+
+        return descriptor.getName () != null;
+    }
+
+    private boolean isOldArchetype ( ClassLoader archetypeJarLoader )
+    throws IOException, XmlPullParserException
+    {
+        org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor descriptor =
+            loadOldArchetypeDescriptor ( archetypeJarLoader );
+
+        return descriptor.getId () != null;
+    }
+
     private org.apache.maven.archetype.metadata.ArchetypeDescriptor loadFileSetArchetypeDescriptor(
         ClassLoader archetypeJarLoader
     )
@@ -512,5 +567,52 @@
             ( loader == null )
                 ? Thread.currentThread().getContextClassLoader().getResourceAsStream( name )
                 : loader.getResourceAsStream( name );
+    }
+
+    public Model getArchetypePom ( File jar )
+    throws XmlPullParserException, UnknownArchetype, IOException
+    {
+        String pomFileName = null;
+        ZipFile zipFile = getArchetypeZipFile ( jar );
+        Enumeration enumeration = zipFile.entries ();
+        while ( enumeration.hasMoreElements () )
+        {
+            ZipEntry el = (ZipEntry) enumeration.nextElement ();
+//            System.err.println (
+//                "entry=" + el.getName () + "  " + el.getComment () + " D" + el.isDirectory ()
+//            );
+
+            String entry = el.getName ();
+            if ( entry.startsWith ( "META-INF/maven" ) && entry.endsWith ( "pom.xml" ) )
+            {
+                pomFileName = entry;
+            }
+        }
+
+        return
+            ( pomFileName == null )
+            ? null
+            : pomManager.readPom ( zipFile.getInputStream ( zipFile.getEntry ( pomFileName ) ) );
+  }
+
+    public org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor getOldArchetypeDescriptor (
+        File archetypeFile
+    )
+    throws UnknownArchetype
+    {
+        try
+        {
+            ClassLoader archetypeJarLoader = getArchetypeJarLoader ( archetypeFile );
+
+            return loadOldArchetypeDescriptor ( archetypeJarLoader );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new UnknownArchetype ( e );
+        }
+        catch ( IOException e )
+        {
+            throw new UnknownArchetype ( e );
+        }
     }
 }

Modified: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java?rev=610142&r1=610141&r2=610142&view=diff
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java (original)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java Tue Jan  8 12:49:18 2008
@@ -290,6 +290,40 @@
         return model;
     }
 
+
+    public Model readPom( InputStream pomStream )
+        throws
+        IOException,
+        XmlPullParserException
+    { // TODO ensure correct encoding by using default one from method argument !!!
+
+        Model model;
+        Reader pomReader = null;
+        try
+        {
+//            FileCharsetDetector detector = new FileCharsetDetector( pomStream );
+
+            String fileEncoding = /*detector.isFound() ? detector.getCharset() :*/ "UTF-8";
+
+            pomReader = new InputStreamReader( pomStream, fileEncoding );
+
+            MavenXpp3Reader reader = new MavenXpp3Reader();
+
+            model = reader.read( pomReader );
+
+            if ( StringUtils.isEmpty( model.getModelEncoding() ) )
+            {
+                model.setModelEncoding( fileEncoding );
+            }
+        }
+        finally
+        {
+            IOUtil.close( pomReader );
+            pomReader = null;
+        }
+        return model;
+    }
+
     public void writePom( final Model model,
                           final File pomFile,
                           final File initialPomFile )

Modified: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java?rev=610142&r1=610141&r2=610142&view=diff
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java (original)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java Tue Jan  8 12:49:18 2008
@@ -25,8 +25,8 @@
 import org.dom4j.DocumentException;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 
 public interface PomManager
 {
@@ -53,6 +53,11 @@
         XmlPullParserException;
 
     Model readPom( File pomFile )
+        throws
+        IOException,
+        XmlPullParserException;
+    
+    Model readPom( InputStream pomStream )
         throws
         IOException,
         XmlPullParserException;

Modified: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java?rev=610142&r1=610141&r2=610142&view=diff
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java (original)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java Tue Jan  8 12:49:18 2008
@@ -29,6 +29,7 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 
 /** @author rafale */
 public class FileCharsetDetector
@@ -57,6 +58,64 @@
         );
 
         BufferedInputStream imp = new BufferedInputStream( new FileInputStream( detectedFile ) );
+
+        byte[] buf = new byte[1024];
+        int len;
+        boolean done = false;
+        boolean isAscii = true;
+
+        while ( ( len = imp.read( buf, 0, buf.length ) ) != -1 )
+        {
+            // Check if the stream is only ascii.
+            if ( isAscii )
+            {
+                isAscii = det.isAscii( buf, len );
+            }
+
+            // DoIt if non-ascii and not done yet.
+            if ( !isAscii && !done )
+            {
+                done = det.DoIt( buf, len, false );
+                found = done;
+            }
+        }
+        det.DataEnd();
+
+        if ( !isFound() )
+        {
+            String[] prob = det.getProbableCharsets();
+
+            if ( prob.length > 0 )
+            {
+                charset = prob[0];
+            }
+        }
+
+        if ( isAscii )
+        {
+            charset = "ASCII";
+        }
+    }
+
+    public FileCharsetDetector( InputStream detectedStream )
+        throws
+        FileNotFoundException,
+        IOException
+    {
+        nsDetector det = new nsDetector( nsPSMDetector.ALL );
+
+        det.Init(
+            new nsICharsetDetectionObserver()
+            {
+                public void Notify( String charset )
+                {
+                    FileCharsetDetector.this.charset = charset;
+                    FileCharsetDetector.this.found = true;
+                }
+            }
+        );
+
+        BufferedInputStream imp = new BufferedInputStream( detectedStream );
 
         byte[] buf = new byte[1024];
         int len;

Added: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java?rev=610142&view=auto
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java (added)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java Tue Jan  8 12:49:18 2008
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.archetype.repositorycrawler;
+
+import org.apache.commons.io.FileUtils;
+
+import org.apache.maven.archetype.catalog.Archetype;
+import org.apache.maven.archetype.catalog.ArchetypeCatalog;
+import org.apache.maven.archetype.common.ArchetypeArtifactManager;
+import org.apache.maven.archetype.exception.UnknownArchetype;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.MavenProject;
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * @author            rafale
+ * @plexus.component
+ */
+public class DefaultRepositoryCrawler
+extends AbstractLogEnabled
+implements RepositoryCrawler
+{
+    /**
+     * @plexus.requirement
+     */
+    private ArchetypeArtifactManager archetypeArtifactManager;
+
+    public ArchetypeCatalog crawl ( File repository )
+    {
+        if ( repository.isDirectory () )
+        {
+            ArchetypeCatalog catalog = new ArchetypeCatalog ();
+            Iterator jars =
+                FileUtils.listFiles ( repository, new String[] { "jar" }, true ).iterator ();
+
+            while ( jars.hasNext () )
+            {
+                File jar = (File) jars.next ();
+                getLogger ().info ( "Scanning " + jar );
+                if ( archetypeArtifactManager.isFileSetArchetype ( jar )
+                    || archetypeArtifactManager.isOldArchetype ( jar )
+                )
+                {
+                    try
+                    {
+                        Archetype archetype = new Archetype ();
+
+                        Model pom = archetypeArtifactManager.getArchetypePom ( jar );
+
+                        if ( archetypeArtifactManager.isFileSetArchetype ( jar ) )
+                        {
+                            org.apache.maven.archetype.metadata.ArchetypeDescriptor descriptor =
+                                archetypeArtifactManager.getFileSetArchetypeDescriptor ( jar );
+                            archetype.setDescription ( descriptor.getName () );
+                        }
+                        else
+                        {
+                            org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor descriptor =
+                                archetypeArtifactManager.getOldArchetypeDescriptor ( jar );
+                            archetype.setDescription ( descriptor.getId () );
+                        }
+                        if ( pom != null )
+                        {
+                            if ( pom.getGroupId () != null )
+                            {
+                                archetype.setGroupId ( pom.getGroupId () );
+                            }
+                            else
+                            {
+                                archetype.setGroupId ( pom.getParent ().getGroupId () );
+                            }
+                            archetype.setArtifactId ( pom.getArtifactId () );
+                            if ( pom.getVersion () != null )
+                            {
+                                archetype.setVersion ( pom.getVersion () );
+                            }
+                            else
+                            {
+                                archetype.setVersion ( pom.getParent ().getVersion () );
+                            }
+                            getLogger ().info ( "\tArchetype " + archetype + " found in pom" );
+                        }
+                        else
+                        {
+                            String version = jar.getParentFile ().getName ();
+                            
+                            String artifactId = jar.getParentFile ().getParentFile ().getName ();
+                            
+                            String groupIdSep =
+                                jar.getParentFile ().getParentFile ().getParentFile ().getPath ()
+                                .replace ( repository.getPath (), "" );
+                            String groupId = groupIdSep.replace ( File.separator, "." );
+                            groupId =
+                                groupId.startsWith ( "." ) ? groupId.substring ( 1 ) : groupId;
+                            groupId =
+                                groupId.endsWith ( "." )
+                                ? groupId.substring ( 0, groupId.length () - 1 )
+                                : groupId;
+                            
+                            archetype.setGroupId ( groupId );
+                            archetype.setArtifactId ( artifactId );
+                            archetype.setVersion ( version );
+                            
+                            getLogger ().info (
+                                "\tArchetype " + archetype + " defined by repository path"
+                            );
+                        } // end if-else
+
+                        catalog.addArchetype ( archetype );
+                    }
+                    catch ( XmlPullParserException ex )
+                    {
+                        ex.printStackTrace ();
+                    }
+                    catch ( IOException ex )
+                    {
+                        ex.printStackTrace ();
+                    }
+                    catch ( UnknownArchetype ex )
+                    {
+                        ex.printStackTrace ();
+                    } // end try-catch
+                } // end if
+            } // end while
+            return catalog;
+        }
+        else
+        {
+            getLogger ().warn ( "File is not a directory" );
+            return null;
+        } // end if-else
+    }
+}

Propchange: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/RepositoryCrawler.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/RepositoryCrawler.java?rev=610142&view=auto
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/RepositoryCrawler.java (added)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/RepositoryCrawler.java Tue Jan  8 12:49:18 2008
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.archetype.repositorycrawler;
+
+import org.apache.maven.archetype.catalog.ArchetypeCatalog;
+
+import java.io.File;
+
+/**
+ * @author  rafale
+ */
+public interface RepositoryCrawler
+{
+    String ROLE = RepositoryCrawler.class.getName ();
+
+    ArchetypeCatalog crawl ( File repository );
+}

Propchange: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/repositorycrawler/RepositoryCrawler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo?rev=610142&r1=610141&r2=610142&view=diff
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo (original)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo Tue Jan  8 12:49:18 2008
@@ -45,6 +45,16 @@
           </association>
         </field>
       </fields>
+      <codeSegments>
+        <codeSegment>
+          <code><![CDATA[
+    public String toString ()
+    {
+        return archetypes.toString();
+    }
+          ]]></code>
+        </codeSegment>
+      </codeSegments>
     </class>
     <class>
       <name>Archetype</name>

Added: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawlerTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawlerTest.java?rev=610142&view=auto
==============================================================================
--- maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawlerTest.java (added)
+++ maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawlerTest.java Tue Jan  8 12:49:18 2008
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.archetype.repositorycrawler;
+
+import org.apache.maven.archetype.catalog.ArchetypeCatalog;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+
+import java.io.File;
+
+/**
+ * @author  rafale
+ */
+public class DefaultRepositoryCrawlerTest
+extends AbstractMojoTestCase
+{
+    /**
+     * Test of crawl method, of class DefaultRepositoryCrawler.
+     */
+    public void testCrawl ()
+    throws Exception
+    {
+        System.out.println ( "crawl" );
+
+        File repository = getTestFile ( "target/test-classes/repositories/central" );
+        RepositoryCrawler instance =
+            (RepositoryCrawler) lookup ( RepositoryCrawler.class.getName () );
+
+        ArchetypeCatalog result = instance.crawl ( repository );
+        System.err.println ( "result = " + result );
+        assertTrue (
+            ( 5 <= result.getArchetypes ().size () )
+            && ( result.getArchetypes ().size () >= 7 )
+        );
+    }
+
+//    public void testCrawl2 ()
+//    throws Exception
+//    {
+//        System.out.println ( "\n\n\n\n\n\ncrawl2" );
+//
+//        File repository = new File("/home/rafale/.m2/repository");
+//                //getTestFile ( "target/test-classes/repositories/central" );
+//        RepositoryCrawler instance =
+//            (RepositoryCrawler) lookup ( RepositoryCrawler.class.getName () );
+//
+//        ArchetypeCatalog expResult = null;
+//        ArchetypeCatalog result = instance.crawl ( repository );
+//        System.err.println("result = "+result);
+//        assertEquals ( expResult, result );
+//        // TODO review the generated test code and remove the default call to fail.
+////        fail ( "The test case is a prototype." );
+//    }
+
+    protected void tearDown ()
+    throws Exception
+    {
+        super.tearDown ();
+    }
+
+    protected void setUp ()
+    throws Exception
+    {
+        super.setUp ();
+    }
+}

Propchange: maven/sandbox/branches/archetypeng-rafale-experiment/archetypeng/archetypeng-common/src/test/java/org/apache/maven/archetype/repositorycrawler/DefaultRepositoryCrawlerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native