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