You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/06/14 17:25:48 UTC
svn commit: r547277 [15/16] - in /maven/archiva/trunk: archiva-base/
archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/
archiva-base/archiva-dependency-graph/ archiva-base/archiva-depend...
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java?view=diff&rev=547277&r1=547276&r2=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java Thu Jun 14 08:25:42 2007
@@ -36,15 +36,19 @@
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import java.util.Map.Entry;
/**
* ProjectModelMerge
*
+ * TODO: Should call this ProjectModelAncestry as it deals with the current project and its parent.
+ *
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
@@ -75,6 +79,7 @@
// Unmerged.
merged.setArtifactId( mainProject.getArtifactId() );
merged.setPackaging( StringUtils.defaultIfEmpty( mainProject.getPackaging(), "jar" ) );
+ merged.setRelocation( mainProject.getRelocation() );
// Merged
merged.setGroupId( merge( mainProject.getGroupId(), parentProject.getGroupId() ) );
@@ -98,7 +103,7 @@
merged.setPlugins( mergePlugins( mainProject.getPlugins(), parentProject.getPlugins() ) );
merged.setReports( mergeReports( mainProject.getReports(), parentProject.getReports() ) );
merged.setProperties( merge( mainProject.getProperties(), parentProject.getProperties() ) );
-
+
return merged;
}
@@ -245,11 +250,15 @@
if ( mainDep == null )
{
- return ArchivaModelCloner.clone( parentDep );
+ Dependency dep = ArchivaModelCloner.clone( parentDep );
+ dep.setFromParent( true );
+ return dep;
}
Dependency merged = new Dependency();
+ merged.setFromParent( true );
+
// Unmerged.
merged.setGroupId( mainDep.getGroupId() );
merged.setArtifactId( mainDep.getArtifactId() );
@@ -415,28 +424,40 @@
if ( mainDependencies == null )
{
- return ArchivaModelCloner.cloneDependencies( parentDependencies );
+ List merged = ArchivaModelCloner.cloneDependencies( parentDependencies );
+ Iterator it = merged.iterator();
+ while ( it.hasNext() )
+ {
+ Dependency dep = (Dependency) it.next();
+ dep.setFromParent( true );
+ }
+ return merged;
}
- List merged = ArchivaModelCloner.cloneDependencies( mainDependencies );
+ List merged = new ArrayList();
Map mainDepMap = createDependencyMap( mainDependencies );
Map parentDepMap = createDependencyMap( parentDependencies );
+ Set uniqueKeys = new HashSet();
+ uniqueKeys.addAll( mainDepMap.keySet() );
+ uniqueKeys.addAll( parentDepMap.keySet() );
- Iterator it = parentDepMap.entrySet().iterator();
+ Iterator it = uniqueKeys.iterator();
while ( it.hasNext() )
{
- Map.Entry entry = (Entry) it.next();
- String key = (String) entry.getKey();
- Dependency parentDep = (Dependency) entry.getValue();
+ String key = (String) it.next();
+ Dependency parentDep = (Dependency) parentDepMap.get( key );
Dependency mainDep = (Dependency) mainDepMap.get( key );
if ( parentDep == null )
{
+ // Means there is no parent dep to override main dep.
merged.add( mainDep );
}
else
{
+ // Parent dep exists (main doesn't have to).
+ // Merge the parent over the main dep.
merged.add( merge( mainDep, parentDep ) );
}
}
@@ -453,28 +474,40 @@
if ( mainDepMgmt == null )
{
- return ArchivaModelCloner.cloneDependencies( parentDepMgmt );
+ List merged = ArchivaModelCloner.cloneDependencies( parentDepMgmt );
+ Iterator it = merged.iterator();
+ while ( it.hasNext() )
+ {
+ Dependency dep = (Dependency) it.next();
+ dep.setFromParent( true );
+ }
+ return merged;
}
- List merged = ArchivaModelCloner.cloneDependencies( mainDepMgmt );
+ List merged = new ArrayList();
Map mainDepMap = createDependencyMap( mainDepMgmt );
Map parentDepMap = createDependencyMap( parentDepMgmt );
+ Set uniqueKeys = new HashSet();
+ uniqueKeys.addAll( mainDepMap.keySet() );
+ uniqueKeys.addAll( parentDepMap.keySet() );
- Iterator it = parentDepMap.entrySet().iterator();
+ Iterator it = uniqueKeys.iterator();
while ( it.hasNext() )
{
- Map.Entry entry = (Entry) it.next();
- String key = (String) entry.getKey();
- Dependency parentDep = (Dependency) entry.getValue();
+ String key = (String) it.next();
+ Dependency parentDep = (Dependency) parentDepMap.get( key );
Dependency mainDep = (Dependency) mainDepMap.get( key );
if ( parentDep == null )
{
+ // Means there is no parent depMan entry to override main depMan.
merged.add( mainDep );
}
else
{
+ // Parent depMan entry exists (main doesn't have to).
+ // Merge the parent over the main depMan entry.
merged.add( merge( mainDep, parentDep ) );
}
}
Added: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,116 @@
+package org.apache.maven.archiva.repository.project.dependencies;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.dependency.graph.DependencyGraph;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphBuilder;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphNode;
+import org.apache.maven.archiva.dependency.graph.DependencyGraphUtils;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.VersionedReference;
+import org.apache.maven.archiva.repository.project.ProjectModelException;
+import org.apache.maven.archiva.repository.project.filters.EffectiveProjectModelFilter;
+import org.apache.maven.archiva.repository.project.resolvers.ProjectModelResolverStack;
+
+/**
+ * ProjectModelBasedGraphBuilder
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectModelBasedGraphBuilder
+ implements DependencyGraphBuilder
+{
+ private ProjectModelResolverStack modelResolver;
+
+ private EffectiveProjectModelFilter effectiveFilter = new EffectiveProjectModelFilter();
+
+ public DependencyGraph createGraph( VersionedReference versionedProjectReference )
+ {
+ String groupId = versionedProjectReference.getGroupId();
+ String artifactId = versionedProjectReference.getArtifactId();
+ String version = versionedProjectReference.getVersion();
+
+ DependencyGraph graph = new DependencyGraph( groupId, artifactId, version );
+ return graph;
+ }
+
+ public void resolveNode( DependencyGraph graph, DependencyGraphNode fromNode,
+ VersionedReference versionedProjectReference )
+ {
+ ArchivaProjectModel model = resolveModel( fromNode.getArtifact() );
+
+ DependencyGraphUtils.addNodeFromModel( model, graph, fromNode );
+ }
+
+ private ArchivaProjectModel resolveModel( ArtifactReference reference )
+ {
+ VersionedReference projectRef = new VersionedReference();
+
+ projectRef.setGroupId( reference.getGroupId() );
+ projectRef.setArtifactId( reference.getArtifactId() );
+ projectRef.setVersion( reference.getVersion() );
+
+ ArchivaProjectModel model = modelResolver.findProject( projectRef );
+
+ if ( model == null )
+ {
+ return createDefaultModel( reference );
+ }
+
+ try
+ {
+ effectiveFilter.setProjectModelResolverStack( modelResolver );
+
+ ArchivaProjectModel processedModel = effectiveFilter.filter( model );
+
+ return processedModel;
+ }
+ catch ( ProjectModelException e )
+ {
+ e.printStackTrace( System.err );
+ return createDefaultModel( reference );
+ }
+ }
+
+ private ArchivaProjectModel createDefaultModel( ArtifactReference reference )
+ {
+ ArchivaProjectModel model = new ArchivaProjectModel();
+
+ // Create default (dummy) model
+ model = new ArchivaProjectModel();
+ model.setGroupId( reference.getGroupId() );
+ model.setArtifactId( reference.getArtifactId() );
+ model.setVersion( reference.getVersion() );
+ model.setPackaging( reference.getType() );
+ return model;
+ }
+
+ public ProjectModelResolverStack getModelResolver()
+ {
+ return modelResolver;
+ }
+
+ public void setModelResolver( ProjectModelResolverStack modelResolver )
+ {
+ this.modelResolver = modelResolver;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/dependencies/ProjectModelBasedGraphBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java?view=diff&rev=547277&r1=547276&r2=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java Thu Jun 14 08:25:42 2007
@@ -19,6 +19,7 @@
* under the License.
*/
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.model.ArchivaModelCloner;
import org.apache.maven.archiva.model.ArchivaProjectModel;
@@ -27,10 +28,11 @@
import org.apache.maven.archiva.repository.project.ProjectModelException;
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
import org.apache.maven.archiva.repository.project.ProjectModelMerge;
-import org.apache.maven.archiva.repository.project.ProjectModelResolver;
+import org.apache.maven.archiva.repository.project.resolvers.ProjectModelResolverStack;
import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -48,26 +50,23 @@
extends AbstractLogEnabled
implements ProjectModelFilter
{
- /**
- * @plexus.requirement role-hint="expression"
- */
- private ProjectModelFilter expressionFilter;
+ private ProjectModelFilter expressionFilter = new ProjectModelExpressionFilter();
- private List projectModelResolvers;
+ private ProjectModelResolverStack projectModelResolverStack;
public EffectiveProjectModelFilter()
{
- projectModelResolvers = new ArrayList();
+ projectModelResolverStack = new ProjectModelResolverStack();
}
- public void addProjectModelResolver( ProjectModelResolver resolver )
+ public void setProjectModelResolverStack( ProjectModelResolverStack resolverStack )
{
- if ( resolver == null )
- {
- return;
- }
+ this.projectModelResolverStack = resolverStack;
+ }
- this.projectModelResolvers.add( resolver );
+ public ProjectModelResolverStack getProjectModelResolverStack()
+ {
+ return this.projectModelResolverStack;
}
/**
@@ -90,7 +89,7 @@
return null;
}
- if ( this.projectModelResolvers.isEmpty() )
+ if ( this.projectModelResolverStack.isEmpty() )
{
throw new IllegalStateException( "Unable to build effective pom with no project model resolvers defined." );
}
@@ -113,25 +112,26 @@
return effectiveProject;
}
- public void removeResolver( ProjectModelResolver resolver )
- {
- this.projectModelResolvers.remove( resolver );
- }
+ private Logger logger;
- public void clearResolvers()
+ protected Logger getLogger()
{
- this.projectModelResolvers.clear();
+ if ( logger == null )
+ {
+ logger = super.getLogger();
+ if ( logger == null )
+ {
+ logger = new ConsoleLogger( ConsoleLogger.LEVEL_INFO, this.getClass().getName() );
+ }
+ }
+
+ return logger;
}
private void applyDependencyManagement( ArchivaProjectModel pom )
{
- if ( ( pom.getDependencyManagement() == null ) || ( pom.getDependencies() == null ) )
- {
- // Nothing to do. All done!
- return;
- }
-
- if ( pom.getDependencyManagement().isEmpty() || pom.getDependencies().isEmpty() )
+ if ( CollectionUtils.isEmpty( pom.getDependencyManagement() )
+ || CollectionUtils.isEmpty( pom.getDependencies() ) )
{
// Nothing to do. All done!
return;
@@ -156,39 +156,6 @@
}
}
- private ArchivaProjectModel findProject( VersionedReference projectRef )
- {
- getLogger().debug( "Trying to find project: " + projectRef );
- Iterator it = this.projectModelResolvers.iterator();
-
- while ( it.hasNext() )
- {
- ProjectModelResolver resolver = (ProjectModelResolver) it.next();
-
- try
- {
- getLogger().debug( "Trying to find in " + resolver.getClass().getName() );
- ArchivaProjectModel model = resolver.resolveProjectModel( projectRef );
-
- if ( model != null )
- {
- getLogger().debug( "Found it!: " + model );
- return model;
- }
- getLogger().debug( "Not found." );
- }
- catch ( ProjectModelException e )
- {
- // TODO: trigger notifier of problem?
- e.printStackTrace();
- }
- }
-
- // TODO: Document that project was not found. (Use monitor?)
-
- return null;
- }
-
private ArchivaProjectModel mergeParent( ArchivaProjectModel pom )
throws ProjectModelException
{
@@ -204,7 +171,7 @@
getLogger().debug( "Has parent: " + parentRef );
// Find parent using resolvers.
- ArchivaProjectModel parentProject = findProject( parentRef );
+ ArchivaProjectModel parentProject = this.projectModelResolverStack.findProject( parentRef );
if ( parentProject != null )
{
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java?view=diff&rev=547277&r1=547276&r2=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java Thu Jun 14 08:25:42 2007
@@ -20,11 +20,13 @@
*/
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.model.ArchivaModelCloner;
import org.apache.maven.archiva.model.ArchivaProjectModel;
import org.apache.maven.archiva.model.Dependency;
import org.apache.maven.archiva.repository.project.ProjectModelException;
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
+import org.codehaus.plexus.evaluator.DefaultExpressionEvaluator;
import org.codehaus.plexus.evaluator.EvaluatorException;
import org.codehaus.plexus.evaluator.ExpressionEvaluator;
import org.codehaus.plexus.evaluator.sources.PropertiesExpressionSource;
@@ -32,6 +34,7 @@
import java.util.Iterator;
import java.util.List;
+import java.util.Properties;
/**
* ProjectModelExpressionFilter
@@ -45,10 +48,7 @@
public class ProjectModelExpressionFilter
implements ProjectModelFilter
{
- /**
- * @plexus.requirement
- */
- private ExpressionEvaluator evaluator;
+ private ExpressionEvaluator evaluator = new DefaultExpressionEvaluator();
/**
* Find and Evaluate the Expressions present in the model.
@@ -58,13 +58,21 @@
public ArchivaProjectModel filter( final ArchivaProjectModel model )
throws ProjectModelException
{
+ Properties props = new Properties();
+
if ( model.getProperties() != null )
{
- PropertiesExpressionSource propsSource = new PropertiesExpressionSource();
- propsSource.setProperties( model.getProperties() );
- evaluator.addExpressionSource( propsSource );
+ props.putAll( model.getProperties() );
}
+ props.setProperty( "pom.artifactId", model.getArtifactId() );
+
+ props.setProperty( "pom.groupId", StringUtils.defaultString( model.getGroupId() ) );
+ props.setProperty( "pom.version", StringUtils.defaultString( model.getVersion() ) );
+
+ PropertiesExpressionSource propsSource = new PropertiesExpressionSource();
+ propsSource.setProperties( props );
+ evaluator.addExpressionSource( propsSource );
evaluator.addExpressionSource( new SystemPropertyExpressionSource() );
ArchivaProjectModel ret = ArchivaModelCloner.clone( model );
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java?view=diff&rev=547277&r1=547276&r2=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java Thu Jun 14 08:25:42 2007
@@ -107,6 +107,8 @@
model.setBuildExtensions( getBuildExtensions( xml ) );
+ model.setRelocation( getRelocation( xml ) );
+
return model;
}
catch ( XMLException e )
@@ -451,6 +453,19 @@
}
return ret;
+ }
+
+ private VersionedReference getRelocation( XMLReader xml )
+ throws XMLException
+ {
+ Element elemRelocation = xml.getElement( "//project/distributionManagement/relocation" );
+
+ if ( elemRelocation != null )
+ {
+ return getVersionedReference( elemRelocation );
+ }
+
+ return null;
}
private List getReports( XMLReader xml )
Added: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,78 @@
+package org.apache.maven.archiva.repository.project.resolvers;
+
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.VersionedReference;
+import org.apache.maven.archiva.repository.project.ProjectModelResolver;
+
+import java.util.List;
+
+/**
+ * ProjectModelResolutionListener
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ProjectModelResolutionListener
+{
+ /**
+ * Indicates that the resolution process has started for a specific project.
+ *
+ * @param projectRef the project reference.
+ * @param resolverList the {@link List} of {@link ProjectModelResolver}'s that will be searched.
+ * @see #resolutionSuccess(VersionedReference, ProjectModelResolver, ArchivaProjectModel)
+ * @see #resolutionNotFound(VersionedReference, List)
+ */
+ public void resolutionStart( VersionedReference projectRef, List resolverList );
+
+ /**
+ * Indicates that a resolution against a specific resolver is about
+ * to occur.
+ *
+ * @param projectRef the project reference.
+ * @param resolver the resolver to attempt resolution on.
+ */
+ public void resolutionAttempting( VersionedReference projectRef, ProjectModelResolver resolver );
+
+ /**
+ * Indicates that a resolution against a specific resolver resulted
+ * in in a missed resolution.
+ *
+ * "Miss" in this case refers to an attempt against a resolver, and that
+ * resolver essentially responds with a "not found here" response.
+ *
+ * @param projectRef the project reference.
+ * @param resolver the resolver the attempt was made on.
+ */
+ public void resolutionMiss( VersionedReference projectRef, ProjectModelResolver resolver );
+
+ /**
+ * Indicates that a resolution against the specific resolver has
+ * caused an error.
+ *
+ * @param projectRef the project reference.
+ * @param resolver the (optional) resolver on which the error occured.
+ * @param cause the cause of the error.
+ */
+ public void resolutionError( VersionedReference projectRef, ProjectModelResolver resolver, Exception cause );
+
+ /**
+ * Indicates that a resolution process has finished, and the requested
+ * projectRef has been found.
+ *
+ * @param projectRef the project reference.
+ * @param resolver the resolver on which success occured.
+ * @param model the resolved model.
+ * @see #resolutionStart(VersionedReference, List)
+ */
+ public void resolutionSuccess( VersionedReference projectRef, ProjectModelResolver resolver, ArchivaProjectModel model );
+
+ /**
+ * Indicates that the resolution process has finished, and the requested
+ * projectRef could not be found.
+ *
+ * @param projectRef the project reference.
+ * @param resolverList the {@link List} of {@link ProjectModelResolver}'s that was be searched.
+ * @see #resolutionStart(VersionedReference, List)
+ */
+ public void resolutionNotFound( VersionedReference projectRef, List resolverList );
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolutionListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,244 @@
+package org.apache.maven.archiva.repository.project.resolvers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.VersionedReference;
+import org.apache.maven.archiva.repository.project.ProjectModelException;
+import org.apache.maven.archiva.repository.project.ProjectModelResolver;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Represents a stack of {@link ProjectModelResolver} resolvers for
+ * finding/resolving an ArchivaProjectModel from multiple sources.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectModelResolverStack
+{
+ private List resolvers;
+
+ private List listeners;
+
+ public ProjectModelResolverStack()
+ {
+ this.resolvers = new ArrayList();
+ this.listeners = new ArrayList();
+ }
+
+ public void addListener( ProjectModelResolutionListener listener )
+ {
+ if ( listener == null )
+ {
+ return;
+ }
+
+ this.listeners.add( listener );
+ }
+
+ public void addProjectModelResolver( ProjectModelResolver resolver )
+ {
+ if ( resolver == null )
+ {
+ return;
+ }
+
+ this.resolvers.add( resolver );
+ }
+
+ public void clearResolvers()
+ {
+ this.resolvers.clear();
+ }
+
+ public ArchivaProjectModel findProject( VersionedReference projectRef )
+ {
+ if ( CollectionUtils.isEmpty( this.resolvers ) )
+ {
+ throw new IllegalStateException( "No resolvers have been defined." );
+ }
+
+ triggerResolutionStart( projectRef, this.resolvers );
+
+ Iterator it = this.resolvers.iterator();
+
+ while ( it.hasNext() )
+ {
+ ProjectModelResolver resolver = (ProjectModelResolver) it.next();
+
+ try
+ {
+ triggerResolutionAttempting( projectRef, resolver );
+ ArchivaProjectModel model = resolver.resolveProjectModel( projectRef );
+
+ if ( model != null )
+ {
+ // Project was found.
+ triggerResolutionSuccess( projectRef, resolver, model );
+ return model;
+ }
+ triggerResolutionMiss( projectRef, resolver );
+ }
+ catch ( ProjectModelException e )
+ {
+ triggerResolutionError( projectRef, resolver, e );
+ }
+ }
+
+ // Project was not found in entire resolver list.
+ triggerResolutionNotFound( projectRef, this.resolvers );
+
+ return null;
+ }
+
+ public boolean isEmpty()
+ {
+ return this.resolvers.isEmpty();
+ }
+
+ public void removeListener( ProjectModelResolutionListener listener )
+ {
+ if ( listener == null )
+ {
+ return;
+ }
+
+ this.listeners.add( listener );
+ }
+
+ public void removeResolver( ProjectModelResolver resolver )
+ {
+ this.resolvers.remove( resolver );
+ }
+
+ private void triggerResolutionAttempting( VersionedReference projectRef, ProjectModelResolver resolver )
+ {
+ Iterator it = this.listeners.iterator();
+ while ( it.hasNext() )
+ {
+ ProjectModelResolutionListener listener = (ProjectModelResolutionListener) it.next();
+
+ try
+ {
+ listener.resolutionAttempting( projectRef, resolver );
+ }
+ catch ( Exception e )
+ {
+ // do nothing with exception.
+ }
+ }
+ }
+
+ private void triggerResolutionError( VersionedReference projectRef, ProjectModelResolver resolver, Exception cause )
+ {
+ Iterator it = this.listeners.iterator();
+ while ( it.hasNext() )
+ {
+ ProjectModelResolutionListener listener = (ProjectModelResolutionListener) it.next();
+
+ try
+ {
+ listener.resolutionError( projectRef, resolver, cause );
+ }
+ catch ( Exception e )
+ {
+ // do nothing with exception.
+ }
+ }
+ }
+
+ private void triggerResolutionMiss( VersionedReference projectRef, ProjectModelResolver resolver )
+ {
+ Iterator it = this.listeners.iterator();
+ while ( it.hasNext() )
+ {
+ ProjectModelResolutionListener listener = (ProjectModelResolutionListener) it.next();
+
+ try
+ {
+ listener.resolutionMiss( projectRef, resolver );
+ }
+ catch ( Exception e )
+ {
+ // do nothing with exception.
+ }
+ }
+ }
+
+ private void triggerResolutionNotFound( VersionedReference projectRef, List resolvers )
+ {
+ Iterator it = this.listeners.iterator();
+ while ( it.hasNext() )
+ {
+ ProjectModelResolutionListener listener = (ProjectModelResolutionListener) it.next();
+
+ try
+ {
+ listener.resolutionNotFound( projectRef, resolvers );
+ }
+ catch ( Exception e )
+ {
+ // do nothing with exception.
+ }
+ }
+ }
+
+ private void triggerResolutionStart( VersionedReference projectRef, List resolvers )
+ {
+ Iterator it = this.listeners.iterator();
+ while ( it.hasNext() )
+ {
+ ProjectModelResolutionListener listener = (ProjectModelResolutionListener) it.next();
+
+ try
+ {
+ listener.resolutionStart( projectRef, resolvers );
+ }
+ catch ( Exception e )
+ {
+ // do nothing with exception.
+ }
+ }
+ }
+
+ private void triggerResolutionSuccess( VersionedReference projectRef, ProjectModelResolver resolver,
+ ArchivaProjectModel model )
+ {
+ Iterator it = this.listeners.iterator();
+ while ( it.hasNext() )
+ {
+ ProjectModelResolutionListener listener = (ProjectModelResolutionListener) it.next();
+
+ try
+ {
+ listener.resolutionSuccess( projectRef, resolver, model );
+ }
+ catch ( Exception e )
+ {
+ // do nothing with exception.
+ }
+ }
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/resolvers/ProjectModelResolverStack.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java?view=diff&rev=547277&r1=547276&r2=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java Thu Jun 14 08:25:42 2007
@@ -85,7 +85,7 @@
{
EffectiveProjectModelFilter filter = lookupEffective();
- filter.addProjectModelResolver( createDefaultRepositoryResolver() );
+ filter.getProjectModelResolverStack().addProjectModelResolver( createDefaultRepositoryResolver() );
ArchivaProjectModel startModel = createArchivaProjectModel( DEFAULT_REPOSITORY
+ "/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom" );
Modified: maven/archiva/trunk/archiva-base/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/pom.xml?view=diff&rev=547277&r1=547276&r2=547277
==============================================================================
--- maven/archiva/trunk/archiva-base/pom.xml (original)
+++ maven/archiva/trunk/archiva-base/pom.xml Thu Jun 14 08:25:42 2007
@@ -35,6 +35,7 @@
<module>archiva-consumers</module>
<module>archiva-indexer</module>
<module>archiva-model</module>
+ <module>archiva-dependency-graph</module>
<module>archiva-repository-layer</module>
<module>archiva-xml-tools</module>
<module>archiva-proxy</module>
Propchange: maven/archiva/trunk/tools/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Jun 14 08:25:42 2007
@@ -0,0 +1,15 @@
+target
+*~
+.*.swp
+*.log
+*.patch
+*.diff
+*.ipr
+*.iws
+*.iml
+.classpath
+.project
+.m2eclipse
+.settings
+.wtpmodules
+cobertura.ser
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Jun 14 08:25:42 2007
@@ -0,0 +1,15 @@
+target
+*~
+.*.swp
+*.log
+*.patch
+*.diff
+*.ipr
+*.iws
+*.iml
+.classpath
+.project
+.m2eclipse
+.settings
+.wtpmodules
+cobertura.ser
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml Thu Jun 14 08:25:42 2007
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <prerequisites>
+ <maven>2.0.4</maven>
+ </prerequisites>
+
+ <groupId>org.apache.maven.archiva.tools</groupId>
+ <artifactId>maven-archivadev-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Archiva Dev Maven Plugin</name>
+
+ <inceptionYear>2007</inceptionYear>
+
+ <developers>
+ <developer>
+ <id>joakime</id>
+ <name>Joakim Erdfelt</name>
+ <email>joakime@apache.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ </developers>
+
+ <dependencies>
+ <!-- maven plugin deps -->
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ <version>1.0-alpha-1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.reporting</groupId>
+ <artifactId>maven-reporting-api</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.reporting</groupId>
+ <artifactId>maven-reporting-impl</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-dependency-tree</artifactId>
+ <version>1.0-alpha-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <!-- testing deps -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <version>1.0-beta-1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <properties>
+ <maven.version>2.0.4</maven.version>
+ </properties>
+</project>
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/pom.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,133 @@
+package org.apache.maven.archiva.plugins.dev;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.plugins.dev.testgen.DependencyGraphTestCreator;
+import org.apache.maven.archiva.plugins.dev.testgen.MemoryRepositoryCreator;
+import org.apache.maven.archiva.plugins.dev.utils.VariableNames;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+
+import java.io.File;
+
+/**
+ * CreateArchivaDependencyResolutionTestCaseMojo
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @goal generate-dependency-tests
+ */
+public class CreateArchivaDependencyResolutionTestCaseMojo
+ extends AbstractMojo
+{
+ /**
+ * The project of the current build.
+ *
+ * @parameter default-value="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
+
+ /**
+ * The artifact respository to use.
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ * @readonly
+ */
+ private ArtifactRepository localRepository;
+
+ /**
+ * The destination directory to generate the test files.
+ *
+ * @parameter expression="${archivadev.outputdir}" default-value="${project.build.directory}"
+ * @required
+ */
+ private File destDir;
+
+ /**
+ * The artifact factory to use.
+ *
+ * @component
+ */
+ private ArtifactFactory artifactFactory;
+
+ /**
+ * @component
+ */
+ private DependencyTreeBuilder dependencyTreeBuilder;
+
+ /**
+ * @component
+ */
+ protected ArtifactMetadataSource artifactMetadataSource;
+
+ /**
+ * @component
+ */
+ private ArtifactCollector collector;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ String classPrefix = VariableNames.toClassName( project.getArtifactId() );
+
+ getLog().info( "Generating into " + destDir );
+
+ createMemoryRepository( classPrefix );
+ createDependencyGraphTest( classPrefix );
+ }
+
+ private void createDependencyGraphTest( String classPrefix ) throws MojoExecutionException
+ {
+ DependencyGraphTestCreator creator = new DependencyGraphTestCreator();
+ creator.setLog( getLog() );
+ creator.setOutputDir( destDir );
+ creator.setProject( project );
+ creator.setArtifactFactory( artifactFactory );
+ creator.setLocalRepository( localRepository );
+ creator.setDependencyTreeBuilder( dependencyTreeBuilder );
+ creator.setArtifactMetadataSource( artifactMetadataSource );
+ creator.setCollector( collector );
+
+ creator.create( classPrefix );
+ }
+
+ private void createMemoryRepository( String classPrefix ) throws MojoExecutionException
+ {
+ MemoryRepositoryCreator creator = new MemoryRepositoryCreator();
+ creator.setLog( getLog() );
+ creator.setOutputDir( destDir );
+ creator.setProject( project );
+ creator.setArtifactFactory( artifactFactory );
+ creator.setLocalRepository( localRepository );
+
+ creator.create( classPrefix );
+ }
+}
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/CreateArchivaDependencyResolutionTestCaseMojo.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,63 @@
+package org.apache.maven.archiva.plugins.dev.functors;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+import java.util.Comparator;
+
+/**
+ * ArtifactComparator
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ArtifactComparator
+ implements Comparator
+{
+
+ public int compare( Object arg0, Object arg1 )
+ {
+ if( arg0 == null || arg1 == null )
+ {
+ return -1;
+ }
+
+ Artifact artifact1 = (Artifact) arg0;
+ Artifact artifact2 = (Artifact) arg1;
+
+ int diff;
+
+ diff = artifact1.getGroupId().compareTo( artifact2.getGroupId() );
+ if( diff != 0 )
+ {
+ return diff;
+ }
+
+ diff = artifact1.getArtifactId().compareTo( artifact2.getArtifactId() );
+ if( diff != 0 )
+ {
+ return diff;
+ }
+
+ return artifact1.getVersion().compareTo( artifact2.getVersion() );
+ }
+
+}
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/ArtifactComparator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,44 @@
+package org.apache.maven.archiva.plugins.dev.functors;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Transformer;
+import org.apache.maven.shared.dependency.tree.DependencyNode;
+
+/**
+ * DependencyNodeToArtifactTransformer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DependencyNodeToArtifactTransformer
+ implements Transformer
+{
+ public Object transform( Object input )
+ {
+ if( input instanceof DependencyNode )
+ {
+ DependencyNode node = (DependencyNode) input;
+ return node.getArtifact();
+ }
+
+ return input;
+ }
+}
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/DependencyNodeToArtifactTransformer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,66 @@
+package org.apache.maven.archiva.plugins.dev.functors;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.Predicate;
+import org.apache.maven.model.Dependency;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * MatchingDependencyPredicate
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class MatchingDependencyPredicate
+ implements Predicate
+{
+ private Dependency selectedDep;
+
+ public MatchingDependencyPredicate( Dependency selectedDep )
+ {
+ this.selectedDep = selectedDep;
+ }
+
+ public boolean evaluate( Object input )
+ {
+ boolean satisfies = false;
+
+ if ( input instanceof Dependency )
+ {
+ Dependency dep = (Dependency) input;
+ if ( StringUtils.equals( dep.getArtifactId(), selectedDep.getArtifactId() )
+ && StringUtils.equals( dep.getGroupId(), selectedDep.getGroupId() )
+ && StringUtils.equals( dep.getType(), selectedDep.getType() ))
+ {
+ // So far, so good. groupId/artifactId/type match.
+ satisfies = true;
+
+ // Test classifier (if defined)
+ if( StringUtils.isNotEmpty( selectedDep.getClassifier() ) )
+ {
+ satisfies = StringUtils.equals( dep.getClassifier(), selectedDep.getClassifier() );
+ }
+ }
+ }
+
+ return satisfies;
+ }
+}
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/functors/MatchingDependencyPredicate.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,349 @@
+package org.apache.maven.archiva.plugins.dev.testgen;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.interpolation.ModelInterpolator;
+import org.apache.maven.project.interpolation.RegexBasedModelInterpolator;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.PrintWriter;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Properties;
+
+/**
+ * AbstractCreator
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractCreator
+{
+ protected MavenProject project;
+
+ protected ArtifactFactory artifactFactory;
+
+ protected ArtifactRepository localRepository;
+
+ protected File outputDir;
+
+ private MavenXpp3Reader modelReader = new MavenXpp3Reader();
+
+ private ModelInterpolator modelInterpolator;
+
+ private Log log;
+
+ public abstract void create( String classPrefix )
+ throws MojoExecutionException;
+
+ protected void writeLicense( PrintWriter out )
+ {
+ out.println( "/*" );
+ out.println( " * Licensed to the Apache Software Foundation (ASF) under one" );
+ out.println( " * or more contributor license agreements. See the NOTICE file" );
+ out.println( " * distributed with this work for additional information" );
+ out.println( " * regarding copyright ownership. The ASF licenses this file" );
+ out.println( " * to you under the Apache License, Version 2.0 (the" );
+ out.println( " * \"License\"); you may not use this file except in compliance" );
+ out.println( " * with the License. You may obtain a copy of the License at" );
+ out.println( " *" );
+ out.println( " * http://www.apache.org/licenses/LICENSE-2.0" );
+ out.println( " *" );
+ out.println( " * Unless required by applicable law or agreed to in writing," );
+ out.println( " * software distributed under the License is distributed on an" );
+ out.println( " * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY" );
+ out.println( " * KIND, either express or implied. See the License for the" );
+ out.println( " * specific language governing permissions and limitations" );
+ out.println( " * under the License." );
+ out.println( " */" );
+ out.println( "" );
+ }
+
+ protected boolean isNotEmpty( Properties properties )
+ {
+ return !isEmpty( properties );
+ }
+
+ private boolean isEmpty( Properties properties )
+ {
+ if ( properties == null )
+ {
+ return true;
+ }
+
+ return properties.isEmpty();
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public void setProject( MavenProject project )
+ {
+ this.project = project;
+ }
+
+ protected Model getModel( Dependency dep )
+ {
+ return getModel( dep.getGroupId(), dep.getArtifactId(), dep.getVersion(), dep.getType() );
+ }
+
+ protected Model getModel( Parent parent )
+ {
+ return getModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion(), "pom" );
+ }
+
+ protected Model getModel( String groupId, String artifactId, String version, String type )
+ {
+ // getLog().info( ".getModel(" + groupId + ", " + artifactId + ", " + version + ", " + type + ")" );
+ Artifact pomArtifact = artifactFactory.createProjectArtifact( groupId, artifactId, version );
+
+ String path = localRepository.getLayout().pathOf( pomArtifact );
+
+ File pomFile = new File( localRepository.getBasedir(), path );
+
+ if ( pomFile.exists() )
+ {
+ FileReader reader = null;
+ try
+ {
+ reader = new FileReader( pomFile );
+ Model model = modelReader.read( reader );
+
+ // HACK: to allow ${pom.groupId} expressions to work, WITHOUT resolving/merginc parent.
+ // (The merging of parent pom is done elsewhere)
+ if ( StringUtils.isEmpty( model.getGroupId() ) )
+ {
+ if( model.getParent() != null )
+ {
+ model.setGroupId( model.getParent().getGroupId() );
+ }
+ }
+
+ // HACK: to fix bad poms in repo (see jetty:jetty:4.2.10::jar for example)
+ model.setVersion( version );
+
+ // Interpolate the properties?
+ if( modelInterpolator == null )
+ {
+ modelInterpolator = new RegexBasedModelInterpolator();
+ }
+
+ model = modelInterpolator.interpolate( model, Collections.EMPTY_MAP, false );
+
+ return model;
+ }
+ catch ( Exception e )
+ {
+ getLog().warn(
+ "Unable to read pom file " + pomFile.getAbsolutePath() + " : (" + e.getClass().getName()
+ + "): " + e.getMessage() );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+
+ // no pom file.
+
+ Model model = new Model();
+ model.setGroupId( groupId );
+ model.setArtifactId( artifactId );
+ model.setVersion( version );
+ model.setPackaging( type );
+
+ return model;
+ }
+
+ private String getGroupId( Model model )
+ {
+ String groupId = model.getGroupId();
+
+ if ( StringUtils.isEmpty( groupId ) )
+ {
+ if ( model.getParent() != null )
+ {
+ groupId = model.getParent().getGroupId();
+ }
+ }
+
+ return groupId;
+ }
+
+ private String getVersion( Model model )
+ {
+ String version = model.getVersion();
+
+ if ( StringUtils.isEmpty( version ) )
+ {
+ if ( model.getParent() != null )
+ {
+ version = model.getParent().getVersion();
+ }
+ }
+
+ return VersionUtil.getBaseVersion( version );
+ }
+
+ protected boolean isNotBlank( String str )
+ {
+ return !isBlank( str );
+ }
+
+ private boolean isBlank( String str )
+ {
+ if ( str == null )
+ {
+ return true;
+ }
+
+ return ( str.trim().length() <= 0 );
+ }
+
+ protected boolean isNotEmpty( Collection coll )
+ {
+ return !isEmpty( coll );
+ }
+
+ protected boolean isEmpty( Collection coll )
+ {
+ if ( coll == null )
+ {
+ return true;
+ }
+
+ return coll.isEmpty();
+ }
+
+ protected String toKey( Parent ref )
+ {
+ StringBuffer key = new StringBuffer();
+
+ key.append( ref.getGroupId() ).append( ":" );
+ key.append( ref.getArtifactId() ).append( ":" );
+ key.append( ref.getVersion() );
+
+ return key.toString();
+ }
+
+ protected String toKey( Exclusion ref )
+ {
+ StringBuffer key = new StringBuffer();
+
+ key.append( ref.getGroupId() ).append( ":" );
+ key.append( ref.getArtifactId() );
+
+ return key.toString();
+ }
+
+ protected String toKey( Model ref )
+ {
+ StringBuffer key = new StringBuffer();
+
+ key.append( getGroupId( ref ) ).append( ":" );
+ key.append( ref.getArtifactId() ).append( ":" );
+ key.append( getVersion( ref ) );
+
+ return key.toString();
+ }
+
+ protected String toKey( Dependency ref )
+ {
+ StringBuffer key = new StringBuffer();
+
+ key.append( ref.getGroupId() ).append( ":" );
+ key.append( ref.getArtifactId() ).append( ":" );
+ key.append( ref.getVersion() ).append( ":" );
+ key.append( StringUtils.defaultString( ref.getClassifier() ) ).append( ":" );
+ key.append( ref.getType() );
+
+ return key.toString();
+ }
+
+ protected String toKey( Artifact ref )
+ {
+ StringBuffer key = new StringBuffer();
+
+ key.append( ref.getGroupId() ).append( ":" );
+ key.append( ref.getArtifactId() ).append( ":" );
+ key.append( ref.getVersion() ).append( ":" );
+ key.append( StringUtils.defaultString( ref.getClassifier() ) ).append( ":" );
+ key.append( ref.getType() );
+
+ return key.toString();
+ }
+
+ public ArtifactFactory getArtifactFactory()
+ {
+ return artifactFactory;
+ }
+
+ public void setArtifactFactory( ArtifactFactory artifactFactory )
+ {
+ this.artifactFactory = artifactFactory;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public void setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+ }
+
+ public File getOutputDir()
+ {
+ return outputDir;
+ }
+
+ public void setOutputDir( File outputDir )
+ {
+ this.outputDir = outputDir;
+ }
+}
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/AbstractCreator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java?view=auto&rev=547277
==============================================================================
--- maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java (added)
+++ maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java Thu Jun 14 08:25:42 2007
@@ -0,0 +1,366 @@
+package org.apache.maven.archiva.plugins.dev.testgen;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.functors.NotPredicate;
+import org.apache.maven.archiva.plugins.dev.functors.DependencyNodeToArtifactTransformer;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.shared.dependency.tree.DependencyTree;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * DependencyGraphTestCreator
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DependencyGraphTestCreator
+ extends AbstractCreator
+{
+ private class RootArtifactPredicate
+ implements Predicate
+ {
+ private String rootKey;
+
+ public RootArtifactPredicate( DependencyTree tree )
+ {
+ this.rootKey = toKey( tree.getRootNode().getArtifact() );
+ }
+
+ public boolean evaluate( Object input )
+ {
+ boolean satisfies = false;
+
+ if ( input instanceof Artifact )
+ {
+ Artifact nodeArtifact = (Artifact) input;
+ String key = toKey( nodeArtifact );
+
+ if ( key.equals( rootKey ) )
+ {
+ satisfies = true;
+ }
+ }
+
+ return satisfies;
+ }
+ }
+
+ private File outputFile;
+
+ private PrintWriter out;
+
+ private DependencyTreeBuilder dependencyTreeBuilder;
+
+ private ArtifactMetadataSource artifactMetadataSource;
+
+ private ArtifactCollector collector;
+
+ public void create( String classPrefix )
+ throws MojoExecutionException
+ {
+ String classname = classPrefix + "DependencyGraphTest";
+
+ getLog().info( "Generating " + classname + ".java ..." );
+
+ outputFile = new File( outputDir, classname + ".java" );
+ try
+ {
+ out = new PrintWriter( outputFile );
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new MojoExecutionException( "Unable to open file " + outputFile.getName() + " for output: "
+ + e.getMessage(), e );
+ }
+
+ try
+ {
+ out.println( "package org.apache.maven.archiva.dependency.graph;" );
+ out.println( "" );
+
+ writeLicense( out );
+
+ // Imports
+ out.println( "import org.apache.maven.archiva.dependency.DependencyGraphFactory;" );
+ out.println( "import org.apache.maven.archiva.model.DependencyScope;" );
+ out.println( "import org.apache.maven.archiva.model.VersionedReference;" );
+ out.println( "" );
+ out.println( "import java.util.ArrayList;" );
+ out.println( "import java.util.List;" );
+ out.println( "" );
+
+ String projectKey = toKey( project.getModel() );
+
+ writeJavadoc( classname, projectKey );
+
+ // The class itself.
+ out.println( "public class " + classname );
+ out.println( " extends AbstractDependencyGraphFactoryTestCase" );
+ out.println( "{" );
+
+ DependencyTree dependencyTree = getDependencyTree();
+
+ writeGraphNodesTest( classPrefix, dependencyTree );
+
+ // TODO: enable in future, when resolution between archiva and maven are equal.
+ // writeDirectCompileDepsTest( classPrefix, dependencyTree );
+ // writeDirectTestDepsTest( classPrefix, dependencyTree );
+ // writeTransitiveCompileDepsTest( classPrefix, dependencyTree );
+ // writeTransitiveTestDepsTest( classPrefix, dependencyTree );
+
+ out.println( "}" );
+ }
+ finally
+ {
+ out.flush();
+ IOUtil.close( out );
+ }
+ }
+
+ public ArtifactMetadataSource getArtifactMetadataSource()
+ {
+ return artifactMetadataSource;
+ }
+
+ public ArtifactCollector getCollector()
+ {
+ return collector;
+ }
+
+ public DependencyTreeBuilder getDependencyTreeBuilder()
+ {
+ return dependencyTreeBuilder;
+ }
+
+ public void setArtifactMetadataSource( ArtifactMetadataSource artifactMetadataSource )
+ {
+ this.artifactMetadataSource = artifactMetadataSource;
+ }
+
+ public void setCollector( ArtifactCollector collector )
+ {
+ this.collector = collector;
+ }
+
+ public void setDependencyTreeBuilder( DependencyTreeBuilder dependencyTreeBuilder )
+ {
+ this.dependencyTreeBuilder = dependencyTreeBuilder;
+ }
+
+ private DependencyTree getDependencyTree()
+ throws MojoExecutionException
+ {
+ try
+ {
+ return dependencyTreeBuilder.buildDependencyTree( project, localRepository, artifactFactory,
+ artifactMetadataSource, collector );
+ }
+ catch ( DependencyTreeBuilderException e )
+ {
+ String emsg = "Unable to build dependency tree.";
+ getLog().error( emsg, e );
+ throw new MojoExecutionException( emsg, e );
+ }
+ }
+
+ private void writeDirectCompileDepsTest( String classPrefix, DependencyTree tree )
+ {
+ out.println( " public void testResolveOfDirectCompileDeps()" );
+ out.println( " throws GraphTaskException" );
+ out.println( " {" );
+ writeTestProlog( classPrefix );
+ writeDirectDependenciesCheck( tree, "compile" );
+ out.println( " }" );
+ out.println( "" );
+ }
+
+ private void writeDirectDependenciesCheck( DependencyTree dependencyTree, String scope )
+ {
+ out.println( " // Check for direct dependencies on scope " + scope );
+ out.println( " expectedNodes.clear();" );
+
+ List directDeps = new ArrayList();
+ directDeps.addAll( dependencyTree.getRootNode().getChildren() );
+ CollectionUtils.transform( directDeps, new DependencyNodeToArtifactTransformer() );
+
+ Collections.sort( directDeps );
+
+ writeExpectedNodesAdd( directDeps, scope );
+
+ out.println( " assertDirectNodes( graph, expectedNodes, \"" + scope + "\" );" );
+ }
+
+ private void writeDirectTestDepsTest( String classPrefix, DependencyTree tree )
+ {
+ out.println( " public void testResolveOfDirectTestDeps()" );
+ out.println( " throws GraphTaskException" );
+ out.println( " {" );
+ writeTestProlog( classPrefix );
+ writeDirectDependenciesCheck( tree, "test" );
+ out.println( " }" );
+ out.println( "" );
+ }
+
+ private void writeExpectedNodesAdd( List deps, String scope )
+ {
+ Iterator it = deps.iterator();
+ while ( it.hasNext() )
+ {
+ Artifact artifact = (Artifact) it.next();
+ String depKey = toKey( artifact );
+ if ( StringUtils.equals( scope, artifact.getScope() ) )
+ {
+ out.println( " expectedNodes.add( \"" + depKey + "\" );" );
+ }
+ }
+ }
+
+ private void writeJavadoc( String classname, String projectKey )
+ {
+ out.println( "/**" );
+ out.println( " * " + classname );
+ out.println( " * " );
+ out.println( " * DependencyGraphTest for testing <code>" + projectKey + "</code>" );
+ out.println( " *" );
+ out.println( " * Generated by <code>archivadev:generate-dependency-tests</code> plugin" );
+ out.println( " * @version $Id$" );
+ out.println( " */" );
+ }
+
+ private void writeGraphNodesTest( String classPrefix, final DependencyTree tree )
+ {
+ out.println( " public void testResolvedDepsToNodes()" );
+ out.println( " throws GraphTaskException" );
+ out.println( " {" );
+ writeTestProlog( classPrefix );
+
+ String projectKey = toKey( project.getModel() );
+ out.println( " String expectedRootRef = \"" + projectKey + "\";" );
+ out.println( " List expectedNodes = new ArrayList();" );
+ out.println( "" );
+ out.println( " // Check for all nodes, regardless of scope." );
+ out.println( " expectedNodes.clear();" );
+
+ // Add all deps.
+ List deps = new ArrayList();
+ Predicate notRootNode = NotPredicate.getInstance( new RootArtifactPredicate( tree ) );
+ CollectionUtils.select( tree.getArtifacts(), notRootNode, deps );
+ CollectionUtils.transform( deps, new DependencyNodeToArtifactTransformer() );
+ Collections.sort( deps );
+
+ Iterator it = deps.iterator();
+ while ( it.hasNext() )
+ {
+ Artifact artifact = (Artifact) it.next();
+ String depKey = toKey( artifact );
+ out.println( " expectedNodes.add( \"" + depKey + "\" );" );
+ }
+
+ out.println( "" );
+ out.println( " assertGraph( graph, expectedRootRef, expectedNodes );" );
+
+ out.println( " }" );
+ out.println( "" );
+
+ }
+
+ private void writeTestProlog( String classPrefix )
+ {
+ out.println( " MemoryRepositoryDependencyGraphBuilder graphBuilder = " );
+ out.println( " new MemoryRepositoryDependencyGraphBuilder();" );
+ out.println( " MemoryRepository repository = new " + classPrefix + "MemoryRepository();" );
+ out.println( " graphBuilder.setMemoryRepository( repository );" );
+ out.println( "" );
+ out.println( " // Create the factory, and add the test resolver." );
+ out.println( " DependencyGraphFactory factory = new DependencyGraphFactory();" );
+ out.println( " factory.setGraphBuilder( graphBuilder );" );
+ out.println( " factory.setDesiredScope( DependencyScope.TEST );" );
+ out.println( "" );
+ out.println( " // Get the model to resolve from" );
+ out.println( " VersionedReference rootRef = toVersionedReference( \"" + project.getGroupId() + ":"
+ + project.getArtifactId() + ":" + project.getVersion() + "\"); " );
+ out.println( "" );
+ out.println( " // Perform the resolution." );
+ out.println( " DependencyGraph graph = factory.getGraph( rootRef );" );
+ out.println( "" );
+ out.println( " // Test the results." );
+ out.println( " assertNotNull( \"Graph shouldn't be null.\", graph );" );
+ out.println( "" );
+ }
+
+ private void writeTransientDependenciesCheck( DependencyTree dependencyTree, String scope )
+ {
+ out.println( " // Check for transient dependencies on scope " + scope );
+ out.println( " expectedNodes.clear();" );
+
+ // Add all deps.
+ List deps = new ArrayList( dependencyTree.getArtifacts() );
+ // Remove the direct deps.
+ List directDeps = new ArrayList();
+ directDeps.addAll( dependencyTree.getRootNode().getChildren() );
+ CollectionUtils.transform( directDeps, new DependencyNodeToArtifactTransformer() );
+ deps.removeAll( directDeps );
+
+ Collections.sort( deps );
+
+ writeExpectedNodesAdd( deps, scope );
+
+ out.println( " assertTransientNodes( graph, expectedNodes, \"" + scope + "\" );" );
+ }
+
+ private void writeTransitiveCompileDepsTest( String classPrefix, DependencyTree tree )
+ {
+ out.println( " public void testResolveOfTransitiveCompileDeps()" );
+ out.println( " throws GraphTaskException" );
+ out.println( " {" );
+ writeTestProlog( classPrefix );
+ writeTransientDependenciesCheck( tree, "compile" );
+ out.println( " }" );
+ out.println( "" );
+ }
+
+ private void writeTransitiveTestDepsTest( String classPrefix, DependencyTree tree )
+ {
+ out.println( " public void testResolveOfTransitiveTestDeps()" );
+ out.println( " throws GraphTaskException" );
+ out.println( " {" );
+ writeTestProlog( classPrefix );
+ writeTransientDependenciesCheck( tree, "test" );
+ out.println( " }" );
+ out.println( "" );
+ }
+}
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/tools/maven-archivadev-plugin/src/main/java/org/apache/maven/archiva/plugins/dev/testgen/DependencyGraphTestCreator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain