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.HashSet ; 13 import java.util.Iterator ; 14 import java.util.LinkedHashMap ; 15 import java.util.List ; 16 import java.util.Map ; 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 26 public class ResolveReport { 27 private ModuleDescriptor _md; 28 private Map _confReports = new LinkedHashMap (); 29 private List _problemMessages; 30 private List _dependencies; private List _artifacts; 32 private long _resolveTime; 33 private long _downloadTime; 34 35 public ResolveReport(ModuleDescriptor md) { 36 _md = md; 37 } 38 public void addReport(String conf, ConfigurationResolveReport report) { 39 _confReports.put(conf, report); 40 } 41 public ConfigurationResolveReport getConfigurationReport(String conf) { 42 return (ConfigurationResolveReport)_confReports.get(conf); 43 } 44 public String [] getConfigurations() { 45 return (String [])_confReports.keySet().toArray(new String [_confReports.size()]); 46 } 47 public boolean hasError() { 48 boolean hasError = false; 49 for (Iterator 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 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 all = new HashSet (); 68 for (Iterator 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 all = new HashSet (); 76 for (Iterator 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 all = new HashSet (); 84 for (Iterator 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 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 problems) { 100 _problemMessages = problems; 101 } 102 public List getProblemMessages() { 103 return _problemMessages; 104 } 105 public List getAllProblemMessages() { 106 List ret = new ArrayList (_problemMessages); 107 for (Iterator 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 e = unresolved[i].getProblem(); 112 if (e != null) { 113 String errMsg = e instanceof RuntimeException ?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 dependencies, Filter artifactFilter) { 130 _dependencies = dependencies; 131 _artifacts = new ArrayList (); 133 for (Iterator 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 String [] 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 154 public List getDependencies() { 155 return _dependencies; 156 } 157 163 public List getArtifacts() { 164 return _artifacts; 165 } 166 170 public List getModuleIds() { 171 List ret = new ArrayList (); 172 List sortedDependencies = new ArrayList (_dependencies); 173 for (Iterator 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 |