1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package com.sun.star.xml.security.uno; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import javax.xml.parsers.DocumentBuilder; 27*b1cdbd2cSJim Jagielski import javax.xml.parsers.DocumentBuilderFactory; 28*b1cdbd2cSJim Jagielski import javax.xml.parsers.ParserConfigurationException; 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski import org.w3c.dom.Document; 31*b1cdbd2cSJim Jagielski import org.w3c.dom.Element; 32*b1cdbd2cSJim Jagielski import org.w3c.dom.Node; 33*b1cdbd2cSJim Jagielski import org.w3c.dom.Text; 34*b1cdbd2cSJim Jagielski import org.w3c.dom.ProcessingInstruction; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski /* uno classes */ 37*b1cdbd2cSJim Jagielski import com.sun.star.xml.sax.XDocumentHandler; 38*b1cdbd2cSJim Jagielski import com.sun.star.xml.sax.XAttributeList; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski /* 41*b1cdbd2cSJim Jagielski * this class is used to collect all received SAX events 42*b1cdbd2cSJim Jagielski * into a DOM document. 43*b1cdbd2cSJim Jagielski */ 44*b1cdbd2cSJim Jagielski class SAXEventCollector implements XDocumentHandler 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski /* 47*b1cdbd2cSJim Jagielski * the document which keeps received SAX events 48*b1cdbd2cSJim Jagielski */ 49*b1cdbd2cSJim Jagielski private Document m_document; 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski /* 52*b1cdbd2cSJim Jagielski * the current Element to which the next received 53*b1cdbd2cSJim Jagielski * SAX event will be added. 54*b1cdbd2cSJim Jagielski */ 55*b1cdbd2cSJim Jagielski private Node m_currentElement; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski /* 58*b1cdbd2cSJim Jagielski * the TestTool which receives UI feedbacks 59*b1cdbd2cSJim Jagielski */ 60*b1cdbd2cSJim Jagielski private TestTool m_testTool; 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski /* 63*b1cdbd2cSJim Jagielski * whether displays information on console. 64*b1cdbd2cSJim Jagielski */ 65*b1cdbd2cSJim Jagielski private boolean m_systemDisplay; 66*b1cdbd2cSJim Jagielski SAXEventCollector(TestTool testTool)67*b1cdbd2cSJim Jagielski SAXEventCollector(TestTool testTool) 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski this(testTool, false); 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski SAXEventCollector(TestTool testTool, boolean sysDis)72*b1cdbd2cSJim Jagielski SAXEventCollector(TestTool testTool, boolean sysDis) 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski m_systemDisplay = sysDis; 75*b1cdbd2cSJim Jagielski m_testTool = testTool; 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski DocumentBuilderFactory factory = 78*b1cdbd2cSJim Jagielski DocumentBuilderFactory.newInstance(); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski try 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski DocumentBuilder builder = factory.newDocumentBuilder(); 83*b1cdbd2cSJim Jagielski m_document = builder.newDocument(); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski m_currentElement = m_document; 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski catch (ParserConfigurationException pce) { 88*b1cdbd2cSJim Jagielski pce.printStackTrace(); 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski getDocument()92*b1cdbd2cSJim Jagielski protected Document getDocument() 93*b1cdbd2cSJim Jagielski { 94*b1cdbd2cSJim Jagielski return m_document; 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski getCurrentElement()97*b1cdbd2cSJim Jagielski protected Node getCurrentElement() 98*b1cdbd2cSJim Jagielski { 99*b1cdbd2cSJim Jagielski return m_currentElement; 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski /* 103*b1cdbd2cSJim Jagielski * XDocumentHandler 104*b1cdbd2cSJim Jagielski */ startDocument()105*b1cdbd2cSJim Jagielski public void startDocument () 106*b1cdbd2cSJim Jagielski { 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski endDocument()109*b1cdbd2cSJim Jagielski public void endDocument() 110*b1cdbd2cSJim Jagielski { 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski startElement(String str, com.sun.star.xml.sax.XAttributeList xattribs)113*b1cdbd2cSJim Jagielski public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs) 114*b1cdbd2cSJim Jagielski { 115*b1cdbd2cSJim Jagielski Element newElement = m_document.createElement(str); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski if (xattribs !=null) 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski int length = xattribs.getLength(); 120*b1cdbd2cSJim Jagielski for (short i=0; i<length; ++i) 121*b1cdbd2cSJim Jagielski { 122*b1cdbd2cSJim Jagielski newElement.setAttribute( 123*b1cdbd2cSJim Jagielski xattribs.getNameByIndex(i), 124*b1cdbd2cSJim Jagielski xattribs.getValueByIndex(i)); 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski if (m_systemDisplay) 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski System.out.println("startElement:"+m_currentElement.toString()); 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski m_currentElement.appendChild(newElement); 134*b1cdbd2cSJim Jagielski m_currentElement = newElement; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski if (m_testTool != null) 137*b1cdbd2cSJim Jagielski { 138*b1cdbd2cSJim Jagielski m_testTool.updatesUIs(); 139*b1cdbd2cSJim Jagielski } 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski endElement(String str)142*b1cdbd2cSJim Jagielski public void endElement(String str) 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski if (m_systemDisplay) 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski System.out.println("endElement:"+str+" "+m_currentElement.toString()); 147*b1cdbd2cSJim Jagielski } 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski m_currentElement = m_currentElement.getParentNode(); 150*b1cdbd2cSJim Jagielski if (m_systemDisplay) 151*b1cdbd2cSJim Jagielski { 152*b1cdbd2cSJim Jagielski System.out.println("----> "+m_currentElement.toString()); 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski if (m_testTool != null) 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski m_testTool.updatesUIs(); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski characters(String str)161*b1cdbd2cSJim Jagielski public void characters(String str) 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski Text newText = m_document.createTextNode(str); 164*b1cdbd2cSJim Jagielski m_currentElement.appendChild(newText); 165*b1cdbd2cSJim Jagielski if (m_testTool != null) 166*b1cdbd2cSJim Jagielski { 167*b1cdbd2cSJim Jagielski m_testTool.updatesUIs(); 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski ignorableWhitespace(String str)171*b1cdbd2cSJim Jagielski public void ignorableWhitespace(String str) 172*b1cdbd2cSJim Jagielski { 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski processingInstruction(String aTarget, String aData)175*b1cdbd2cSJim Jagielski public void processingInstruction(String aTarget, String aData) 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski ProcessingInstruction newPI 178*b1cdbd2cSJim Jagielski = m_document.createProcessingInstruction(aTarget, aData); 179*b1cdbd2cSJim Jagielski m_currentElement.appendChild(newPI); 180*b1cdbd2cSJim Jagielski if (m_testTool != null) 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski m_testTool.updatesUIs(); 183*b1cdbd2cSJim Jagielski } 184*b1cdbd2cSJim Jagielski } 185*b1cdbd2cSJim Jagielski setDocumentLocator(com.sun.star.xml.sax.XLocator xLocator )186*b1cdbd2cSJim Jagielski public void setDocumentLocator (com.sun.star.xml.sax.XLocator xLocator ) 187*b1cdbd2cSJim Jagielski throws com.sun.star.xml.sax.SAXException 188*b1cdbd2cSJim Jagielski { 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski 192