KickJava   Java API By Example, From Geeks To Geeks.

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


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.io.FileOutputStream JavaDoc;
10 import java.io.IOException JavaDoc;
11 import java.io.OutputStream JavaDoc;
12 import java.io.PrintWriter JavaDoc;
13 import java.util.ArrayList JavaDoc;
14 import java.util.Collection JavaDoc;
15 import java.util.Date JavaDoc;
16 import java.util.Iterator JavaDoc;
17 import java.util.List JavaDoc;
18 import java.util.Map JavaDoc;
19
20 import fr.jayasoft.ivy.ArtifactOrigin;
21 import fr.jayasoft.ivy.Ivy;
22 import fr.jayasoft.ivy.IvyNode;
23 import fr.jayasoft.ivy.License;
24 import fr.jayasoft.ivy.ModuleDescriptor;
25 import fr.jayasoft.ivy.ModuleId;
26 import fr.jayasoft.ivy.ModuleRevisionId;
27 import fr.jayasoft.ivy.util.FileUtil;
28 import fr.jayasoft.ivy.util.Message;
29 import fr.jayasoft.ivy.util.StringUtils;
30
31 /**
32  * @author Xavier Hanin
33  *
34  */

35 public class XmlReportOutputter implements ReportOutputter {
36
37    public String JavaDoc getName() {
38        return XML;
39    }
40    
41     public void output(ResolveReport report, File JavaDoc destDir) {
42         String JavaDoc[] confs = report.getConfigurations();
43         for (int i = 0; i < confs.length; i++) {
44             output(report.getConfigurationReport(confs[i]), confs, destDir);
45         }
46     }
47     
48     public void output(ConfigurationResolveReport report, File JavaDoc destDir) {
49         output(report, new String JavaDoc[] {report.getConfiguration()}, destDir);
50     }
51     
52     public void output(ConfigurationResolveReport report, String JavaDoc[] confs, File JavaDoc destDir) {
53         try {
54             destDir.mkdirs();
55             File JavaDoc reportFile = new File JavaDoc(destDir, getReportFileName(report));
56             OutputStream JavaDoc stream = new FileOutputStream JavaDoc(reportFile);
57             output(report, confs, stream);
58             stream.close();
59             
60             Message.verbose("\treport for "+report.getModuleDescriptor().getModuleRevisionId()+" "+report.getConfiguration()+" produced in "+reportFile);
61             
62             File JavaDoc reportXsl = new File JavaDoc(destDir, "ivy-report.xsl");
63             File JavaDoc reportCss = new File JavaDoc(destDir, "ivy-report.css");
64             if (!reportXsl.exists()) {
65                 FileUtil.copy(XmlReportOutputter.class.getResource("ivy-report.xsl"), reportXsl, null);
66             }
67             if (!reportCss.exists()) {
68                 FileUtil.copy(XmlReportOutputter.class.getResource("ivy-report.css"), reportCss, null);
69             }
70         } catch (IOException JavaDoc ex) {
71             Message.error("impossible to produce report for "+report.getModuleDescriptor()+": "+ex.getMessage());
72         }
73     }
74     
75     public void output(ConfigurationResolveReport report, OutputStream JavaDoc stream) {
76         output(report, new String JavaDoc[] {report.getConfiguration()}, stream);
77     }
78     public void output(ConfigurationResolveReport report, String JavaDoc[] confs, OutputStream JavaDoc stream) {
79         PrintWriter JavaDoc out = new PrintWriter JavaDoc(stream);
80         ModuleRevisionId mrid = report.getModuleDescriptor().getModuleRevisionId();
81         out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
82         out.println("<?xml-stylesheet type=\"text/xsl\" HREF=\"ivy-report.xsl\"?>");
83         out.println("<ivy-report version=\"1.0\">");
84         out.println("\t<info");
85         out.println("\t\torganisation=\""+mrid.getOrganisation()+"\"");
86         out.println("\t\tmodule=\""+mrid.getName()+"\"");
87         out.println("\t\tconf=\""+report.getConfiguration()+"\"");
88         out.println("\t\tconfs=\""+StringUtils.join(confs, ", ")+"\"");
89         out.println("\t\tdate=\""+Ivy.DATE_FORMAT.format(report.getDate())+"\"/>");
90         
91         out.println("\t<dependencies>");
92         
93         // create a list of ModuleRevisionIds indicating the position for each dependency
94
List JavaDoc dependencies = new ArrayList JavaDoc(report.getModuleRevisionIds());
95         
96         for (Iterator JavaDoc iter = report.getModuleIds().iterator(); iter.hasNext();) {
97             ModuleId mid = (ModuleId) iter.next();
98             out.println("\t\t<module organisation=\""+mid.getOrganisation()+"\"" +
99                     " name=\""+mid.getName()+"\"" +
100                     " resolver=\""+report.getIvy().getResolverName(mid)+"\">");
101             for (Iterator JavaDoc it2 = report.getNodes(mid).iterator(); it2.hasNext();) {
102                 IvyNode dep = (IvyNode)it2.next();
103                 ModuleDescriptor md = null;
104                 if (dep.getModuleRevision() != null) {
105                     md = dep.getModuleRevision().getDescriptor();
106                 }
107                 StringBuffer JavaDoc details = new StringBuffer JavaDoc();
108                 if (dep.isLoaded()) {
109                     details.append(" status=\"").append(dep.getDescriptor().getStatus()).append("\"").append(
110                         " pubdate=\"").append(Ivy.DATE_FORMAT.format(new Date JavaDoc(dep.getPublication()))).append("\"").append(
111                         " resolver=\"").append(dep.getModuleRevision().getResolver().getName()).append("\"").append(
112                         " artresolver=\"").append(dep.getModuleRevision().getArtifactResolver().getName()).append("\"");
113                 }
114                 if (dep.isEvicted(report.getConfiguration())) {
115                     IvyNode.EvictionData ed = dep.getEvictedData(report.getConfiguration());
116                     if (ed.getConflictManager() != null) {
117                         details.append(" evicted=\"").append(ed.getConflictManager()).append("\"");
118                     } else {
119                         details.append(" evicted=\"transitive\"");
120                     }
121                 }
122                 if (dep.hasProblem()) {
123                     details.append(" error=\"").append(dep.getProblem().getMessage()).append("\"");
124                 }
125                 if (md != null && md.getHomePage() != null) {
126                     details.append(" homepage=\"").append(md.getHomePage()).append("\"");
127                 }
128                 Map JavaDoc extraAttributes = md!=null?md.getExtraAttributes():dep.getResolvedId().getExtraAttributes();
129                 for (Iterator JavaDoc iterator = extraAttributes.keySet().iterator(); iterator.hasNext();) {
130                     String JavaDoc attName = (String JavaDoc)iterator.next();
131                     details.append(" extra-").append(attName).append("=\"").append(extraAttributes.get(attName)).append("\"");
132                 }
133                 String JavaDoc defaultValue = dep.getDescriptor() != null ? " default=\""+dep.getDescriptor().isDefault()+"\"" : "";
134                 int position = dependencies.indexOf(dep.getResolvedId());
135                 out.println("\t\t\t<revision name=\""+dep.getResolvedId().getRevision()+"\"" +
136                          (dep.getResolvedId().getBranch() == null?"":" branch=\""+dep.getResolvedId().getBranch()+"\"")+
137                          details +
138                          " downloaded=\""+dep.isDownloaded()+"\""+
139                          " searched=\""+dep.isSearched()+"\""+
140                          defaultValue+
141                          " conf=\""+toString(dep.getConfigurations(report.getConfiguration()))+"\""+
142                          " position=\""+position+"\">");
143                 if (md != null) {
144                     License[] licenses = md.getLicenses();
145                     for (int i = 0; i < licenses.length; i++) {
146                         String JavaDoc lurl;
147                         if (licenses[i].getUrl() != null) {
148                             lurl = " url=\""+licenses[i].getUrl()+"\"";
149                         } else {
150                             lurl = "";
151                         }
152                         out.println("\t\t\t\t<license name=\""+licenses[i].getName()+"\""+lurl+"/>");
153                     }
154                 }
155                 if (dep.isEvicted(report.getConfiguration())) {
156                     IvyNode.EvictionData ed = dep.getEvictedData(report.getConfiguration());
157                     Collection JavaDoc selected = ed.getSelected();
158                     if (selected != null) {
159                         for (Iterator JavaDoc it3 = selected.iterator(); it3.hasNext();) {
160                             IvyNode sel = (IvyNode)it3.next();
161                             out.println("\t\t\t\t<evicted-by rev=\""+sel.getResolvedId().getRevision()+"\"/>");
162                         }
163                     }
164                 }
165                 IvyNode.Caller[] callers = dep.getCallers(report.getConfiguration());
166                 for (int i = 0; i < callers.length; i++) {
167                     StringBuffer JavaDoc callerDetails = new StringBuffer JavaDoc();
168                     Map JavaDoc callerExtraAttributes = callers[i].getDependencyDescriptor().getExtraAttributes();
169                     for (Iterator JavaDoc iterator = callerExtraAttributes.keySet().iterator(); iterator.hasNext();) {
170                         String JavaDoc attName = (String JavaDoc)iterator.next();
171                         callerDetails.append(" extra-").append(attName).append("=\"").append(callerExtraAttributes.get(attName)).append("\"");
172                     }
173
174                     out.println("\t\t\t\t<caller organisation=\""+callers[i].getModuleRevisionId().getOrganisation()+"\"" +
175                             " name=\""+callers[i].getModuleRevisionId().getName()+"\"" +
176                             " conf=\""+toString(callers[i].getCallerConfigurations())+"\""+
177                             " rev=\""+callers[i].getAskedDependencyId().getRevision()+"\""+
178                             callerDetails+
179                             "/>");
180                 }
181                 ArtifactDownloadReport[] adr = report.getDownloadReports(dep.getResolvedId());
182                 out.println("\t\t\t\t<artifacts>");
183                 for (int i = 0; i < adr.length; i++) {
184                     out.print("\t\t\t\t\t<artifact name=\""+adr[i].getName()+"\" type=\""+adr[i].getType()+"\" ext=\""+adr[i].getExt()+"\"");
185                     extraAttributes = adr[i].getArtifact().getExtraAttributes();
186                     for (Iterator JavaDoc iterator = extraAttributes.keySet().iterator(); iterator.hasNext();) {
187                         String JavaDoc attName = (String JavaDoc)iterator.next();
188                         out.print(" extra-"+attName+"=\""+extraAttributes.get(attName)+"\"");
189                     }
190                     out.print(" status=\""+adr[i].getDownloadStatus()+"\"");
191                     out.print(" size=\""+adr[i].getSize()+"\"");
192                     
193                     ArtifactOrigin origin = adr[i].getArtifactOrigin();
194                     if (origin != null) {
195                         out.println(">");
196                         out.println("\t\t\t\t\t\t<origin-location is-local=\"" + String.valueOf(origin.isLocal()) + "\"" +
197                                     " location=\"" + origin.getLocation() + "\"/>");
198                         out.println("\t\t\t\t\t</artifact>");
199                     } else {
200                         out.println("/>");
201                     }
202                 }
203                 out.println("\t\t\t\t</artifacts>");
204                 out.println("\t\t\t</revision>");
205             }
206             out.println("\t\t</module>");
207         }
208         out.println("\t</dependencies>");
209         out.println("</ivy-report>");
210         out.flush();
211     }
212
213     private String JavaDoc toString(String JavaDoc[] strs) {
214         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
215         for (int i = 0; i < strs.length; i++) {
216             buf.append(strs[i]);
217             if (i + 1 < strs.length) {
218                 buf.append(", ");
219             }
220         }
221         return buf.toString();
222     }
223
224     public static String JavaDoc getReportFileName(ConfigurationResolveReport report) {
225         return getReportFileName(
226                 report.getModuleDescriptor().getModuleRevisionId().getModuleId(),
227                 report.getConfiguration());
228     }
229
230     public static String JavaDoc getReportFileName(ModuleId mid, String JavaDoc conf) {
231         return
232             mid.getOrganisation()
233             + "-" + mid.getName()
234             + "-" + conf+".xml";
235     }
236
237 }
238
Popular Tags