1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 package com.sun.star.xml.security.uno; 29 30 import javax.xml.parsers.DocumentBuilder; 31 import javax.xml.parsers.DocumentBuilderFactory; 32 import javax.xml.parsers.ParserConfigurationException; 33 34 import org.w3c.dom.Document; 35 import org.w3c.dom.Element; 36 import org.w3c.dom.Node; 37 import org.w3c.dom.Text; 38 import org.w3c.dom.ProcessingInstruction; 39 40 /* uno classes */ 41 import com.sun.star.xml.sax.XDocumentHandler; 42 import com.sun.star.xml.sax.XAttributeList; 43 44 /* 45 * this class is used to collect all received SAX events 46 * into a DOM document. 47 */ 48 class SAXEventCollector implements XDocumentHandler 49 { 50 /* 51 * the document which keeps received SAX events 52 */ 53 private Document m_document; 54 55 /* 56 * the current Element to which the next received 57 * SAX event will be added. 58 */ 59 private Node m_currentElement; 60 61 /* 62 * the TestTool which receives UI feedbacks 63 */ 64 private TestTool m_testTool; 65 66 /* 67 * whether displays information on console. 68 */ 69 private boolean m_systemDisplay; 70 71 SAXEventCollector(TestTool testTool) 72 { 73 this(testTool, false); 74 } 75 76 SAXEventCollector(TestTool testTool, boolean sysDis) 77 { 78 m_systemDisplay = sysDis; 79 m_testTool = testTool; 80 81 DocumentBuilderFactory factory = 82 DocumentBuilderFactory.newInstance(); 83 84 try 85 { 86 DocumentBuilder builder = factory.newDocumentBuilder(); 87 m_document = builder.newDocument(); 88 89 m_currentElement = m_document; 90 } 91 catch (ParserConfigurationException pce) { 92 pce.printStackTrace(); 93 } 94 } 95 96 protected Document getDocument() 97 { 98 return m_document; 99 } 100 101 protected Node getCurrentElement() 102 { 103 return m_currentElement; 104 } 105 106 /* 107 * XDocumentHandler 108 */ 109 public void startDocument () 110 { 111 } 112 113 public void endDocument() 114 { 115 } 116 117 public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs) 118 { 119 Element newElement = m_document.createElement(str); 120 121 if (xattribs !=null) 122 { 123 int length = xattribs.getLength(); 124 for (short i=0; i<length; ++i) 125 { 126 newElement.setAttribute( 127 xattribs.getNameByIndex(i), 128 xattribs.getValueByIndex(i)); 129 } 130 } 131 132 if (m_systemDisplay) 133 { 134 System.out.println("startElement:"+m_currentElement.toString()); 135 } 136 137 m_currentElement.appendChild(newElement); 138 m_currentElement = newElement; 139 140 if (m_testTool != null) 141 { 142 m_testTool.updatesUIs(); 143 } 144 } 145 146 public void endElement(String str) 147 { 148 if (m_systemDisplay) 149 { 150 System.out.println("endElement:"+str+" "+m_currentElement.toString()); 151 } 152 153 m_currentElement = m_currentElement.getParentNode(); 154 if (m_systemDisplay) 155 { 156 System.out.println("----> "+m_currentElement.toString()); 157 } 158 159 if (m_testTool != null) 160 { 161 m_testTool.updatesUIs(); 162 } 163 } 164 165 public void characters(String str) 166 { 167 Text newText = m_document.createTextNode(str); 168 m_currentElement.appendChild(newText); 169 if (m_testTool != null) 170 { 171 m_testTool.updatesUIs(); 172 } 173 } 174 175 public void ignorableWhitespace(String str) 176 { 177 } 178 179 public void processingInstruction(String aTarget, String aData) 180 { 181 ProcessingInstruction newPI 182 = m_document.createProcessingInstruction(aTarget, aData); 183 m_currentElement.appendChild(newPI); 184 if (m_testTool != null) 185 { 186 m_testTool.updatesUIs(); 187 } 188 } 189 190 public void setDocumentLocator (com.sun.star.xml.sax.XLocator xLocator ) 191 throws com.sun.star.xml.sax.SAXException 192 { 193 } 194 } 195 196