01: import java.util.ArrayList;
02: import javax.xml.parsers.DocumentBuilder;
03: import javax.xml.parsers.DocumentBuilderFactory;
04: import javax.xml.parsers.ParserConfigurationException;
05: import org.w3c.dom.Document;
06: import org.w3c.dom.Element;
07: import org.w3c.dom.Text;
08: 
09: /**
10:    Builds a DOM document for an array list of items.
11: */
12: public class ItemListBuilder
13: {
14:    /**
15:       Constructs an item list builder.
16:    */
17:    public ItemListBuilder() 
18:          throws ParserConfigurationException
19:    {
20:       DocumentBuilderFactory factory 
21:             = DocumentBuilderFactory.newInstance();
22:       builder = factory.newDocumentBuilder();
23:    }
24: 
25:    /**
26:       Builds a DOM document for an array list of items.
27:       @param items the items
28:       @return a DOM document describing the items
29:    */
30:    public Document build(ArrayList<LineItem> items)
31:    {
32:       doc = builder.newDocument();
33:       doc.appendChild(createItems(items));
34:       return doc;
35:    }
36: 
37:    /**
38:       Builds a DOM element for an array list of items.
39:       @param items the items
40:       @return a DOM element describing the items
41:    */      
42:    private Element createItems(ArrayList<LineItem> items)
43:    {      
44:       Element e = doc.createElement("items");
45: 
46:       for (LineItem anItem : items)
47:          e.appendChild(createItem(anItem));
48: 
49:       return e;
50:    }
51: 
52:    /**
53:       Builds a DOM element for an item.
54:       @param anItem the item
55:       @return a DOM element describing the item
56:    */
57:    private Element createItem(LineItem anItem)
58:    {      
59:       Element e = doc.createElement("item");
60: 
61:       e.appendChild(createProduct(anItem.getProduct()));
62:       e.appendChild(createTextElement(
63:             "quantity", "" + anItem.getQuantity()));
64: 
65:       return e;
66:    }
67: 
68:    /**
69:       Builds a DOM element for a product.
70:       @param p the product
71:       @return a DOM element describing the product
72:    */
73:    private Element createProduct(Product p)
74:    {
75:       Element e = doc.createElement("product");
76: 
77:       e.appendChild(createTextElement(
78:             "description", p.getDescription()));
79:       e.appendChild(createTextElement(
80:             "price", "" + p.getPrice()));
81: 
82:       return e;
83:    }
84: 
85:    private Element createTextElement(String name, String text)
86:    {
87:       Text t = doc.createTextNode(text);
88:       Element e = doc.createElement(name);
89:       e.appendChild(t);
90:       return e;
91:    }
92: 
93:    private DocumentBuilder builder;
94:    private Document doc;
95: }