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 java.util.*;
import java.io.File;

//Events:
import org.w3c.dom.events.EventTarget;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.Event;
import org.w3c.dom.events.MutationEvent;


public class DOMSampleEvents {

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

            if (!db.getDOMImplementation().hasFeature("Events", "2.0") ) {
                System.out.println("Events not supported");
                return;
            }

            Document doc = db.newDocument();
            Element wrapper = doc.createElementNS(
                        "http://domsamples.wrapper",
                        "Wrapper");
            doc.appendChild(wrapper);

            EventTarget docEventTarget = (EventTarget)doc;
            docEventTarget.addEventListener("DOMAttrModified", new MyEventListener(), false);

            wrapper.setAttribute("test", "value");
            wrapper.setAttribute("test", "value1");

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

}//DOMSampleEvents

class MyEventListener implements EventListener {

    public void handleEvent(Event ev) {
        System.out.println("Handler called");
        System.out.println("Type of the event:"+ev.getType());
        if (ev.getType().equals("DOMAttrModified")) {
            MutationEvent mev = (MutationEvent)ev;
            System.out.println(mev.getAttrChange());
            System.out.println("Old value:"+mev.getPrevValue() );
            System.out.println("New value:"+mev.getNewValue() );
        }//if
    }//handleEvent

}//MyEventListener