Author: jdcasey
Date: Mon Aug 22 12:00:51 2005
New Revision: 239219

URL: http://svn.apache.org/viewcvs?rev=239219&view=rev
Log:
Resolving: MNG-251

o Added transformation manager
o snapshot timestamp/buildnumber is now managed from the transformation rather 
than the metadata
o maven-archiver now clones the MavenProject and resolves snapshot versions for 
introduction into manifest and exported pom.


Added:
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
   (with props)
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
   (with props)
Modified:
    
maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
    
maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
    
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml

Modified: 
maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
 (original)
+++ 
maven/components/trunk/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
 Mon Aug 22 12:00:51 2005
@@ -42,7 +42,7 @@
 public class MavenArchiver
 {
     private JarArchiver archiver = new JarArchiver();
-
+    
     private File archiveFile;
 
     /**
@@ -59,6 +59,14 @@
         m.addConfiguredAttribute( buildAttr );
         Manifest.Attribute createdAttr = new Manifest.Attribute( "Created-By", 
"Apache Maven" );
         m.addConfiguredAttribute( createdAttr );
+        
+        Artifact projectArtifact = project.getArtifact();
+        
+        if ( projectArtifact.isSnapshot() )
+        {
+            Manifest.Attribute buildNumberAttr = new Manifest.Attribute( 
"Build-Number", "" + project.getSnapshotDeploymentBuildNumber() );
+            m.addConfiguredAttribute( buildNumberAttr );
+        }
 
         if ( config.getPackageName() != null )
         {
@@ -214,12 +222,21 @@
         // top-level POM elements so that applications that wish to access
         // POM information without the use of maven tools can do so.
         // 
----------------------------------------------------------------------
+        
+        // we have to clone the project instance so we can write out the pom 
with the deployment version,
+        // without impacting the main project instance...
+        MavenProject workingProject = new MavenProject( project );
+        
+        if ( workingProject.getArtifact().isSnapshot() )
+        {
+            workingProject.setVersion( 
workingProject.getSnapshotDeploymentVersion() );
+        }
+        
+        String groupId = workingProject.getGroupId();
 
-        String groupId = project.getGroupId();
-
-        String artifactId = project.getArtifactId();
+        String artifactId = workingProject.getArtifactId();
 
-        File exportReadyPom = writeExportReadyPom( project );
+        File exportReadyPom = writeExportReadyPom( workingProject );
 
         archiver.addFile( exportReadyPom, "META-INF/maven/" + groupId + "/" + 
artifactId + "/pom.xml" );
 
@@ -229,13 +246,13 @@
 
         Properties p = new Properties();
 
-        p.setProperty( "groupId", project.getGroupId() );
+        p.setProperty( "groupId", workingProject.getGroupId() );
 
-        p.setProperty( "artifactId", project.getArtifactId() );
+        p.setProperty( "artifactId", workingProject.getArtifactId() );
 
-        p.setProperty( "version", project.getVersion() );
+        p.setProperty( "version", workingProject.getVersion() );
 
-        File pomPropertiesFile = new File( project.getFile().getParentFile(), 
"pom.properties" );
+        File pomPropertiesFile = new File( 
workingProject.getFile().getParentFile(), "pom.properties" );
 
         OutputStream os = new FileOutputStream( pomPropertiesFile );
 
@@ -256,7 +273,7 @@
             archiver.setManifest( manifestFile );
         }
 
-        Manifest manifest = getManifest( project, 
archiveConfiguration.getManifest() );
+        Manifest manifest = getManifest( workingProject, 
archiveConfiguration.getManifest() );
 
         // Configure the jar
         archiver.addConfiguredManifest( manifest );

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
 Mon Aug 22 12:00:51 2005
@@ -21,7 +21,7 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.wagon.TransferFailedException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
@@ -29,15 +29,14 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
-import java.util.List;
 
 public class DefaultArtifactDeployer
     extends AbstractLogEnabled
     implements ArtifactDeployer
 {
     private WagonManager wagonManager;
-
-    private List artifactTransformations;
+    
+    private ArtifactTransformationManager transformationManager;
 
     /** @deprecated we want to use the artifact method only, and ensure 
artifact.file is set correctly. */
     public void deploy( String basedir, String finalName, Artifact artifact, 
ArtifactRepository deploymentRepository,
@@ -55,12 +54,7 @@
     {
         try
         {
-            // TODO: better to have a transform manager, or reuse the handler 
manager again so we don't have these requirements duplicated all over?
-            for ( Iterator i = artifactTransformations.iterator(); 
i.hasNext(); )
-            {
-                ArtifactTransformation transform = (ArtifactTransformation) 
i.next();
-                transform.transformForDeployment( artifact, 
deploymentRepository );
-            }
+            transformationManager.transformForDeployment( artifact, 
localRepository );
 
             // Copy the original file to the new one if it was transformed
             File artifactFile = new File( localRepository.getBasedir(), 
localRepository.pathOf( artifact ) );

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
 Mon Aug 22 12:00:51 2005
@@ -20,20 +20,19 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
-import java.util.List;
 
 public class DefaultArtifactInstaller
     extends AbstractLogEnabled
     implements ArtifactInstaller
 {
-    private List artifactTransformations;
+    private ArtifactTransformationManager transformationManager;
 
     /** @deprecated we want to use the artifact method only, and ensure 
artifact.file is set correctly. */
     public void install( String basedir, String finalName, Artifact artifact, 
ArtifactRepository localRepository )
@@ -50,12 +49,7 @@
     {
         try
         {
-            // TODO: better to have a transform manager, or reuse the handler 
manager again so we don't have these requirements duplicated all over?
-            for ( Iterator i = artifactTransformations.iterator(); 
i.hasNext(); )
-            {
-                ArtifactTransformation transform = (ArtifactTransformation) 
i.next();
-                transform.transformForInstall( artifact, localRepository );
-            }
+            transformationManager.transformForInstall( artifact, 
localRepository );
 
             String localPath = localRepository.pathOf( artifact );
 

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/SnapshotArtifactMetadata.java
 Mon Aug 22 12:00:51 2005
@@ -43,9 +43,6 @@
 
     private static final String UTC_TIMESTAMP_PATTERN = "yyyyMMdd.HHmmss";
 
-    // TODO: very quick and nasty hack to get the same timestamp across a 
build - not embedder friendly
-    private static String sessionTimestamp = null;
-
     public SnapshotArtifactMetadata( Artifact artifact )
     {
         super( artifact, artifact.getArtifactId() + "-" + 
artifact.getBaseVersion() + "." + SNAPSHOT_VERSION_FILE );
@@ -83,11 +80,22 @@
             buildNumber = 0;
         }
     }
+    
+    public void setVersion( String timestamp, int buildNumber )
+    {
+        this.timestamp = timestamp;
+        this.buildNumber = buildNumber;
+    }
 
     public String getTimestamp()
     {
         return timestamp;
     }
+    
+    public int getBuildNumber()
+    {
+        return buildNumber;
+    }
 
     public static DateFormat getUtcDateFormatter()
     {
@@ -95,22 +103,6 @@
         utcDateFormatter.setTimeZone( UTC_TIME_ZONE );
         return utcDateFormatter;
     }
-
-    public void update()
-    {
-        this.buildNumber++;
-        timestamp = getSessionTimestamp();
-    }
-
-    private static String getSessionTimestamp()
-    {
-        if ( sessionTimestamp == null )
-        {
-            sessionTimestamp = getUtcDateFormatter().format( new Date() );
-        }
-        return sessionTimestamp;
-    }
-
 
     public int compareTo( Object o )
     {

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
 Mon Aug 22 12:00:51 2005
@@ -24,7 +24,7 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -46,8 +46,8 @@
     // ----------------------------------------------------------------------
 
     private WagonManager wagonManager;
-
-    private List artifactTransformations;
+    
+    private ArtifactTransformationManager transformationManager;
 
     protected ArtifactFactory artifactFactory;
 
@@ -86,18 +86,13 @@
 
             artifact.setFile( new File( localRepository.getBasedir(), 
localPath ) );
 
-            // TODO: better to have a transform manager, or reuse the handler 
manager again so we don't have these requirements duplicated all over?
-            for ( Iterator i = artifactTransformations.iterator(); 
i.hasNext(); )
+            try
+            {
+                transformationManager.transformForResolve( artifact, 
remoteRepositories, localRepository );
+            }
+            catch ( ArtifactMetadataRetrievalException e )
             {
-                ArtifactTransformation transform = (ArtifactTransformation) 
i.next();
-                try
-                {
-                    transform.transformForResolve( artifact, 
remoteRepositories, localRepository );
-                }
-                catch ( ArtifactMetadataRetrievalException e )
-                {
-                    throw new ArtifactResolutionException( e.getMessage(), 
artifact, remoteRepositories, e );
-                }
+                throw new ArtifactResolutionException( e.getMessage(), 
artifact, remoteRepositories, e );
             }
 
             File destination = artifact.getFile();

Added: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java?rev=239219&view=auto
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
 (added)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
 Mon Aug 22 12:00:51 2005
@@ -0,0 +1,63 @@
+package org.apache.maven.artifact.transform;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.util.Iterator;
+import java.util.List;
+
+public class DefaultArtifactTransformationManager
+    implements ArtifactTransformationManager
+{
+
+    private List artifactTransformations;
+    
+    private SnapshotTransformation snapshotTransformation;
+
+    public void transformForResolve( Artifact artifact, List 
remoteRepositories, ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+        {
+            ArtifactTransformation transform = (ArtifactTransformation) 
i.next();
+            transform.transformForResolve( artifact, remoteRepositories, 
localRepository );
+        }
+    }
+
+    public void transformForInstall( Artifact artifact, ArtifactRepository 
localRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+        {
+            ArtifactTransformation transform = (ArtifactTransformation) 
i.next();
+            transform.transformForInstall( artifact, localRepository );
+        }
+    }
+
+    public void transformForDeployment( Artifact artifact, ArtifactRepository 
remoteRepository )
+        throws ArtifactMetadataRetrievalException
+    {
+        for ( Iterator i = artifactTransformations.iterator(); i.hasNext(); )
+        {
+            ArtifactTransformation transform = (ArtifactTransformation) 
i.next();
+            transform.transformForDeployment( artifact, remoteRepository );
+        }
+    }
+
+    public String getSnapshotDeploymentTimestamp()
+    {
+        return snapshotTransformation.getDeploymentTimestamp();
+    }
+
+    public int getSnapshotDeploymentBuildNumber( Artifact artifact )
+    {
+        return snapshotTransformation.getDeploymentBuildNumber( artifact);
+    }
+
+    public String getSnapshotDeploymentVersion( Artifact snapshotArtifact )
+    {
+        return snapshotTransformation.getDeploymentVersion( snapshotArtifact );
+    }
+
+}

Propchange: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/DefaultArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/SnapshotTransformation.java
 Mon Aug 22 12:00:51 2005
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.metadata.AbstractVersionArtifactMetadata;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.SnapshotArtifactMetadata;
@@ -24,7 +25,10 @@
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
@@ -35,6 +39,12 @@
 public class SnapshotTransformation
     extends AbstractVersionTransformation
 {
+    private String deploymentTimestamp;
+
+    private int deploymentBuildNumber = 1;
+
+    private Map buildNumbers = new HashMap();
+
     public void transformForResolve( Artifact artifact, List 
remoteRepositories, ArtifactRepository localRepository )
         throws ArtifactMetadataRetrievalException
     {
@@ -66,6 +76,8 @@
             {
                 metadata = (SnapshotArtifactMetadata) 
retrieveFromRemoteRepository( artifact, remoteRepository, null,
                                                                                
     ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+                
+                updateDeploymentBuildNumber( artifact, 
metadata.getTimestamp(), metadata.getBuildNumber() );
             }
             catch ( ResourceDoesNotExistException e )
             {
@@ -77,7 +89,7 @@
                 metadata = (SnapshotArtifactMetadata) createMetadata( artifact 
);
             }
 
-            metadata.update();
+            metadata.setVersion( getDeploymentTimestamp(), 
deploymentBuildNumber );
 
             artifact.setResolvedVersion( metadata.constructVersion() );
 
@@ -85,9 +97,62 @@
         }
     }
 
+    private void updateDeploymentBuildNumber( Artifact artifact, String 
timestamp, int buildNumberFromMetadata )
+    {
+        // we only have to handle bumping the build number if we're on the 
same timestamp, somehow...miraculously
+        if ( deploymentTimestamp.equals( timestamp ) )
+        {
+            String artifactKey = ArtifactUtils.versionlessKey( artifact );
+            
+            Integer buildNum = (Integer) buildNumbers.get( artifactKey );
+            
+            if ( buildNum == null || buildNum.intValue() <= 
buildNumberFromMetadata )
+            {
+                buildNum = new Integer( buildNumberFromMetadata + 1 );
+                
+                buildNumbers.put( artifactKey, buildNum );
+            }
+        }
+    }
+
+    public String getDeploymentTimestamp()
+    {
+        if ( deploymentTimestamp == null )
+        {
+            deploymentTimestamp = 
SnapshotArtifactMetadata.getUtcDateFormatter().format( new Date() );
+        }
+        return deploymentTimestamp;
+    }
+    
+    public int getDeploymentBuildNumber( Artifact artifact )
+    {
+        String artifactKey = ArtifactUtils.versionlessKey( artifact );
+        
+        Integer buildNum = (Integer) buildNumbers.get( artifactKey );
+        
+        if ( buildNum == null )
+        {
+            buildNum = new Integer( 1 );
+            buildNumbers.put( artifactKey, buildNum );
+        }
+        
+        return buildNum.intValue();
+    }
+
     protected AbstractVersionArtifactMetadata createMetadata( Artifact 
artifact )
     {
         return new SnapshotArtifactMetadata( artifact );
+    }
+
+    public String getDeploymentVersion( Artifact artifact )
+    {
+        int buildnum = getDeploymentBuildNumber( artifact );
+        
+        SnapshotArtifactMetadata metadata = (SnapshotArtifactMetadata) 
createMetadata( artifact );
+        
+        metadata.setVersion( getDeploymentTimestamp(), buildnum );
+        
+        return metadata.constructVersion();
     }
 
 }

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/resources/META-INF/plexus/components.xml
 Mon Aug 22 12:00:51 2005
@@ -47,6 +47,28 @@
         </requirement>
       </requirements>
     </component>
+    
+    <!--
+     |
+     | ArtifactTransformationManager
+     |
+     -->
+    <component>
+      
<role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
+      
<implementation>org.apache.maven.artifact.transform.DefaultArtifactTransformationManager</implementation>
+      <requirements>
+        <requirement>
+          
<role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
+          <field-name>artifactTransformations</field-name>
+        </requirement>
+        <requirement>
+          
<role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
+          <role-hint>snapshot</role-hint>
+          <field-name>snapshotTransformation</field-name>
+        </requirement>
+      </requirements>
+    </component>
+
     <!--
      |
      | Resolver
@@ -60,8 +82,7 @@
           <role>org.apache.maven.artifact.manager.WagonManager</role>
         </requirement>
         <requirement>
-          
<role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-          <field-name>artifactTransformations</field-name>
+          
<role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
         </requirement>
         <requirement>
           <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
@@ -82,8 +103,7 @@
       
<implementation>org.apache.maven.artifact.installer.DefaultArtifactInstaller</implementation>
       <requirements>
         <requirement>
-          
<role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-          <field-name>artifactTransformations</field-name>
+          
<role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
         </requirement>
       </requirements>
     </component>
@@ -101,8 +121,7 @@
           <role>org.apache.maven.artifact.manager.WagonManager</role>
         </requirement>
         <requirement>
-          
<role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-          <field-name>artifactTransformations</field-name>
+          
<role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
         </requirement>
       </requirements>
     </component>

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformation.java
 Mon Aug 22 12:00:51 2005
@@ -61,4 +61,5 @@
      */
     void transformForDeployment( Artifact artifact, ArtifactRepository 
remoteRepository )
         throws ArtifactMetadataRetrievalException;
+    
 }

Added: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java?rev=239219&view=auto
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
 (added)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
 Mon Aug 22 12:00:51 2005
@@ -0,0 +1,62 @@
+package org.apache.maven.artifact.transform;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.util.List;
+
+/**
+ * Manages multiple ArtifactTransformation instances and applies them in 
succession.
+ */
+public interface ArtifactTransformationManager
+{
+    String ROLE = ArtifactTransformationManager.class.getName();
+
+    /**
+     * Take in a artifact and return the transformed artifact for locating in 
the remote repository. If no
+     * transformation has occured the original artifact is returned.
+     *
+     * @param artifact Artifact to be transformed.
+     * @param remoteRepositories the repositories to check
+     * @param localRepository the local repository
+     */
+    void transformForResolve( Artifact artifact, List remoteRepositories, 
ArtifactRepository localRepository )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
+     * Take in a artifact and return the transformed artifact for locating in 
the local repository. If no
+     * transformation has occured the original artifact is returned.
+     *
+     * @param artifact Artifact to be transformed.
+     * @param localRepository the local repository it will be stored in
+     */
+    void transformForInstall( Artifact artifact, ArtifactRepository 
localRepository )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
+     * Take in a artifact and return the transformed artifact for distributing 
toa remote repository. If no
+     * transformation has occured the original artifact is returned.
+     *
+     * @param artifact Artifact to be transformed.
+     * @param remoteRepository the repository to deploy to
+     */
+    void transformForDeployment( Artifact artifact, ArtifactRepository 
remoteRepository )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
+     * Return the timestamp which will be used to deploy artifacts from this 
build.
+     */
+    String getSnapshotDeploymentTimestamp();
+
+    /**
+     * Return the buildnumber which will be used to deploy artifacts from this 
build.
+     */
+    int getSnapshotDeploymentBuildNumber( Artifact snapshotArtifact );
+    
+    /**
+     * Return the artifact-version which will be used to deploy artifacts from 
this build.
+     */
+    String getSnapshotDeploymentVersion( Artifact snapshotArtifact );
+
+}

Propchange: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/transform/ArtifactTransformationManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Mon Aug 22 12:00:51 2005
@@ -26,6 +26,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Build;
@@ -120,6 +121,8 @@
 
     private ArtifactRepositoryFactory artifactRepositoryFactory;
 
+    private ArtifactTransformationManager transformationManager;
+
     private final Map modelCache = new HashMap();
 
     public static final String MAVEN_MODEL_VERSION = "4.0.0";
@@ -576,6 +579,13 @@
         Artifact projectArtifact = artifactFactory.createBuildArtifact( 
project.getGroupId(), project.getArtifactId(),
                                                                         
project.getVersion(), project.getPackaging() );
         project.setArtifact( projectArtifact );
+        
+        if ( projectArtifact.isSnapshot() )
+        {
+            project.setSnapshotDeploymentVersion( 
transformationManager.getSnapshotDeploymentVersion( projectArtifact ) );
+            
+            project.setSnapshotDeploymentBuildNumber( 
transformationManager.getSnapshotDeploymentBuildNumber( projectArtifact ) );
+        }
 
         project.setPluginArtifactRepositories( 
ProjectUtils.buildArtifactRepositories( model.getPluginRepositories(),
                                                                                
        artifactRepositoryFactory,

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
 Mon Aug 22 12:00:51 2005
@@ -137,6 +137,10 @@
 
     private Build buildOverlay;
 
+    private String snapshotDeploymentVersion;
+
+    private int snapshotDeploymentBuildNumber = -1;
+
     public MavenProject( Model model )
     {
         this.model = model;
@@ -182,6 +186,9 @@
         {
             this.originalModel = ModelUtils.cloneModel( project.originalModel 
);
         }
+        
+        this.snapshotDeploymentVersion = project.snapshotDeploymentVersion;
+        this.snapshotDeploymentBuildNumber = 
project.snapshotDeploymentBuildNumber;
 
         // TODO: need to clone this too?
         this.artifact = project.artifact;
@@ -1340,6 +1347,33 @@
 
     public void attachArtifact( String type, String classifier, File file )
     {
+    }
+
+    public void setSnapshotDeploymentVersion( String deploymentVersion )
+    {
+        this.snapshotDeploymentVersion = deploymentVersion;
+    }
+    
+    public String getSnapshotDeploymentVersion()
+    {
+        if ( snapshotDeploymentVersion == null )
+        {
+            return getVersion();
+        }
+        else
+        {
+            return snapshotDeploymentVersion;
+        }
+    }
+    
+    public void setSnapshotDeploymentBuildNumber( int deploymentBuildNumber )
+    {
+        this.snapshotDeploymentBuildNumber = deploymentBuildNumber;
+    }
+    
+    public int getSnapshotDeploymentBuildNumber()
+    {
+        return snapshotDeploymentBuildNumber;
     }
     
 }

Modified: 
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml?rev=239219&r1=239218&r2=239219&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
 (original)
+++ 
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
 Mon Aug 22 12:00:51 2005
@@ -51,6 +51,9 @@
       
<implementation>org.apache.maven.project.DefaultMavenProjectBuilder</implementation>
       <requirements>
         <requirement>
+          
<role>org.apache.maven.artifact.transform.ArtifactTransformationManager</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.profiles.MavenProfilesBuilder</role>
         </requirement>
         <requirement>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to