KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > report > ResolveReport


1 /*
2  * This file is subject to the license found in LICENCE.TXT in the root directory of the project.
3  *
4  * #SNAPSHOT#
5  */

6 package fr.jayasoft.ivy.report;
7
8 import java.io.File JavaDoc;
9 import java.util.ArrayList JavaDoc;
10 import java.util.Arrays JavaDoc;
11 import java.util.Collection JavaDoc;
12 import java.util.HashSet JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import java.util.LinkedHashMap JavaDoc;
15 import java.util.List JavaDoc;
16 import java.util.Map JavaDoc;
17
18 import fr.jayasoft.ivy.IvyNode;
19 import fr.jayasoft.ivy.ModuleDescriptor;
20 import fr.jayasoft.ivy.ModuleId;
21 import fr.jayasoft.ivy.filter.Filter;
22
23 /**
24  * Represents a whole resolution report for a module
25  */

26 public class ResolveReport {
27     private ModuleDescriptor _md;
28     private Map JavaDoc _confReports = new LinkedHashMap JavaDoc();
29     private List JavaDoc _problemMessages;
30     private List JavaDoc _dependencies; // the list of all dependencies resolved, ordered from the more dependent to the less dependent
31
private List JavaDoc _artifacts;
32     private long _resolveTime;
33     private long _downloadTime;
34     
35     public ResolveReport(ModuleDescriptor md) {
36         _md = md;
37     }
38     public void addReport(String JavaDoc conf, ConfigurationResolveReport report) {
39         _confReports.put(conf, report);
40     }
41     public ConfigurationResolveReport getConfigurationReport(String JavaDoc conf) {
42         return (ConfigurationResolveReport)_confReports.get(conf);
43     }
44     public String JavaDoc[] getConfigurations() {
45         return (String JavaDoc[])_confReports.keySet().toArray(new String JavaDoc[_confReports.size()]);
46     }
47     public boolean hasError() {
48         boolean hasError = false;
49         for (Iterator JavaDoc it = _confReports.values().iterator(); it.hasNext() && !hasError;) {
50             ConfigurationResolveReport report = (ConfigurationResolveReport)it.next();
51             hasError |= report.hasError();
52         }
53         return hasError;
54     }
55
56     public void output(ReportOutputter[] outputters, File JavaDoc cache) {
57         for (int i = 0; i < outputters.length; i++) {
58             outputters[i].output(this, cache);
59         }
60     }
61     
62     public ModuleDescriptor getModuleDescriptor() {
63         return _md;
64     }
65     
66     public IvyNode[] getEvictedNodes() {
67         Collection JavaDoc all = new HashSet JavaDoc();
68         for (Iterator JavaDoc iter = _confReports.values().iterator(); iter.hasNext();) {
69             ConfigurationResolveReport report = (ConfigurationResolveReport)iter.next();
70             all.addAll(Arrays.asList(report.getEvictedNodes()));
71         }
72         return (IvyNode[])all.toArray(new IvyNode[all.size()]);
73     }
74     public IvyNode[] getUnresolvedDependencies() {
75         Collection JavaDoc all = new HashSet JavaDoc();
76         for (Iterator JavaDoc iter = _confReports.values().iterator(); iter.hasNext();) {
77             ConfigurationResolveReport report = (ConfigurationResolveReport)iter.next();
78             all.addAll(Arrays.asList(report.getUnresolvedDependencies()));
79         }
80         return (IvyNode[])all.toArray(new IvyNode[all.size()]);
81     }
82     public ArtifactDownloadReport[] getFailedArtifactsReports() {
83         Collection JavaDoc all = new HashSet JavaDoc();
84         for (Iterator JavaDoc iter = _confReports.values().iterator(); iter.hasNext();) {
85             ConfigurationResolveReport report = (ConfigurationResolveReport)iter.next();
86             all.addAll(Arrays.asList(report.getFailedArtifactsReports()));
87         }
88         return (ArtifactDownloadReport[])all.toArray(new ArtifactDownloadReport[all.size()]);
89     }
90     public boolean hasChanged() {
91         for (Iterator JavaDoc iter = _confReports.values().iterator(); iter.hasNext();) {
92             ConfigurationResolveReport report = (ConfigurationResolveReport)iter.next();
93             if (report.hasChanged()) {
94                 return true;
95             }
96         }
97         return false;
98     }
99     public void setProblemMessages(List JavaDoc problems) {
100         _problemMessages = problems;
101     }
102     public List JavaDoc getProblemMessages() {
103         return _problemMessages;
104     }
105     public List JavaDoc getAllProblemMessages() {
106         List JavaDoc ret = new ArrayList JavaDoc(_problemMessages);
107         for (Iterator JavaDoc iter = _confReports.values().iterator(); iter.hasNext();) {
108             ConfigurationResolveReport r = (ConfigurationResolveReport) iter.next();
109             IvyNode[] unresolved = r.getUnresolvedDependencies();
110             for (int i = 0; i < unresolved.length; i++) {
111                 Exception JavaDoc e = unresolved[i].getProblem();
112                 if (e != null) {
113                     String JavaDoc errMsg = e instanceof RuntimeException JavaDoc?e.getMessage():e.toString();
114                     if (errMsg == null || errMsg.length()==0 || "null".equals(errMsg)) {
115                         errMsg = e.getClass().getName() + " at "+e.getStackTrace()[0].toString();
116                     }
117                     ret.add("unresolved dependency: "+unresolved[i].getId()+": "+errMsg);
118                 } else {
119                     ret.add("unresolved dependency: "+unresolved[i].getId());
120                 }
121             }
122             ArtifactDownloadReport[] adrs = r.getFailedArtifactsReports();
123             for (int i = 0; i < adrs.length; i++) {
124                 ret.add("download failed: "+adrs[i].getArtifact());
125             }
126         }
127         return ret;
128     }
129     public void setDependencies(List JavaDoc dependencies, Filter artifactFilter) {
130         _dependencies = dependencies;
131         // collect list of artifacts
132
_artifacts = new ArrayList JavaDoc();
133         for (Iterator JavaDoc iter = dependencies.iterator(); iter.hasNext();) {
134             IvyNode dependency = (IvyNode) iter.next();
135             if (!dependency.isCompletelyEvicted() && !dependency.hasProblem()) {
136                 _artifacts.addAll(Arrays.asList(dependency.getSelectedArtifacts(artifactFilter)));
137             }
138             // update the configurations reports with the dependencies
139
// these reports will be completed later with download information, if any
140
String JavaDoc[] dconfs = dependency.getRootModuleConfigurations();
141             for (int j = 0; j < dconfs.length; j++) {
142                 ConfigurationResolveReport configurationReport = getConfigurationReport(dconfs[j]);
143                 if (configurationReport != null) {
144                     configurationReport.addDependency(dependency);
145                 }
146             }
147         }
148     }
149     /**
150      * Returns the list of all dependencies concerned by this report as a List of IvyNode
151      * ordered from the more dependent to the least one
152      * @return
153      */

154     public List JavaDoc getDependencies() {
155         return _dependencies;
156     }
157     /**
158      * Returns the list of all artifacts which should be downloaded per this resolve
159      * To know if the artifact have actually been downloaded use information found
160      * in ConfigurationResolveReport.
161      * @return
162      */

163     public List JavaDoc getArtifacts() {
164         return _artifacts;
165     }
166     /**
167      * gives all the modules ids concerned by this report, from the most dependent to the least one
168      * @return a list of ModuleId
169      */

170     public List JavaDoc getModuleIds() {
171         List JavaDoc ret = new ArrayList JavaDoc();
172         List JavaDoc sortedDependencies = new ArrayList JavaDoc(_dependencies);
173         for (Iterator JavaDoc iter = sortedDependencies.iterator(); iter.hasNext();) {
174             IvyNode dependency = (IvyNode) iter.next();
175             ModuleId mid = dependency.getResolvedId().getModuleId();
176             if (!ret.contains(mid)) {
177                 ret.add(mid);
178             }
179         }
180         return ret;
181     }
182     public void setResolveTime(long elapsedTime) {
183         _resolveTime = elapsedTime;
184     }
185     public long getResolveTime() {
186         return _resolveTime;
187     }
188     public void setDownloadTime(long elapsedTime) {
189         _downloadTime = elapsedTime;
190     }
191     public long getDownloadTime() {
192         return _downloadTime;
193     }
194 }
195
Popular Tags