1 6 package fr.jayasoft.ivy.report; 7 8 import java.io.File ; 9 import java.util.ArrayList ; 10 import java.util.Arrays ; 11 import java.util.Collection ; 12 import java.util.Collections ; 13 import java.util.Date ; 14 import java.util.HashMap ; 15 import java.util.HashSet ; 16 import java.util.Iterator ; 17 import java.util.LinkedHashMap ; 18 import java.util.LinkedHashSet ; 19 import java.util.List ; 20 import java.util.Map ; 21 import java.util.Set ; 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 36 public class ConfigurationResolveReport { 37 38 private ModuleDescriptor _md; 39 private String _conf; 40 private Date _date; 41 private Map _dependencyReports = new HashMap (); 42 private Map _dependencies = new LinkedHashMap (); 43 private Ivy _ivy; 44 private Map _modulesIdsMap = new LinkedHashMap (); 45 private List _modulesIds; 46 private List _previousDeps; 47 48 public ConfigurationResolveReport(Ivy ivy, ModuleDescriptor md, String conf, Date date, File cache) { 49 _ivy = ivy; 50 _md = md; 51 _conf = conf; 52 _date = date; 53 54 File previousReportFile = new File (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 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 (_previousDeps).equals(getModuleRevisionIds()); 72 } 73 74 80 public Set getModuleRevisionIds() { 81 Set mrids = new LinkedHashSet (); 82 for (Iterator 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 adrs = new ArrayList (); 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 getConfiguration() { 115 return _conf; 116 } 117 public Date getDate() { 118 return _date; 119 } 120 public ModuleDescriptor getModuleDescriptor() { 121 return _md; 122 } 123 public IvyNode[] getUnresolvedDependencies() { 124 List unresolved = new ArrayList (); 125 for (Iterator 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 getDependencies() { 135 return new LinkedHashSet (_dependencies.values()); 136 } 137 public IvyNode[] getEvictedNodes() { 138 List evicted = new ArrayList (); 139 for (Iterator 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 downloaded = new ArrayList (); 149 for (Iterator 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 downloaded = new ArrayList (); 159 for (Iterator 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 col = (Collection )_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 184 public List getModuleIds() { 185 if (_modulesIds == null) { 186 List sortedDependencies = _ivy.sortNodes(getDependencies()); 187 Collections.reverse(sortedDependencies); 188 for (Iterator iter = sortedDependencies.iterator(); iter.hasNext();) { 189 IvyNode dependency = (IvyNode) iter.next(); 190 ModuleId mid = dependency.getResolvedId().getModuleId(); 191 Collection deps = (Collection )_modulesIdsMap.get(mid); 192 if (deps == null) { 193 deps = new HashSet (); 194 _modulesIdsMap.put(mid, deps); 195 } 196 deps.add(dependency); 197 } 198 _modulesIds = new ArrayList (_modulesIdsMap.keySet()); 199 } 200 return Collections.unmodifiableList(_modulesIds); 201 } 202 203 public Collection getNodes(ModuleId mid) { 204 if (_modulesIds == null) { 205 getModuleIds(); 206 } 207 return (Collection )_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 iter = _dependencyReports.values().iterator(); iter.hasNext();) { 217 Collection reports = (Collection )iter.next(); 218 total += reports==null?0:reports.size(); 219 } 220 return total; 221 } 222 public ArtifactDownloadReport[] getDownloadedArtifactsReports() { 223 List result = new ArrayList (); 224 for (Iterator iter = _dependencyReports.values().iterator(); iter.hasNext();) { 225 Collection reports = (Collection )iter.next(); 226 for (Iterator 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 result = new ArrayList (); 237 for (Iterator iter = _dependencyReports.values().iterator(); iter.hasNext();) { 238 Collection reports = (Collection )iter.next(); 239 for (Iterator 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 |