Author: rafale
Date: Thu Jan 10 13:17:00 2008
New Revision: 610933

URL: http://svn.apache.org/viewvc?rev=610933&view=rev
Log:
merged from experimentation (tested manual roundtrip on quickstart)

Modified:
    
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
    
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
    
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
    
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
    
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
    
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo

Modified: 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java?rev=610933&r1=610932&r2=610933&view=diff
==============================================================================
--- 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
 (original)
+++ 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/ArchetypeArtifactManager.java
 Thu Jan 10 13:17:00 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/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java?rev=610933&r1=610932&r2=610933&view=diff
==============================================================================
--- 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
 (original)
+++ 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
 Thu Jan 10 13:17:00 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/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java?rev=610933&r1=610932&r2=610933&view=diff
==============================================================================
--- 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
 (original)
+++ 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/DefaultPomManager.java
 Thu Jan 10 13:17:00 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/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java?rev=610933&r1=610932&r2=610933&view=diff
==============================================================================
--- 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
 (original)
+++ 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/PomManager.java
 Thu Jan 10 13:17:00 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/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java?rev=610933&r1=610932&r2=610933&view=diff
==============================================================================
--- 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
 (original)
+++ 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/java/org/apache/maven/archetype/common/util/FileCharsetDetector.java
 Thu Jan 10 13:17:00 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;

Modified: 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo?rev=610933&r1=610932&r2=610933&view=diff
==============================================================================
--- 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo
 (original)
+++ 
maven/sandbox/trunk/archetypeng/archetypeng-common/src/main/mdo/archetype-catalog.mdo
 Thu Jan 10 13:17:00 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>


Reply via email to