22 import java.util.Hashtable; |
22 import java.util.Hashtable; |
23 import java.util.Enumeration; |
23 import java.util.Enumeration; |
24 import java.io.ByteArrayOutputStream; |
24 import java.io.ByteArrayOutputStream; |
25 |
25 |
26 import org.dom4j.Document; |
26 import org.dom4j.Document; |
27 //import org.dom4j.DefaultDocumentType; |
|
28 import org.dom4j.DocumentHelper; |
27 import org.dom4j.DocumentHelper; |
29 import org.dom4j.Element; |
28 import org.dom4j.Element; |
30 import org.dom4j.io.XMLWriter; |
29 import org.dom4j.io.XMLWriter; |
31 import org.dom4j.io.OutputFormat; |
30 import org.dom4j.io.OutputFormat; |
32 |
31 |
46 |
45 |
47 // Dump of properties |
46 // Dump of properties |
48 private Hashtable<String, String> properties; |
47 private Hashtable<String, String> properties; |
49 // the toplevel node. |
48 // the toplevel node. |
50 private BuildNode root; |
49 private BuildNode root; |
51 private BuildEvent buildEvent; |
|
52 |
|
53 // Helium content database. |
50 // Helium content database. |
54 private Document database; |
51 private Document database; |
55 |
52 |
56 // Deps hashes: helper to remove duplicates. |
53 // Deps hashes: helper to remove duplicates. |
57 private Vector<String> targetList = new Vector<String>(); |
54 private Vector<String> targetList = new Vector<String>(); |
58 private Vector<String> taskList = new Vector<String>(); |
|
59 private Vector<String> assertList = new Vector<String>(); |
55 private Vector<String> assertList = new Vector<String>(); |
60 |
56 |
61 public XMLRenderer(BuildNode root, Document database, Hashtable<String, String> properties, BuildEvent event) { |
57 public XMLRenderer(BuildNode root, Document database, Hashtable<String, String> properties, BuildEvent event) { |
62 this.root = root; |
58 this.root = root; |
63 this.database = database; |
59 this.database = database; |
64 this.properties = properties; |
60 this.properties = properties; |
65 this.buildEvent = event; |
|
66 } |
61 } |
67 |
62 |
68 /** |
63 /** |
69 * Generating target only for TargetNode type of node |
64 * Generating target only for TargetNode type of node |
70 * @param node |
65 * @param node |
95 Element targets = statistics.addElement("targets"); |
90 Element targets = statistics.addElement("targets"); |
96 if (root != null) { |
91 if (root != null) { |
97 createTarget(root, targets); |
92 createTarget(root, targets); |
98 } |
93 } |
99 } |
94 } |
100 |
|
101 /** |
|
102 * Generating task only for TargetNode type of node |
|
103 * @param node |
|
104 * @param targets |
|
105 */ |
|
106 protected void createTask(DataNode node, Element targets) { |
|
107 if (node instanceof TaskNode) { |
|
108 TaskNode taskNode = (TaskNode)node; |
|
109 if (!taskList.contains(taskNode.getName())) { |
|
110 taskList.add(taskNode.getName()); |
|
111 Element target = targets.addElement("task"); |
|
112 target.addAttribute("id", "task@" + taskList.indexOf(taskNode.getName())); |
|
113 target.addAttribute("name", taskNode.getName()); |
|
114 } |
|
115 } |
|
116 for (Iterator<DataNode> i = node.iterator() ; i.hasNext() ; ) { |
|
117 createTask(i.next(), targets); |
|
118 } |
|
119 } |
|
120 |
|
121 /** |
|
122 * Creating the task section. |
|
123 * @param statistics |
|
124 */ |
|
125 protected void createTasks(Element statistics) { |
|
126 Element tasks = statistics.addElement("tasks"); |
|
127 if (root != null) { |
|
128 createTask(root, tasks); |
|
129 } |
|
130 } |
|
131 |
95 |
132 /** |
96 /** |
133 * Creating the assert section. |
97 * Creating the assert section. |
134 * @param statistics |
98 * @param statistics |
135 */ |
99 */ |
152 if (assertNode.getAssertName() != null) { |
116 if (assertNode.getAssertName() != null) { |
153 assertList.add(assertNode.getAssertName()); |
117 assertList.add(assertNode.getAssertName()); |
154 Element target = targets.addElement("assert"); |
118 Element target = targets.addElement("assert"); |
155 target.addAttribute("id", "assert@" + assertList.indexOf(assertNode.getAssertName())); |
119 target.addAttribute("id", "assert@" + assertList.indexOf(assertNode.getAssertName())); |
156 target.addAttribute("name", assertNode.getAssertName()); |
120 target.addAttribute("name", assertNode.getAssertName()); |
157 //target.addAttribute("assertname", assertNode.getAssertName()); |
|
158 target.addAttribute("file", assertNode.getFilename()); |
121 target.addAttribute("file", assertNode.getFilename()); |
159 target.addAttribute("line", "" + assertNode.getLine()); |
122 target.addAttribute("line", "" + assertNode.getLine()); |
160 target.addAttribute("message", "" + assertNode.getMessage()); |
123 target.addAttribute("message", "" + assertNode.getMessage()); |
161 } |
124 } |
162 |
125 |
190 elt.addAttribute("thread", "" + targetNode.getThreadId()); |
153 elt.addAttribute("thread", "" + targetNode.getThreadId()); |
191 elt.addAttribute("startUsedHeap", "" + targetNode.getStartUsedHeap()); |
154 elt.addAttribute("startUsedHeap", "" + targetNode.getStartUsedHeap()); |
192 elt.addAttribute("startCommittedHeap", "" + targetNode.getStartCommittedHeap()); |
155 elt.addAttribute("startCommittedHeap", "" + targetNode.getStartCommittedHeap()); |
193 elt.addAttribute("endUsedHeap", "" + targetNode.getEndUsedHeap()); |
156 elt.addAttribute("endUsedHeap", "" + targetNode.getEndUsedHeap()); |
194 elt.addAttribute("endCommittedHeap", "" + targetNode.getEndCommittedHeap()); |
157 elt.addAttribute("endCommittedHeap", "" + targetNode.getEndCommittedHeap()); |
195 } else if (node instanceof TaskNode) { |
|
196 TaskNode taskNode = (TaskNode)node; |
|
197 elt = tree.addElement("taskRef"); |
|
198 elt.addAttribute("reference", "task@" + taskList.indexOf(taskNode.getName())); |
|
199 elt.addAttribute("startTime", "" + taskNode.getStartTime().getTime()); |
|
200 elt.addAttribute("endTime", "" + taskNode.getEndTime().getTime()); |
|
201 elt.addAttribute("thread", "" + taskNode.getThreadId()); |
|
202 } else if (node instanceof AssertNode) { |
158 } else if (node instanceof AssertNode) { |
203 AssertNode assertNode = (AssertNode)node; |
159 AssertNode assertNode = (AssertNode)node; |
204 if (assertNode.getAssertName() != null) { |
160 if (assertNode.getAssertName() != null) { |
205 elt = tree.addElement("assertRef"); |
161 elt = tree.addElement("assertRef"); |
206 elt.addAttribute("reference", "assert@" + assertList.indexOf(assertNode.getAssertName())); |
162 elt.addAttribute("reference", "assert@" + assertList.indexOf(assertNode.getAssertName())); |
255 * Rendering the build node into XML string. |
211 * Rendering the build node into XML string. |
256 */ |
212 */ |
257 public String toString() { |
213 public String toString() { |
258 // Creating the XML document |
214 // Creating the XML document |
259 Document document = DocumentHelper.createDocument(); |
215 Document document = DocumentHelper.createDocument(); |
260 // DefaultDocumentType(String elementName, String publicID, String systemID) |
|
261 //document.setDocType(new DefaultDocumentType()); |
|
262 Element statistics = document.addElement( "statistics" ); |
216 Element statistics = document.addElement( "statistics" ); |
263 statistics.addAttribute("version", "1.0"); |
217 statistics.addAttribute("version", "1.1"); |
264 |
218 |
265 // Creating the document content. |
219 // Creating the document content. |
266 insertDatabase(statistics); |
220 insertDatabase(statistics); |
267 createTargets(statistics); |
221 createTargets(statistics); |
268 createTasks(statistics); |
|
269 createAsserts(statistics); |
222 createAsserts(statistics); |
270 createExecutionTree(statistics); |
223 createExecutionTree(statistics); |
271 createProperties(statistics); |
224 createProperties(statistics); |
272 try { |
225 try { |
273 ByteArrayOutputStream output = new ByteArrayOutputStream(); |
226 ByteArrayOutputStream output = new ByteArrayOutputStream(); |