Author: sisbell
Date: Tue Feb  3 20:48:07 2009
New Revision: 740434

URL: http://svn.apache.org/viewvc?rev=740434&view=rev
Log:
MNG-3976 - Raw Pom Retreival for Mercury.

Added:
    
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessor.java
    
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessorException.java
Modified:
    maven/components/trunk/maven-mercury/pom.xml
    maven/components/trunk/maven-project/pom.xml
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
    maven/components/trunk/pom.xml

Modified: maven/components/trunk/maven-mercury/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/pom.xml?rev=740434&r1=740433&r2=740434&view=diff
==============================================================================
--- maven/components/trunk/maven-mercury/pom.xml (original)
+++ maven/components/trunk/maven-mercury/pom.xml Tue Feb  3 20:48:07 2009
@@ -41,6 +41,11 @@
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-component-annotations</artifactId>
     </dependency>
+      
+    <dependency>
+      <groupId>org.sonatype.spice</groupId>
+      <artifactId>model-builder</artifactId>
+    </dependency>
 
     <!-- test dependencies  -->
     <dependency>

Added: 
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessor.java?rev=740434&view=auto
==============================================================================
--- 
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessor.java
 (added)
+++ 
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessor.java
 Tue Feb  3 20:48:07 2009
@@ -0,0 +1,15 @@
+package org.apache.maven.mercury;
+
+import org.apache.maven.mercury.builder.api.MetadataReaderException;
+import org.apache.maven.mercury.builder.api.MetadataReader;
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.shared.model.ModelProperty;
+
+import java.util.Map;
+import java.util.List;
+
+public interface PomProcessor
+{
+    List<ModelProperty> getRawPom(ArtifactBasicMetadata bmd, MetadataReader 
mdReader, Map env, Map sysProps)
+            throws MetadataReaderException, PomProcessorException;
+}

Added: 
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessorException.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessorException.java?rev=740434&view=auto
==============================================================================
--- 
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessorException.java
 (added)
+++ 
maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/PomProcessorException.java
 Tue Feb  3 20:48:07 2009
@@ -0,0 +1,35 @@
+package org.apache.maven.mercury;
+
+public class PomProcessorException extends Exception
+{
+    static final long serialVersionUID = 980457843528974352L;
+
+    /**
+     * Default constructor
+     */
+    public PomProcessorException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor
+     *
+     * @param message exception message
+     */
+    public PomProcessorException( String message )
+    {
+        super( message );
+    }
+
+    /**
+     * Constructor
+     *
+     * @param message exception message
+     */
+    public PomProcessorException( String message, Exception e )
+    {
+        super( message, e );
+    }
+
+}

Modified: maven/components/trunk/maven-project/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/pom.xml?rev=740434&r1=740433&r2=740434&view=diff
==============================================================================
--- maven/components/trunk/maven-project/pom.xml (original)
+++ maven/components/trunk/maven-project/pom.xml Tue Feb  3 20:48:07 2009
@@ -69,6 +69,10 @@
       <artifactId>maven-project-builder</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-mercury</artifactId>
+    </dependency>
+    <dependency>
        <groupId>commons-jxpath</groupId>
        <artifactId>commons-jxpath</artifactId>
     </dependency>

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=740434&r1=740433&r2=740434&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
 Tue Feb  3 20:48:07 2009
@@ -23,12 +23,17 @@
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 
 import org.apache.maven.MavenTools;
+import org.apache.maven.mercury.PomProcessor;
+import org.apache.maven.mercury.PomProcessorException;
+import org.apache.maven.mercury.MavenDomainModel;
+import org.apache.maven.mercury.MavenDomainModelFactory;
+import org.apache.maven.mercury.builder.api.MetadataReader;
+import org.apache.maven.mercury.builder.api.MetadataReaderException;
+import org.apache.maven.mercury.builder.api.DependencyProcessorException;
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.factory.ArtifactFactory;
@@ -61,7 +66,7 @@
  */
 @Component(role = ProjectBuilder.class)
 public class DefaultProjectBuilder
