You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2006/01/23 18:00:41 UTC

svn commit: r371593 - in /cocoon/trunk: cocoon-deployer/src/main/java/org/apache/cocoon/deployer/ cocoon-plugins/cocoon-deployer-plugin-demo/ cocoon-plugins/cocoon-deployer-plugin/ cocoon-plugins/cocoon-deployer-plugin/src/main/java/org/apache/cocoon/m...

Author: reinhard
Date: Mon Jan 23 09:00:31 2006
New Revision: 371593

URL: http://svn.apache.org/viewcvs?rev=371593&view=rev
Log:
add implementation for resolving library dependencies using M2 (untested!); some javadocs, addreadme

Added:
    cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/README.txt
Modified:
    cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/ArtifactProvider.java
    cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java
    cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin-demo/pom.xml
    cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/src/main/java/org/apache/cocoon/maven/deployer/MavenArtifactProvider.java

Modified: cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/ArtifactProvider.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/ArtifactProvider.java?rev=371593&r1=371592&r2=371593&view=diff
==============================================================================
--- cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/ArtifactProvider.java (original)
+++ cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/ArtifactProvider.java Mon Jan 23 09:00:31 2006
@@ -29,6 +29,6 @@
 	 * This method is used to resolve all dependencies of the passed artifact ids. It supports
 	 * transitive dependencies and makes sure that only one version of an artifact is returned.
 	 */
-	public File[] getArtifact(String[] artifactIds);
+	public File[] getArtifact(String mainArtifactId, String[] artifactIds);
 	
 }

Modified: cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java?rev=371593&r1=371592&r2=371593&view=diff
==============================================================================
--- cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java (original)
+++ cocoon/trunk/cocoon-deployer/src/main/java/org/apache/cocoon/deployer/BlockDeployer.java Mon Jan 23 09:00:31 2006
@@ -100,6 +100,7 @@
 		}
 		
 		// get all dependant libraries transitivly
