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