package dom4wspart3;


import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import java.util.*;


public class DataWrapper {

    List vector = new ArrayList();

    public static void main(String argv[]) {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.newDocument();

            Element envElement = doc.createElementNS("http://www.w3.org/2001/12/soap-envelope","Envelope");
            doc.appendChild(envElement);

            Element bodyElement = doc.createElementNS("http://www.w3.org/2001/12/soap-envelope","Body");
            envElement.appendChild(bodyElement);
            

            DataWrapper dataWrapper = new DataWrapper();
            dataWrapper.add("name", "http://www.myTourOperator", "value");
            dataWrapper.add("name1", "http://www.myTourOperator", "value1");
            dataWrapper.appendAsChildren(bodyElement);
            dataWrapper.printDocument("The XML document after appending children", doc);

        }//try
        catch (Exception e) {
            e.printStackTrace(System.err);
        }//catch

    }//main


    public DataWrapper() {
    }//DataWrapper


    public int add(String name, String namespace, String value) {
        vector.add(new data(name, namespace, value));
        return vector.size();
    }//add


    public void appendAsChildren(Element parentElement) {
        Document ownerDoc = parentElement.getOwnerDocument();
        int size = vector.size();
        for (int i=0;i<size;i++) {
            data elementData = (data)vector.get(i);
            Element newChild = ownerDoc.createElementNS(elementData.namespace, elementData.name);
            parentElement.appendChild(newChild);
            newChild.appendChild(ownerDoc.createTextNode(elementData.value));
        }//for
    }//appendAsChildren


    public void printDocument(String title, Document doc) {
        System.out.println("");
        System.out.println("");
        System.out.println("*********************");

        System.out.println(title+":");

        try {
            OutputFormat outputFormat = new OutputFormat(doc);
            outputFormat.setPreserveSpace(true);
            XMLSerializer serializer = new XMLSerializer(System.out, outputFormat);
            serializer.serialize(doc);
            System.out.println("");
        }//try

        catch (Exception e) {
            e.printStackTrace(System.err);
        }//catch

        System.out.println("*********************");
        System.out.println("");
        System.out.println("");

    }//printDocument    


}//DataWrapper


class data {
   String name;
   String namespace;
   String value;

   data(String _name, String _namespace, String _value){
       name = _name;
       namespace = _namespace;
       value = _value;
   }//data

}//data