KickJava   Java API By Example, From Geeks To Geeks.

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


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.Collections JavaDoc;
13 import java.util.Date JavaDoc;
14 import java.util.HashMap JavaDoc;
15 import java.util.HashSet JavaDoc;
16 import java.util.Iterator JavaDoc;
17 import java.util.LinkedHashMap JavaDoc;
18 import java.util.LinkedHashSet JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Map JavaDoc;
21 import java.util.Set JavaDoc;
22
23 import fr.jayasoft.ivy.Artifact;
24 import fr.jayasoft.ivy.Ivy;
25 import fr.jayasoft.ivy.IvyNode;
26 import fr.jayasoft.ivy.ModuleDescriptor;
27 import fr.jayasoft.ivy.ModuleId;
28 import fr.jayasoft.ivy.ModuleRevisionId;
29 import fr.jayasoft.ivy.util.Message;
30 import fr.jayasoft.ivy.xml.XmlReportParser;
31
32 /**
33  * @author x.hanin
34  *
35  */

36 public class ConfigurationResolveReport {
37
38     private ModuleDescriptor _md;
39     private String JavaDoc _conf;
40     private Date JavaDoc _date;
41     private Map JavaDoc _dependencyReports = new HashMap JavaDoc();
42     private Map JavaDoc _dependencies = new LinkedHashMap JavaDoc();
43     private Ivy _ivy;
44     private Map JavaDoc _modulesIdsMap = new LinkedHashMap JavaDoc();
45     private List JavaDoc _modulesIds;
46     private List JavaDoc _previousDeps;
47
48     public ConfigurationResolveReport(Ivy ivy, ModuleDescriptor md, String JavaDoc conf, Date JavaDoc date, File JavaDoc cache) {
49         _ivy = ivy;
50         _md = md;
51         _conf = conf;
52         _date = date;
53
54         // parse previous deps from previous report file if any
55
File JavaDoc previousReportFile = new File JavaDoc(cache, XmlReportOutputter.getReportFileName(md.getModuleRevisionId().getModuleId(), conf));
56         if (previousReportFile.exists()) {
57             try {
58                 _previousDeps = Arrays.asList(new XmlReportParser().getDependencyRevisionIds(md.getModuleRevisionId().getModuleId(), conf, cache));
59             } catch (Exception JavaDoc e) {
60                 _previousDeps = null;
61             }
62         } else {
63             _previousDeps = null;
64         }
65     }
66     
67     public boolean hasChanged() {
68         if (_previousDeps == null) {
69             return true;
70         }
71         return !new HashSet JavaDoc(_previousDeps).equals(getModuleRevisionIds());
72     }
73
74     /**
75      * Returns all non evicted and non error dependency mrids
76      * The returned set is ordered so that a dependency will always
77      * be found before their own dependencies
78      * @return all non evicted and non error dependency mrids
79      */

80     public Set JavaDoc getModuleRevisionIds() {
81         Set JavaDoc mrids = new LinkedHashSet JavaDoc();
82         for (Iterator JavaDoc iter = getDependencies().iterator(); iter.hasNext();) {
83             IvyNode node = (IvyNode) iter.next();
84             if (!node.isEvicted(getConfiguration()) && !node.hasProblem()) {
85                 mrids.add(node.getResolvedId());
86             }
87         }
88         return mrids;
89     }
90
91     public void addDependency(IvyNode node) {
92         _dependencies.put(node.getId(), node);
93         _dependencies.put(node.getResolvedId(), node);
94         _dependencyReports.put(node, Collections.EMPTY_LIST);
95     }
96
97     public void addDependency(IvyNode node, DownloadReport report) {
98         _dependencies.put(node.getId(), node);
99         _dependencies.put(node.getResolvedId(), node);
100         List JavaDoc adrs = new ArrayList JavaDoc();
101         Artifact[] artifacts = node.getArtifacts(_conf);
102         for (int i = 0; i < artifacts.length; i++) {
103             ArtifactDownloadReport artifactReport = report.getArtifactReport(artifacts[i]);
104             if (artifactReport != null) {
105                 adrs.add(artifactReport);
106             } else {
107                 Message.debug("no report found for "+artifacts[i]);
108             }
109         }
110         _dependencyReports.put(node, adrs);
111     }
112
113
114     public String JavaDoc getConfiguration() {
115         return _conf;
116     }
117     public Date JavaDoc getDate() {
118         return _date;
119     }
120     public ModuleDescriptor getModuleDescriptor() {
121         return _md;
122     }
123     public IvyNode[] getUnresolvedDependencies() {
124         List JavaDoc unresolved = new ArrayList JavaDoc();
125         for (Iterator JavaDoc iter = getDependencies().iterator(); iter.hasNext();) {
126             IvyNode node = (IvyNode)iter.next();
127             if (node.hasProblem()) {
128                 unresolved.add(node);
129             }
130         }
131         return (IvyNode[])unresolved.toArray(new IvyNode[unresolved.size()]);
132     }
133
134     private Collection JavaDoc getDependencies() {
135         return new LinkedHashSet JavaDoc(_dependencies.values());
136     }
137     public IvyNode[] getEvictedNodes() {
138         List JavaDoc evicted = new ArrayList JavaDoc();
139         for (Iterator JavaDoc iter = getDependencies().iterator(); iter.hasNext();) {
140             IvyNode node = (IvyNode)iter.next();
141             if (node.isEvicted(_conf)) {
142                 evicted.add(node);
143             }
144         }
145         return (IvyNode[])evicted.toArray(new IvyNode[evicted.size()]);
146     }
147     public IvyNode[] getDownloadedNodes() {
148         List JavaDoc downloaded = new ArrayList JavaDoc();
149         for (Iterator JavaDoc iter = getDependencies().iterator(); iter.hasNext();) {
150             IvyNode node = (IvyNode)iter.next();
151             if (node.isDownloaded() && node.getRealNode() == node) {
152                 downloaded.add(node);
153             }
154         }
155         return (IvyNode[])downloaded.toArray(new IvyNode[downloaded.size()]);
156     }
157     public IvyNode[] getSearchedNodes() {
158         List JavaDoc downloaded = new ArrayList JavaDoc();
159         for (Iterator JavaDoc iter = getDependencies().iterator(); iter.hasNext();) {
160             IvyNode node = (IvyNode)iter.next();
161             if (node.isSearched() && node.getRealNode() == node) {
162                 downloaded.add(node);
163             }
164         }
165         return (IvyNode[])downloaded.toArray(new IvyNode[downloaded.size()]);
166     }
167
168     public ArtifactDownloadReport[] getDownloadReports(ModuleRevisionId mrid) {
169         Collection JavaDoc col = (Collection JavaDoc)_dependencyReports.get(getDependency(mrid));
170         if (col == null) {
171             return new ArtifactDownloadReport[0];
172         }
173         return (ArtifactDownloadReport[]) col.toArray(new ArtifactDownloadReport[col.size()]);
174     }
175
176     public IvyNode getDependency(ModuleRevisionId mrid) {
177         return (IvyNode) _dependencies.get(mrid);
178     }
179
180     /**
181      * gives all the modules ids concerned by this report, from the most dependent to the least one
182      * @return a list of ModuleId
183      */

184     public List JavaDoc getModuleIds() {
185         if (_modulesIds == null) {
186             List JavaDoc sortedDependencies = _ivy.sortNodes(getDependencies());
187             Collections.reverse(sortedDependencies);
188             for (Iterator JavaDoc iter = sortedDependencies.iterator(); iter.hasNext();) {
189                 IvyNode dependency = (IvyNode) iter.next();
190                 ModuleId mid = dependency.getResolvedId().getModuleId();
191                 Collection JavaDoc deps = (Collection JavaDoc)_modulesIdsMap.get(mid);
192                 if (deps == null) {
193                     deps = new HashSet JavaDoc();
194                     _modulesIdsMap.put(mid, deps);
195                 }
196                 deps.add(dependency);
197             }
198             _modulesIds = new ArrayList JavaDoc(_modulesIdsMap.keySet());
199         }
200         return Collections.unmodifiableList(_modulesIds);
201     }
202     
203     public Collection JavaDoc getNodes(ModuleId mid) {
204         if (_modulesIds == null) {
205             getModuleIds();
206         }
207         return (Collection JavaDoc)_modulesIdsMap.get(mid);
208     }
209
210     public Ivy getIvy() {
211         return _ivy;
212     }
213
214     public int getArtifactsNumber() {
215         int total = 0;
216         for (Iterator JavaDoc iter = _dependencyReports.values().iterator(); iter.hasNext();) {
217             Collection JavaDoc reports = (Collection JavaDoc)iter.next();
218             total += reports==null?0:reports.size();
219         }
220         return total;
221     }
222     public ArtifactDownloadReport[] getDownloadedArtifactsReports() {
223         List JavaDoc result = new ArrayList JavaDoc();
224         for (Iterator JavaDoc iter = _dependencyReports.values().iterator(); iter.hasNext();) {
225             Collection JavaDoc reports = (Collection JavaDoc)iter.next();
226             for (Iterator JavaDoc iterator = reports.iterator(); iterator.hasNext();) {
227                 ArtifactDownloadReport adr = (ArtifactDownloadReport)iterator.next();
228                 if (adr.getDownloadStatus() == DownloadStatus.SUCCESSFUL) {
229                     result.add(adr);
230                 }
231             }
232         }
233         return (ArtifactDownloadReport[])result.toArray(new ArtifactDownloadReport[result.size()]);
234     }
235     public ArtifactDownloadReport[] getFailedArtifactsReports() {
236         List JavaDoc result = new ArrayList JavaDoc();
237         for (Iterator JavaDoc iter = _dependencyReports.values().iterator(); iter.hasNext();) {
238             Collection JavaDoc reports = (Collection JavaDoc)iter.next();
239             for (Iterator JavaDoc iterator = reports.iterator(); iterator.hasNext();) {
240                 ArtifactDownloadReport adr = (ArtifactDownloadReport)iterator.next();
241                 if (adr.getDownloadStatus() == DownloadStatus.FAILED) {
242                     result.add(adr);
243                 }
244             }
245         }
246         return (ArtifactDownloadReport[])result.toArray(new ArtifactDownloadReport[result.size()]);
247     }
248     public boolean hasError() {
249         return getUnresolvedDependencies().length > 0 || getFailedArtifactsReports().length > 0;
250     }
251
252     public int getNodesNumber() {
253         return getDependencies().size();
254     }
255
256
257 }
258
Popular Tags