1
2 package com.pnpconsult.zeiterfassung.pdf;
3
4 import java.util.Iterator;
5
6 import javax.xml.transform.Source;
7
8 import org.dom4j.Document;
9 import org.dom4j.DocumentFactory;
10 import org.dom4j.Element;
11 import org.dom4j.io.DocumentSource;
12
13 import com.pnpconsult.zeiterfassung.table.RateRow;
14 import com.pnpconsult.zeiterfassung.table.Row;
15 import com.pnpconsult.zeiterfassung.table.Table;
16
17 /***
18 * @author <a href="mailto:powerpete@users.sf.net">Moritz Petersen</a>
19 * @version $Id: TableXmlProducer.java,v 1.3 2004/06/23 21:55:11 powerpete Exp $
20 */
21 public class TableXmlProducer
22 {
23 private Document document;
24
25 public TableXmlProducer(Table table)
26 {
27 document = createDocument(table);
28 }
29
30 public String getXml()
31 {
32 return document.asXML();
33 }
34
35 public Source getSource()
36 {
37 return new DocumentSource(document);
38 }
39
40 public String toString()
41 {
42 return getXml();
43 }
44
45 private Document createDocument(Table table)
46 {
47 Document document = DocumentFactory.getInstance().createDocument();
48 Element root = document.addElement("table");
49 root.addElement("caption").setText(table.getCaption());
50 root.addElement("currency").setText(table.getCurrency());
51 root.addElement("tax").setText(table.getTax());
52 root.addElement("total-tax").setText(table.getTotalTax());
53 root.addElement("total").setText(table.getTotal());
54 root.addElement("total-including-tax").setText(
55 table.getTotalIncludingTax());
56 for (Iterator it = table.getRows().iterator(); it.hasNext();)
57 {
58 Row row = (Row) it.next();
59 addRow(root, row);
60 }
61 return document;
62 }
63
64 private void addRow(Element root, Row row)
65 {
66 addHead(root, row);
67 addTail(root, row);
68 }
69
70 private void addTail(Element root, Row row)
71 {
72 for (Iterator it = row.getRateRowsTail(); it.hasNext();)
73 {
74 RateRow rateRow = (RateRow) it.next();
75 Element element = root.addElement("row");
76 addRateRow(element, rateRow);
77 }
78 }
79
80 private void addHead(Element root, Row row)
81 {
82 Element element = root.addElement("row");
83 element.addElement("description").setText(row.getDescription());
84 element.addElement("target-date").setText(row.getTargetDate());
85 element.addElement("total").setText(row.getTotal());
86 addRateRow(element, row.getRateRowsHead());
87 }
88
89 private void addRateRow(Element element, RateRow rateRow)
90 {
91 element.addElement("hours").setText(rateRow.getHours());
92 element.addElement("rate").setText(rateRow.getRate());
93 element.addElement("user-names").setText(rateRow.getUserNames());
94 }
95 }