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