1 package org.apache.maven.shared.dependency.graph.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
27 import org.apache.maven.project.MavenProject;
28 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
29 import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
30 import org.apache.maven.shared.dependency.graph.DependencyNode;
31 import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
32 import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
33 import org.codehaus.plexus.component.annotations.Component;
34 import org.codehaus.plexus.component.annotations.Requirement;
35
36
37
38
39
40
41
42
43 @Component( role = DependencyGraphBuilder.class, hint = "maven2" )
44 public class Maven2DependencyGraphBuilder
45 implements DependencyGraphBuilder
46 {
47 @Requirement
48 private DependencyTreeBuilder treeBuilder;
49
50 public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter )
51 throws DependencyGraphBuilderException
52 {
53 try
54 {
55 return buildDependencyNode( null, treeBuilder.buildDependencyTree( project ), filter );
56 }
57 catch ( DependencyTreeBuilderException e )
58 {
59 throw new DependencyGraphBuilderException( e.getMessage(), e );
60 }
61 }
62
63 private DependencyNode buildDependencyNode( DependencyNode parent,
64 org.apache.maven.shared.dependency.tree.DependencyNode node,
65 ArtifactFilter filter )
66 {
67 String versionSelectedFromRange = null;
68 if ( node.getVersionSelectedFromRange() != null )
69 {
70 versionSelectedFromRange = node.getVersionSelectedFromRange().toString();
71 }
72
73 DefaultDependencyNode current =
74 new DefaultDependencyNode( parent, node.getArtifact(), node.getPremanagedVersion(),
75 node.getPremanagedScope(), versionSelectedFromRange );
76
77 List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
78 for ( org.apache.maven.shared.dependency.tree.DependencyNode child : node.getChildren() )
79 {
80 if ( child.getState() != org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED )
81 {
82
83 continue;
84 }
85
86 if ( ( filter == null ) || filter.include( child.getArtifact() ) )
87 {
88 nodes.add( buildDependencyNode( current, child, filter ) );
89 }
90 }
91
92 current.setChildren( Collections.unmodifiableList( nodes ) );
93
94 return current;
95 }
96 }