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