001: import java.util.ArrayList;
002: import javax.xml.parsers.DocumentBuilder;
003: import javax.xml.parsers.DocumentBuilderFactory;
004: import javax.xml.parsers.ParserConfigurationException;
005: import org.w3c.dom.Document;
006: import org.w3c.dom.Element;
007: import org.w3c.dom.Text;
008: 
009: /**
010:    Builds a DOM document for an array list of items.
011: */
012: public class ItemListBuilder
013: {
014:    /**
015:       Constructs an item list builder.
016:    */
017:    public ItemListBuilder() 
018:       throws ParserConfigurationException
019:    {
020:       DocumentBuilderFactory factory 
021:          = DocumentBuilderFactory.newInstance();
022:       builder = factory.newDocumentBuilder();
023:    }
024: 
025:    /**
026:       Builds a DOM document for an array list of items.
027:       @param items the items
028:       @return a DOM document describing the items
029:    */
030:    public Document build(ArrayList items)
031:    {
032:       doc = builder.newDocument();
033:       Element root = createItemList(items);
034:       doc.appendChild(root);
035:       return doc;
036:    }
037: 
038:    /**
039:       Builds a DOM element for an array list of items.
040:       @param items the items
041:       @return a DOM element describing the items
042:    */      
043:    private Element createItemList(ArrayList items)
044:    {      
045:       Element itemsElement = doc.createElement("items");
046:       for (int i = 0; i < items.size(); i++)
047:       {
048:          Item anItem = (Item)items.get(i);
049:          Element itemElement = createItem(anItem);
050:          itemsElement.appendChild(itemElement);
051:       }
052:       return itemsElement;
053:    }
054: 
055:    /**
056:       Builds a DOM element for an item.
057:       @param anItem the item
058:       @return a DOM element describing the item
059:    */
060:    private Element createItem(Item anItem)
061:    {      
062:       Element itemElement = doc.createElement("item");
063:       Element productElement 
064:          = createProduct(anItem.getProduct());
065:       Text quantityText = doc.createTextNode(
066:          "" + anItem.getQuantity());
067:       Element quantityElement = doc.createElement("quantity");
068:       quantityElement.appendChild(quantityText);
069: 
070:       itemElement.appendChild(productElement);
071:       itemElement.appendChild(quantityElement);
072:       return itemElement;
073:    }
074: 
075:    /**
076:       Builds a DOM element for a product.
077:       @param p the product
078:       @return a DOM element describing the product
079:    */
080:    private Element createProduct(Product p)
081:    {
082:       Text descriptionText 
083:          = doc.createTextNode(p.getDescription());
084:       Text priceText = doc.createTextNode("" + p.getPrice());
085: 
086:       Element descriptionElement 
087:          = doc.createElement("description");
088:       Element priceElement = doc.createElement("price");
089: 
090:       descriptionElement.appendChild(descriptionText);
091:       priceElement.appendChild(priceText);
092: 
093:       Element productElement = doc.createElement("product");
094: 
095:       productElement.appendChild(descriptionElement);
096:       productElement.appendChild(priceElement);
097: 
098:       return productElement;
099:    }
100: 
101:    private DocumentBuilder builder;
102:    private Document doc;
103: }