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>