1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.nuxeo.build.maven.graph;
18
19 import java.io.File;
20 import java.util.ArrayList;
21 import java.util.Collection;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.apache.maven.RepositoryUtils;
26 import org.apache.maven.artifact.Artifact;
27 import org.apache.tools.ant.Project;
28 import org.eclipse.aether.graph.DefaultDependencyNode;
29 import org.eclipse.aether.graph.Dependency;
30 import org.eclipse.aether.graph.DependencyNode;
31 import org.eclipse.aether.graph.DependencyVisitor;
32 import org.eclipse.aether.repository.RemoteRepository;
33 import org.eclipse.aether.resolution.ArtifactResolutionException;
34 import org.eclipse.aether.version.Version;
35 import org.eclipse.aether.version.VersionConstraint;
36
37 import org.nuxeo.build.ant.AntClient;
38
39
40
41
42 public class Node implements DependencyNode {
43
44 protected final Graph graph;
45
46 protected final String id;
47
48 @Deprecated
49 private List<char[]> acceptedCategories;
50
51 private List<DependencyNode> parents = new ArrayList<>();
52
53 protected DependencyNode dependencyNode;
54
55
56
57
58 @Deprecated
59 public List<char[]> getAcceptedCategories() {
60 if (acceptedCategories == null) {
61 acceptedCategories = new ArrayList<>();
62 }
63 return acceptedCategories;
64 }
65
66 public static String genNodeId(Artifact artifact) {
67 return genNodeId(RepositoryUtils.toDependency(artifact, null));
68 }
69
70 public static String genNodeId(Dependency dependency) {
71 org.eclipse.aether.artifact.Artifact artifact = dependency.getArtifact();
72 String scope = dependency.getScope();
73 return genNodeId(artifact, scope);
74 }
75
76 public static String genNodeId(org.eclipse.aether.artifact.Artifact artifact, String scope) {
77 StringBuilder sb = new StringBuilder();
78 sb.append(artifact.getGroupId());
79 sb.append(':').append(artifact.getArtifactId());
80 sb.append(':').append(artifact.getBaseVersion());
81 sb.append(':').append(artifact.getExtension());
82 sb.append(':');
83 if (artifact.getClassifier() != null) {
84 sb.append(artifact.getClassifier());
85 }
86 sb.append(':').append(scope);
87 return sb.toString();
88 }
89
90
91
92
93 public static String genNodeId(DependencyNode node) {
94 Dependency dependency = node.getDependency();
95 if (dependency != null) {
96 return genNodeId(dependency);
97 } else {
98 return genNodeId(node.getArtifact(), "");
99 }
100 }
101
102 public Node(Node node) {
103 dependencyNode = node.dependencyNode;
104 id = node.id;
105 graph = node.graph;
106 acceptedCategories = node.acceptedCategories;
107 parents = node.parents;
108 }
109
110
111
112
113 public Node(Graph graph, DependencyNode dependencyNode) {
114 this.graph = graph;
115 this.dependencyNode = dependencyNode;
116 id = genNodeId(dependencyNode);
117 }
118
119 public Artifact getMavenArtifact() {
120 return DependencyUtils.toMavenArtifact(getDependency());
121 }
122
123 public File getFile() {
124 File file = getArtifact().getFile();
125 if (file == null) {
126 try {
127 file = DependencyUtils.resolve(getArtifact()).getFile();
128 } catch (ArtifactResolutionException e) {
129 AntClient.getInstance().log(e.getMessage(), e, Project.MSG_ERR);
130 return null;
131 }
132 }
133 return file;
134 }
135
136 public String getId() {
137 return id;
138 }
139
140 @Override
141 public boolean equals(Object obj) {
142 if (obj == this) {
143 return true;
144 }
145 if (obj instanceof Node) {
146 return ((Node) obj).id.equals(this);
147 }
148 if (obj instanceof DependencyNode) {
149 return ((DependencyNode) obj).equals(dependencyNode);
150 }
151 return false;
152 }
153
154 @Override
155 public int hashCode() {
156 return id.hashCode();
157 }
158
159 @Override
160 public String toString() {
161 return dependencyNode.toString();
162
163 }
164
165
166
167
168
169 @Deprecated
170 public void setAcceptedCategory(char[] pattern) {
171 getAcceptedCategories().add(pattern);
172 }
173
174
175
176
177
178
179 @Deprecated
180 public boolean isAcceptedCategory(List<char[]> patterns) {
181 for (char[] pattern : patterns) {
182 if (getAcceptedCategories().contains(pattern)) {
183 return true;
184 }
185 }
186 return false;
187 }
188
189 @Override
190 public List<DependencyNode> getChildren() {
191 return dependencyNode.getChildren();
192 }
193
194 @Override
195 public Dependency getDependency() {
196 return dependencyNode.getDependency();
197 }
198
199 @Override
200 public void setArtifact(org.eclipse.aether.artifact.Artifact artifact) {
201 dependencyNode.setArtifact(artifact);
202
203 }
204
205 @Override
206 public List<? extends org.eclipse.aether.artifact.Artifact> getRelocations() {
207 return dependencyNode.getRelocations();
208 }
209
210 @Override
211 public Collection<? extends org.eclipse.aether.artifact.Artifact> getAliases() {
212 return dependencyNode.getAliases();
213 }
214
215 @Override
216 public VersionConstraint getVersionConstraint() {
217 return dependencyNode.getVersionConstraint();
218 }
219
220 @Override
221 public Version getVersion() {
222 return dependencyNode.getVersion();
223 }
224
225 @Override
226 public void setScope(String scope) {
227 dependencyNode.setScope(scope);
228 }
229
230 @Override
231 public List<RemoteRepository> getRepositories() {
232 return dependencyNode.getRepositories();
233 }
234
235 @Override
236 public String getRequestContext() {
237 return dependencyNode.getRequestContext();
238 }
239
240 @Override
241 public void setRequestContext(String context) {
242 dependencyNode.setRequestContext(context);
243 }
244
245 @Override
246 public Map<?, ?> getData() {
247 return dependencyNode.getData();
248 }
249
250 @Override
251 public void setData(Object key, Object value) {
252 dependencyNode.setData(key, value);
253 }
254
255 @Override
256 public boolean accept(DependencyVisitor visitor) {
257 return dependencyNode.accept(visitor);
258 }
259
260 @Deprecated
261 public List<DependencyNode> getParents() {
262 return parents;
263 }
264
265
266
267
268 public void addParent(Node node) {
269 parents.add(node);
270 }
271
272 @Override
273 public void setChildren(List<DependencyNode> children) {
274 dependencyNode.setChildren(children);
275 }
276
277 @Override
278 public void setOptional(Boolean optional) {
279 dependencyNode.setOptional(optional);
280 }
281
282 @Override
283 public int getManagedBits() {
284 return dependencyNode.getManagedBits();
285 }
286
287 @Override
288 public void setData(Map<Object, Object> data) {
289 dependencyNode.setData(data);
290 }
291
292 @Override
293 public org.eclipse.aether.artifact.Artifact getArtifact() {
294 return dependencyNode.getArtifact();
295 }
296
297
298
299
300 public void setManagedBits(int managedBits) {
301 ((DefaultDependencyNode) dependencyNode).setManagedBits(managedBits);
302 }
303 }