-    implements ProjectBuilder, Mixer, LogEnabled
+    implements ProjectBuilder, Mixer, PomProcessor, LogEnabled
 {
     @Requirement
     private ArtifactFactory artifactFactory;
@@ -74,6 +79,84 @@
 
     private Logger logger;
 
+    public List<ModelProperty> getRawPom(ArtifactBasicMetadata bmd, 
MetadataReader mdReader, Map system, Map user)
+            throws MetadataReaderException, PomProcessorException {
+        if ( bmd == null )
+        {
+            throw new IllegalArgumentException( "bmd: null" );
+        }
+
+        if ( mdReader == null )
+        {
+            throw new IllegalArgumentException( "mdReader: null" );
+        }
+
+        List<InterpolatorProperty> interpolatorProperties = new 
ArrayList<InterpolatorProperty>();
+        interpolatorProperties.add( new InterpolatorProperty( 
"${mavenVersion}", "3.0-SNAPSHOT",
+                                                              
PomInterpolatorTag.EXECUTION_PROPERTIES.name() ) );
+
+        if ( system != null )
+        {
+            interpolatorProperties.addAll(
+                InterpolatorProperty.toInterpolatorProperties( system, 
PomInterpolatorTag.EXECUTION_PROPERTIES.name() ) );
+        }
+        if ( user != null )
+        {
+            interpolatorProperties.addAll(
+                InterpolatorProperty.toInterpolatorProperties( user, 
PomInterpolatorTag.USER_PROPERTIES.name() ) );
+        }
+
+       List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        try
+        {
+            // MavenDomainModel superPom =
+            //     new 
MavenDomainModel(MavenDependencyProcessor.class.getResourceAsStream( 
"pom-4.0.0.xml" ));
+            // domainModels.add(superPom);
+
+            byte[] superBytes = mdReader.readMetadata( bmd );
+
+            if ( superBytes == null || superBytes.length < 1 )
+                throw new PomProcessorException( "cannot read metadata for " + 
bmd.getGAV() );
+
+            MavenDomainModel domainModel = new MavenDomainModel( superBytes );
+            domainModels.add( domainModel );
+
+            Collection<ModelContainer> activeProfiles = 
domainModel.getActiveProfileContainers( interpolatorProperties );
+
+            for ( ModelContainer mc : activeProfiles )
+            {
+                domainModels.add( new MavenDomainModel( transformProfiles( 
mc.getProperties() ) ) );
+            }
+
+            List<DomainModel> parentModels = getParentsOfDomainModel( 
domainModel, mdReader );
+
+            if( parentModels == null )
+                throw new PomProcessorException( "cannot read parent for " + 
bmd.getGAV() );
+
+            domainModels.addAll( parentModels );
+        }
+        catch ( IOException e )
+        {
+            throw new MetadataReaderException( "Failed to create domain model. 
Message = " + e.getMessage() );
+        }
+
+        PomTransformer transformer = new PomTransformer( new 
MavenDomainModelFactory() );
+        ModelTransformerContext ctx =
+            new ModelTransformerContext( PomTransformer.MODEL_CONTAINER_INFOS 
);
+
+        try
+        {
+            MavenDomainModel model =
+                ( (MavenDomainModel) ctx.transform( domainModels, transformer, 
transformer, null,
+                                                    interpolatorProperties, 
null ) );
+            return model.getModelProperties();
+        }
+        catch ( IOException e )
+        {
+            throw new MetadataReaderException( "Unable to transform model" );
+        }
+    }
+
     public PomClassicDomainModel buildModel( File pom, 
                                              Collection<InterpolatorProperty> 
interpolatorProperties,
                                              PomArtifactResolver resolver )
@@ -476,4 +559,39 @@
         }
         return "";
     }
+
+    private static List<DomainModel> getParentsOfDomainModel( MavenDomainModel 
domainModel, MetadataReader mdReader )
+        throws IOException, MetadataReaderException, PomProcessorException
+    {
+        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        if ( domainModel.hasParent() )
+        {
+            byte[] b = mdReader.readMetadata( domainModel.getParentMetadata() 
);
+
+            if ( b == null || b.length < 1 )
+                throw new PomProcessorException( "cannot read metadata for " + 
domainModel.getParentMetadata() );
+
+            MavenDomainModel parentDomainModel =
+                new MavenDomainModel( b );
+            domainModels.add( parentDomainModel );
+            domainModels.addAll( getParentsOfDomainModel( parentDomainModel, 
mdReader ) );
+        }
+        return domainModels;
+    }
+
+    private static List<ModelProperty> transformProfiles( List<ModelProperty> 
modelProperties )
+    {
+        List<ModelProperty> properties = new ArrayList<ModelProperty>();
+        for ( ModelProperty mp : modelProperties )
+        {
+            if ( mp.getUri().startsWith( ProjectUri.Profiles.Profile.xUri )
+                && !mp.getUri().equals( ProjectUri.Profiles.Profile.id )
+                && !mp.getUri().startsWith( 
ProjectUri.Profiles.Profile.Activation.xUri ) )
+            {
+                properties.add( new ModelProperty( mp.getUri().replace( 
ProjectUri.Profiles.Profile.xUri,
+                                                                        
ProjectUri.xUri ), mp.getResolvedValue() ) );
+            }
+        }
+        return properties;
+    }
 }

Modified: maven/components/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/pom.xml?rev=740434&r1=740433&r2=740434&view=diff
==============================================================================
--- maven/components/trunk/pom.xml (original)
+++ maven/components/trunk/pom.xml Tue Feb  3 20:48:07 2009
@@ -251,6 +251,11 @@
       <!--start-->
       <dependency>
         <groupId>org.apache.maven</groupId>
+        <artifactId>maven-mercury</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
         <artifactId>maven-lifecycle</artifactId>
         <version>${project.version}</version>
       </dependency>


Reply via email to