1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.apache.maven.artifact.resolver;
20  
21  import java.util.ArrayList;
22  import java.util.Collections;
23  import java.util.LinkedHashSet;
24  import java.util.List;
25  import java.util.Set;
26  import org.apache.maven.artifact.Artifact;
27  import org.apache.maven.artifact.repository.ArtifactRepository;
28  import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  public class ArtifactResolutionResult {
47      private static final String LS = System.lineSeparator();
48  
49      private Artifact originatingArtifact;
50  
51      private List<Artifact> missingArtifacts;
52  
53      
54  
55      private List<Exception> exceptions;
56  
57      private List<Exception> versionRangeViolations;
58  
59      private List<ArtifactResolutionException> metadataResolutionExceptions;
60  
61      private List<CyclicDependencyException> circularDependencyExceptions;
62  
63      private List<ArtifactResolutionException> errorArtifactExceptions;
64  
65      
66  
67      private List<ArtifactRepository> repositories;
68  
69      private Set<Artifact> artifacts;
70  
71      private Set<ResolutionNode> resolutionNodes;
72  
73      public Artifact getOriginatingArtifact() {
74          return originatingArtifact;
75      }
76  
77      public ArtifactResolutionResult setOriginatingArtifact(final Artifact originatingArtifact) {
78          this.originatingArtifact = originatingArtifact;
79  
80          return this;
81      }
82  
83      public void addArtifact(Artifact artifact) {
84          if (artifacts == null) {
85              artifacts = new LinkedHashSet<>();
86          }
87  
88          artifacts.add(artifact);
89      }
90  
91      public Set<Artifact> getArtifacts() {
92          if (artifacts == null) {
93              artifacts = new LinkedHashSet<>();
94          }
95  
96          return artifacts;
97      }
98  
99      public void setArtifacts(Set<Artifact> artifacts) {
100         this.artifacts = artifacts;
101     }
102 
103     public Set<ResolutionNode> getArtifactResolutionNodes() {
104         if (resolutionNodes == null) {
105             resolutionNodes = new LinkedHashSet<>();
106         }
107 
108         return resolutionNodes;
109     }
110 
111     public void setArtifactResolutionNodes(Set<ResolutionNode> resolutionNodes) {
112         this.resolutionNodes = resolutionNodes;
113     }
114 
115     public boolean hasMissingArtifacts() {
116         return missingArtifacts != null && !missingArtifacts.isEmpty();
117     }
118 
119     public List<Artifact> getMissingArtifacts() {
120         return missingArtifacts == null ? Collections.emptyList() : Collections.unmodifiableList(missingArtifacts);
121     }
122 
123     public ArtifactResolutionResult addMissingArtifact(Artifact artifact) {
124         missingArtifacts = initList(missingArtifacts);
125 
126         missingArtifacts.add(artifact);
127 
128         return this;
129     }
130 
131     public ArtifactResolutionResult setUnresolvedArtifacts(final List<Artifact> unresolvedArtifacts) {
132         this.missingArtifacts = unresolvedArtifacts;
133 
134         return this;
135     }
136 
137     public boolean isSuccess() {
138         return !(hasMissingArtifacts() || hasExceptions());
139     }
140 
141     
142     
143     
144 
145     public boolean hasExceptions() {
146         return exceptions != null && !exceptions.isEmpty();
147     }
148 
149     public List<Exception> getExceptions() {
150         return exceptions == null ? Collections.emptyList() : Collections.unmodifiableList(exceptions);
151     }
152 
153     
154     
155     
156 
157     public boolean hasVersionRangeViolations() {
158         return versionRangeViolations != null;
159     }
160 
161     
162 
163 
164 
165 
166 
167 
168 
169     public ArtifactResolutionResult addVersionRangeViolation(Exception e) {
170         versionRangeViolations = initList(versionRangeViolations);
171 
172         versionRangeViolations.add(e);
173 
174         exceptions = initList(exceptions);
175 
176         exceptions.add(e);
177 
178         return this;
179     }
180 
181     public OverConstrainedVersionException getVersionRangeViolation(int i) {
182         return (OverConstrainedVersionException) versionRangeViolations.get(i);
183     }
184 
185     public List<Exception> getVersionRangeViolations() {
186         return versionRangeViolations == null
187                 ? Collections.emptyList()
188                 : Collections.unmodifiableList(versionRangeViolations);
189     }
190 
191     
192     
193     
194 
195     public boolean hasMetadataResolutionExceptions() {
196         return metadataResolutionExceptions != null;
197     }
198 
199     public ArtifactResolutionResult addMetadataResolutionException(ArtifactResolutionException e) {
200         metadataResolutionExceptions = initList(metadataResolutionExceptions);
201 
202         metadataResolutionExceptions.add(e);
203 
204         exceptions = initList(exceptions);
205 
206         exceptions.add(e);
207 
208         return this;
209     }
210 
211     public ArtifactResolutionException getMetadataResolutionException(int i) {
212         return metadataResolutionExceptions.get(i);
213     }
214 
215     public List<ArtifactResolutionException> getMetadataResolutionExceptions() {
216         return metadataResolutionExceptions == null
217                 ? Collections.emptyList()
218                 : Collections.unmodifiableList(metadataResolutionExceptions);
219     }
220 
221     
222     
223     
224 
225     public boolean hasErrorArtifactExceptions() {
226         return errorArtifactExceptions != null;
227     }
228 
229     public ArtifactResolutionResult addErrorArtifactException(ArtifactResolutionException e) {
230         errorArtifactExceptions = initList(errorArtifactExceptions);
231 
232         errorArtifactExceptions.add(e);
233 
234         exceptions = initList(exceptions);
235 
236         exceptions.add(e);
237 
238         return this;
239     }
240 
241     public List<ArtifactResolutionException> getErrorArtifactExceptions() {
242         if (errorArtifactExceptions == null) {
243             return Collections.emptyList();
244         }
245 
246         return Collections.unmodifiableList(errorArtifactExceptions);
247     }
248 
249     
250     
251     
252 
253     public boolean hasCircularDependencyExceptions() {
254         return circularDependencyExceptions != null;
255     }
256 
257     public ArtifactResolutionResult addCircularDependencyException(CyclicDependencyException e) {
258         circularDependencyExceptions = initList(circularDependencyExceptions);
259 
260         circularDependencyExceptions.add(e);
261 
262         exceptions = initList(exceptions);
263 
264         exceptions.add(e);
265 
266         return this;
267     }
268 
269     public CyclicDependencyException getCircularDependencyException(int i) {
270         return circularDependencyExceptions.get(i);
271     }
272 
273     public List<CyclicDependencyException> getCircularDependencyExceptions() {
274         if (circularDependencyExceptions == null) {
275             return Collections.emptyList();
276         }
277 
278         return Collections.unmodifiableList(circularDependencyExceptions);
279     }
280 
281     
282     
283     
284 
285     public List<ArtifactRepository> getRepositories() {
286         if (repositories == null) {
287             return Collections.emptyList();
288         }
289 
290         return Collections.unmodifiableList(repositories);
291     }
292 
293     public ArtifactResolutionResult setRepositories(final List<ArtifactRepository> repositories) {
294         this.repositories = repositories;
295 
296         return this;
297     }
298 
299     
300     
301     
302 
303     private <T> List<T> initList(final List<T> l) {
304         if (l == null) {
305             return new ArrayList<>();
306         }
307         return l;
308     }
309 
310     public String toString() {
311         StringBuilder sb = new StringBuilder();
312 
313         if (artifacts != null) {
314             int i = 1;
315             sb.append("---------").append(LS);
316             sb.append(artifacts.size()).append(LS);
317             for (Artifact a : artifacts) {
318                 sb.append(i).append(' ').append(a).append(LS);
319                 i++;
320             }
321             sb.append("---------");
322         }
323 
324         return sb.toString();
325     }
326 }