1 package org.eclipse.aether.util.graph.visitor;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.eclipse.aether.artifact.Artifact;
23 import org.eclipse.aether.graph.Dependency;
24 import org.eclipse.aether.graph.DependencyNode;
25 import org.eclipse.aether.graph.DependencyVisitor;
26
27 import java.io.File;
28 import java.util.ArrayList;
29 import java.util.IdentityHashMap;
30 import java.util.Iterator;
31 import java.util.List;
32 import java.util.Map;
33
34
35
36
37
38
39
40
41
42
43 abstract class AbstractDepthFirstNodeListGenerator
44 implements DependencyVisitor
45 {
46
47 private final Map<DependencyNode, Object> visitedNodes;
48
49 protected final List<DependencyNode> nodes;
50
51 AbstractDepthFirstNodeListGenerator()
52 {
53 nodes = new ArrayList<DependencyNode>( 128 );
54 visitedNodes = new IdentityHashMap<DependencyNode, Object>( 512 );
55 }
56
57
58
59
60
61
62 public List<DependencyNode> getNodes()
63 {
64 return nodes;
65 }
66
67
68
69
70
71
72
73 public List<Dependency> getDependencies( boolean includeUnresolved )
74 {
75 List<Dependency> dependencies = new ArrayList<Dependency>( getNodes().size() );
76
77 for ( DependencyNode node : getNodes() )
78 {
79 Dependency dependency = node.getDependency();
80 if ( dependency != null )
81 {
82 if ( includeUnresolved || dependency.getArtifact().getFile() != null )
83 {
84 dependencies.add( dependency );
85 }
86 }
87 }
88
89 return dependencies;
90 }
91
92
93
94
95
96
97
98 public List<Artifact> getArtifacts( boolean includeUnresolved )
99 {
100 List<Artifact> artifacts = new ArrayList<Artifact>( getNodes().size() );
101
102 for ( DependencyNode node : getNodes() )
103 {
104 if ( node.getDependency() != null )
105 {
106 Artifact artifact = node.getDependency().getArtifact();
107 if ( includeUnresolved || artifact.getFile() != null )
108 {
109 artifacts.add( artifact );
110 }
111 }
112 }
113
114 return artifacts;
115 }
116
117
118
119
120
121
122 public List<File> getFiles()
123 {
124 List<File> files = new ArrayList<File>( getNodes().size() );
125
126 for ( DependencyNode node : getNodes() )
127 {
128 if ( node.getDependency() != null )
129 {
130 File file = node.getDependency().getArtifact().getFile();
131 if ( file != null )
132 {
133 files.add( file );
134 }
135 }
136 }
137
138 return files;
139 }
140
141
142
143
144
145
146
147 public String getClassPath()
148 {
149 StringBuilder buffer = new StringBuilder( 1024 );
150
151 for ( Iterator<DependencyNode> it = getNodes().iterator(); it.hasNext(); )
152 {
153 DependencyNode node = it.next();
154 if ( node.getDependency() != null )
155 {
156 Artifact artifact = node.getDependency().getArtifact();
157 if ( artifact.getFile() != null )
158 {
159 buffer.append( artifact.getFile().getAbsolutePath() );
160 if ( it.hasNext() )
161 {
162 buffer.append( File.pathSeparatorChar );
163 }
164 }
165 }
166 }
167
168 return buffer.toString();
169 }
170
171
172
173
174
175
176
177 protected boolean setVisited( DependencyNode node )
178 {
179 return visitedNodes.put( node, Boolean.TRUE ) == null;
180 }
181
182 public abstract boolean visitEnter( DependencyNode node );
183
184 public abstract boolean visitLeave( DependencyNode node );
185
186 }