1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package net.sf.clirr.core;
21
22 import java.io.IOException;
23 import java.io.PrintStream;
24
25 /***
26 * A DiffListener that reports any detected difference to
27 * an XML file. That file can be used by subsequent processing steps
28 * to create nice looking reports in HTML, PDF, etc.
29 *
30 * @author lkuehne
31 */
32 public final class XmlDiffListener extends FileDiffListener
33 {
34 private static final String DIFFREPORT = "diffreport";
35 private static final String DIFFERENCE = "difference";
36
37 private MessageTranslator translator = new MessageTranslator();
38
39 public XmlDiffListener(String outFile) throws IOException
40 {
41 super(outFile);
42 }
43
44 public void reportDiff(ApiDifference difference)
45 {
46 PrintStream out = getOutputStream();
47 out.print(" <" + DIFFERENCE);
48 out.print(" binseverity=\"" + difference.getBinaryCompatibilitySeverity() + "\"");
49 out.print(" srcseverity=\"" + difference.getSourceCompatibilitySeverity() + "\"");
50 out.print(" class=\"" + difference.getAffectedClass() + "\"");
51 if (difference.getAffectedMethod() != null)
52 {
53 out.print(" method=\"" + difference.getAffectedMethod() + "\"");
54 }
55 if (difference.getAffectedField() != null)
56 {
57 out.print(" field=\"" + difference.getAffectedField() + "\"");
58 }
59 out.print(">");
60 out.print(difference.getReport(translator));
61 out.println("</" + DIFFERENCE + '>');
62 }
63
64 /***
65 * Writes an XML header and toplevel tag to the xml stream.
66 *
67 * @see DiffListener#start()
68 */
69 public void start()
70 {
71 PrintStream out = getOutputStream();
72 out.println("<?xml version=\"1.0\"?>");
73 out.println('<' + DIFFREPORT + '>');
74 }
75
76
77 /***
78 * Closes the toplevel tag that was opened in start.
79 *
80 * @see DiffListener#stop()
81 */
82 protected void writeFooter()
83 {
84 PrintStream out = getOutputStream();
85 out.println("</" + DIFFREPORT + '>');
86 }
87 }