+		// TBD artifactProvider.getArtifact()
 		
 		// deploy the blocks
 		CocoonServer cocoonServer = CocoonServerFactory.createServer(

Modified: cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin-demo/pom.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin-demo/pom.xml?rev=371593&r1=371592&r2=371593&view=diff
==============================================================================
--- cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin-demo/pom.xml (original)
+++ cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin-demo/pom.xml Mon Jan 23 09:00:31 2006
@@ -41,6 +41,12 @@
         <artifactId>cocoon-block-deployer-plugin</artifactId>
         <version>1.0-SNAPSHOT</version>
       </plugin>
+      <!--plugin>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <classifier>cob</classifier>        
+        </configuration>        
+      </plugin-->
     </plugins>
   </build>  
   

Added: cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/README.txt
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/README.txt?rev=371593&view=auto
==============================================================================
--- cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/README.txt (added)
+++ cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/README.txt Mon Jan 23 09:00:31 2006
@@ -0,0 +1,5 @@
+This project is a minimal sample of a web application that hosts Cocoon blocks. It is used by the 
+block deployer if no webapp is available.
+
+When the development of the block deployer has stabilized, this block will become an archetype instead.
+

Modified: cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/src/main/java/org/apache/cocoon/maven/deployer/MavenArtifactProvider.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/src/main/java/org/apache/cocoon/maven/deployer/MavenArtifactProvider.java?rev=371593&r1=371592&r2=371593&view=diff
==============================================================================
--- cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/src/main/java/org/apache/cocoon/maven/deployer/MavenArtifactProvider.java (original)
+++ cocoon/trunk/cocoon-plugins/cocoon-deployer-plugin/src/main/java/org/apache/cocoon/maven/deployer/MavenArtifactProvider.java Mon Jan 23 09:00:31 2006
@@ -16,24 +16,27 @@
  */
 package org.apache.cocoon.maven.deployer;
 
-import org.apache.cocoon.deployer.ArtifactProvider;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
+import org.apache.cocoon.deployer.ArtifactProvider;
 import org.apache.commons.lang.Validate;
-
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 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.model.Dependency;
 import org.apache.maven.plugin.logging.Log;
-
 import org.apache.maven.project.artifact.MavenMetadataSource;
 
-import java.io.File;
-import java.util.List;
-
 
 /**
  * Implementation of a {@link ArtifactProvider} to bridge from Maven 2
@@ -65,12 +68,12 @@
     /**
      * Creates a new MavenArtifactProvider object.
      *
-     * @param artifactResolver DOCUMENT ME!
-     * @param artifactFactory DOCUMENT ME!
-     * @param localRepository DOCUMENT ME!
-     * @param remoteArtifactRepositories DOCUMENT ME!
-     * @param metadataSource DOCUMENT ME!
-     * @param log DOCUMENT ME!
+     * @param artifactResolver - used to get Maven artifacts from the repositories
+     * @param artifactFactory - used to create Maven artifact skeletons
+     * @param localRepository - get access to the user's local repo
+     * @param remoteArtifactRepositories - get access to all configured remote repositories
+     * @param metadataSource - used to resolve transitive dependencies
+     * @param log - get access to the logger
      */
     public MavenArtifactProvider(final ArtifactResolver artifactResolver,
                                  final ArtifactFactory artifactFactory,
@@ -93,33 +96,81 @@
      * @see org.apache.cocoon.deployer.ArtifactProvider#getArtifact(java.lang.String)
      */
     public final File getArtifact(final String artifactId) {
-        try {
-            final Artifact artifact = getArtifactFor(artifactId);
-
-            return artifact.getFile();
-        } catch(Exception ex) {
-            this.log.error(ex);
-        }
-
-        return null;
-    }
+		try {
+			final ArtifactBean artifactBean = getArtifactBeanFor(artifactId);
+			final Artifact artifact = this.artifactFactory.createBuildArtifact(
+					artifactBean.getGroupId(), 
+					artifactBean.getArtifactId(),
+					artifactBean.getVersion(),
+					artifactBean.getType());
+
+			this.artifactResolver.resolve(artifact, this.remoteArtifactRepositories, this.localRepository);
+
+			this.log.debug("[MavenArtifactProvider.getArtifactFor: found "
+					+ artifact.getFile().getAbsolutePath());
+			
+			return artifact.getFile();
+		} catch (Exception ex) {
+			this.log.error(ex);
+		}
+		return null;
+	}
 
     /**
-     * @see org.apache.cocoon.deployer.ArtifactProvider#getArtifact(java.lang.String[])
-     */
-    public final File[] getArtifact(String[] artifactIds) {
+	 * @see org.apache.cocoon.deployer.ArtifactProvider#getArtifact(java.lang.String[])
+	 */
+    public final File[] getArtifact(String mainArtifactId, String[] artifactIds) {
     	
-    	// FIXME (reinhard) this doesn't use transitive dependency resolving!
+    	// !!! this method has never been testet !!!
     	
     	Validate.notNull(artifactIds, "artifactIds mustn't be null");
     	Validate.noNullElements(artifactIds, "Quering a 'null'-artifact is not possible");
-        final File[] files = new File[artifactIds.length];
-
-        for(int i = 0; i < artifactIds.length; i++) {
-            files[i] = getArtifact(artifactIds[i]);
-        }
-
-        return files;
+    	
+    	File[] returnFiles = new File[0];
+        List returnFilesList = new ArrayList();
+        
+    	try {
+			List dependencies = new ArrayList();
+	        Set artifacts = null;		
+	        
+	        ArtifactBean mainArtifactBean = getArtifactBeanFor(mainArtifactId);
+            Artifact mainArtifact = artifactFactory.createBuildArtifact(
+                mainArtifactBean.getGroupId(),
+                mainArtifactBean.getArtifactId(),
+                mainArtifactBean.getVersion(),
+                mainArtifactBean.getType());		        
+	        
+    		for(int i = 0; i < artifactIds.length; i++) {
+	    		ArtifactBean artifactBean = getArtifactBeanFor(artifactIds[i]);
+				Dependency dependency = new Dependency();
+				dependency.setGroupId(artifactBean.getGroupId());				
+				dependency.setArtifactId(artifactBean.getArtifactId());
+				dependency.setVersion(artifactBean.getVersion());    	
+				dependency.setType(artifactBean.getType());
+				dependencies.add(dependencies);
+	    	}
+    		
+            artifacts = MavenMetadataSource.createArtifacts( this.artifactFactory, dependencies, null, null, null );		   		
+		
+            Map managedDependencies = Collections.EMPTY_MAP;			
+            artifacts = MavenMetadataSource.createArtifacts( artifactFactory, dependencies, null, null, null );			
+            ArtifactResolutionResult result = artifactResolver.resolveTransitively( 
+            		artifacts, mainArtifact, managedDependencies, localRepository,
+                    remoteArtifactRepositories, metadataSource);   
+            
+
+    	    for(Iterator i = result.getArtifacts().iterator(); i.hasNext();) {
+                Artifact artifact = (Artifact) i.next();
+                returnFilesList.add(artifact.getFile());
+            }		            
+
+    	    returnFiles = (File[]) returnFilesList.toArray((new File[returnFilesList.size()]));
+    	    
+    	} catch (Exception ex) {
+			this.log.error(ex);
+		}
+    	
+    	return returnFiles;
     }
 
     /**
@@ -132,7 +183,7 @@
      * @throws ArtifactResolutionException The <code>ArtifactResolutionException</code>
      * @throws ArtifactNotFoundException The <code>ArtifactNotFoundException</code>
      */
-    private Artifact getArtifactFor(final String artifactSpec)
+    private ArtifactBean getArtifactBeanFor(final String artifactSpec)
         throws ArtifactResolutionException, ArtifactNotFoundException {
         this.log.debug("[MavenArtifactProvider.getArtifactFor: artifactSpec=" + artifactSpec);    	
     	
@@ -155,15 +206,38 @@
         this.log.debug("[MavenArtifactProvider.getArtifactFor: version=" + version);       
         this.log.debug("[MavenArtifactProvider.getArtifactFor: type=" + type);            
         
-        final Artifact artifact = 
-        	this.artifactFactory.createBuildArtifact(groupId, artifactId, version, type);
-        
-        this.artifactResolver.resolve(artifact, this.remoteArtifactRepositories, 
-            this.localRepository);
+        return new ArtifactBean(groupId, artifactId, version, type);
+    }
+    
+    /**
+     * Used to hold the data of the artifact data parsing process.
+     */
+    static class ArtifactBean {
+    	private String groupId;
+    	private String artifactId;
+    	private String version;
+    	private String type;
+    	
+    	public ArtifactBean(String groupId, String artifactId, String version, String type) {
+    		this.groupId = groupId;
+    		this.artifactId = artifactId;
+    		this.version = version;
+    		this.type = type;
+    	}
+    	
+		public String getArtifactId() {
+			return artifactId;
+		}
+		public String getGroupId() {
+			return groupId;
+		}
+		public String getType() {
+			return type;
+		}
+		public String getVersion() {
+			return version;
+		}
 
-        this.log.debug("[MavenArtifactProvider.getArtifactFor: found " + 
-            artifact.getFile().getAbsolutePath());
-        
-        return artifact;
     }
+    
 }