package xmldom;

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class DOM {
	public static void main(String[] args) throws Exception {
		Document dom = DocumentBuilderFactory
			.newInstance()
			.newDocumentBuilder()
			.parse(new File("/home/panitz/neuesSkript.xml"));
		System.out.println(size(dom.getDocumentElement()));
		System.out.println(depth(dom.getDocumentElement()));
		var r = new StringBuffer();
		getText(r, dom);
		System.out.println(r);
		var tags = new HashSet<String>();
		getTags(tags, dom);
		System.out.println(tags);
	}
	
	static void getText(StringBuffer r,Node n) {
		if (n.getNodeType()==Node.TEXT_NODE) r.append(n.getNodeValue());
		var cs = n.getChildNodes();
		for (int i=0;i<cs.getLength();i++) {
			var c = cs.item(i);
			getText(r,c);
		}
	}
	static void getTags(Set<String> r,Node n) {
		if (n.getNodeType()==Node.ELEMENT_NODE) r.add(n.getNodeName());
		var cs = n.getChildNodes();
		for (int i=0;i<cs.getLength();i++) {
			var c = cs.item(i);
			getTags(r,c);
		}
	}
	
	static int size(Node n) {
		var r = 0;
		var cs = n.getChildNodes();
		for (int i=0;i<cs.getLength();i++) {
			var c = cs.item(i);
			r = r+size(c);
		}
		if (n.getNodeType()==Node.ELEMENT_NODE) r++;
		return r ;
	}
	static int depth(Node n) {
		var r = 0;
		var cs = n.getChildNodes();
		for (int i=0;i<cs.getLength();i++) {
			var c = cs.item(i);
			var d = depth(c);
			r = Math.max(d, r);
		}
		r++;
		return r ;
	}

}
