package test.at.gv.egovernment.moa.id.proxy.builder; import java.io.PrintStream; import java.util.ArrayList; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import at.gv.egovernment.moa.util.Base64Utils; /** * @author Administrator * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public class DOMTreeCompare { boolean debug = true; private static PrintStream Log = null; static { Log = System.out; } public boolean compareElements(Element root1, Element root2) { //Log.println("----- Compare Elements:"+root1.getNodeName()+" "+root2.getNodeName()); filterTree(root1); filterTree(root2); return compareNodes(root1,root2,0,"root/",false); } private boolean compareNodes(Node n1, Node n2, int level,String path,boolean attribute) { /*try { Log.println(DOMUtils.serializeNode(n1)); } catch(Exception e) { e.printStackTrace(); }*/ boolean equal = false; //Log.println("----- Compare Node "+level+":"+n1+" "+n2); //Log.println("----- Compare Node "+level+":"+n1.getNodeName()+" "+n2.getNodeName()); //Log.println("----- Checking:"+path+getPathString(n1)); NodeList nl1 = n1.getChildNodes(); NodeList nl2 = n2.getChildNodes(); int size1 = nl1.getLength(); int size2 = nl2.getLength(); if(debug)display_one(n1); if(debug)display_one(n2); if(debug) if(n1.getNodeName().equals("Base64Content") && n2.getNodeName().equals("Base64Content")) { try { Log.println("CONT:"+new String(Base64Utils.decode(strip(n1.getChildNodes().item(0).getNodeValue()),false))); Log.println("CONT:"+new String(Base64Utils.decode(strip(n2.getChildNodes().item(0).getNodeValue()),false))); } catch(Exception e) { e.printStackTrace(); } } if(size1 != size2) { Log.println("----- Anzahl der Kinder nicht gleich:"+path+getPathString(n1)+":"+getPathString(n2)); return false; } equal = compareNodeExact(n1,n2,level,path+getPathString(n1)+"/"); if(!equal) { Log.println("----- Knoten sind nicht identisch:"+path+getPathString(n1)); return false; } if(n1.hasAttributes() || n2.hasAttributes()) { equal = compareNodeAttriubtes(n1,n2,level+1,path+getPathString(n1)+"/(a)"); if(!equal) { Log.println("----- Attribute stimmen nicht überein:"+path+getPathString(n1)); return false; } } if(size1==0) { return true; } for(int counter=0;counter