xref: /AOO41X/main/xmlsecurity/tools/uno/AdapterNode.java (revision db8598795e2025b89968fa208f4cf0f9125a6f19)
1*db859879SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*db859879SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*db859879SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*db859879SAndrew Rist  * distributed with this work for additional information
6*db859879SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*db859879SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*db859879SAndrew Rist  * "License"); you may not use this file except in compliance
9*db859879SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*db859879SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*db859879SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*db859879SAndrew Rist  * software distributed under the License is distributed on an
15*db859879SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*db859879SAndrew Rist  * KIND, either express or implied.  See the License for the
17*db859879SAndrew Rist  * specific language governing permissions and limitations
18*db859879SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*db859879SAndrew Rist  *************************************************************/
21*db859879SAndrew Rist 
22*db859879SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package com.sun.star.xml.security.uno;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import org.w3c.dom.Node;
27cdf0e10cSrcweir import org.w3c.dom.Attr;
28cdf0e10cSrcweir import org.w3c.dom.NamedNodeMap;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir /*
32cdf0e10cSrcweir  * This class wraps a DOM node and returns the text we want to
33cdf0e10cSrcweir  * display in the tree. It also returns children, index values,
34cdf0e10cSrcweir  * and child counts.
35cdf0e10cSrcweir  */
36cdf0e10cSrcweir class AdapterNode
37cdf0e10cSrcweir {
38cdf0e10cSrcweir 	private Node m_domNode;
39cdf0e10cSrcweir 	static final int ELEMENT_TYPE =   Node.ELEMENT_NODE;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir 	/*
42cdf0e10cSrcweir 	 * An array of names for DOM node-types
43cdf0e10cSrcweir 	 */
44cdf0e10cSrcweir 	static final String[] typeName = {
45cdf0e10cSrcweir 		"none",
46cdf0e10cSrcweir 		"Element",
47cdf0e10cSrcweir 		"Attr",
48cdf0e10cSrcweir 		"Text",
49cdf0e10cSrcweir 		"CDATA",
50cdf0e10cSrcweir 		"EntityRef",
51cdf0e10cSrcweir 		"Entity",
52cdf0e10cSrcweir 		"ProcInstr",
53cdf0e10cSrcweir 		"Comment",
54cdf0e10cSrcweir 		"Document",
55cdf0e10cSrcweir 		"DocType",
56cdf0e10cSrcweir 		"DocFragment",
57cdf0e10cSrcweir 		"Notation",
58cdf0e10cSrcweir 		};
59cdf0e10cSrcweir 
getNode()60cdf0e10cSrcweir 	protected Node getNode()
61cdf0e10cSrcweir 	{
62cdf0e10cSrcweir 		return m_domNode;
63cdf0e10cSrcweir 	}
64cdf0e10cSrcweir 
65cdf0e10cSrcweir 	/*
66cdf0e10cSrcweir 	 * Construct an Adapter node from a DOM node
67cdf0e10cSrcweir 	 */
AdapterNode(org.w3c.dom.Node node)68cdf0e10cSrcweir 	protected AdapterNode(org.w3c.dom.Node node)
69cdf0e10cSrcweir 	{
70cdf0e10cSrcweir 		m_domNode = node;
71cdf0e10cSrcweir 	}
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 	/*
74cdf0e10cSrcweir 	 * Return children, index, and count values
75cdf0e10cSrcweir 	 */
index(AdapterNode child)76cdf0e10cSrcweir 	protected int index(AdapterNode child)
77cdf0e10cSrcweir 	{
78cdf0e10cSrcweir 		int count = childCount();
79cdf0e10cSrcweir 		for (int i=0; i<count; ++i)
80cdf0e10cSrcweir 		{
81cdf0e10cSrcweir 			AdapterNode n = this.child(i);
82cdf0e10cSrcweir 			if (child.m_domNode == n.m_domNode) return i;
83cdf0e10cSrcweir 		}
84cdf0e10cSrcweir 		return -1;
85cdf0e10cSrcweir 	}
86cdf0e10cSrcweir 
child(int searchIndex)87cdf0e10cSrcweir 	protected AdapterNode child(int searchIndex)
88cdf0e10cSrcweir 	{
89cdf0e10cSrcweir 		if (m_domNode == null) return null;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 		/*
92cdf0e10cSrcweir 		 * Note: JTree index is zero-based.
93cdf0e10cSrcweir 		 */
94cdf0e10cSrcweir 		org.w3c.dom.Node node =
95cdf0e10cSrcweir 			m_domNode.getChildNodes().item(searchIndex);
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 		return new AdapterNode(node);
98cdf0e10cSrcweir 	}
99cdf0e10cSrcweir 
childCount()100cdf0e10cSrcweir 	protected int childCount()
101cdf0e10cSrcweir 	{
102cdf0e10cSrcweir 		int rc = 0;
103cdf0e10cSrcweir 
104cdf0e10cSrcweir 		if (m_domNode != null)
105cdf0e10cSrcweir 		{
106cdf0e10cSrcweir 			rc = m_domNode.getChildNodes().getLength();
107cdf0e10cSrcweir 		}
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 		return rc;
110cdf0e10cSrcweir 	}
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	/*
113cdf0e10cSrcweir 	 * Return a string that identifies this node in the tree
114cdf0e10cSrcweir 	 */
toString()115cdf0e10cSrcweir 	public String toString()
116cdf0e10cSrcweir 	{
117cdf0e10cSrcweir 		String rc = null;
118cdf0e10cSrcweir 
119cdf0e10cSrcweir 		if (m_domNode != null)
120cdf0e10cSrcweir 		{
121cdf0e10cSrcweir 			String s = typeName[m_domNode.getNodeType()];
122cdf0e10cSrcweir 			String nodeName = m_domNode.getNodeName();
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 			if (! nodeName.startsWith("#"))
125cdf0e10cSrcweir 			{
126cdf0e10cSrcweir 				s += ": " + nodeName;
127cdf0e10cSrcweir 			}
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 			if (m_domNode.getNodeValue() != null)
130cdf0e10cSrcweir 			{
131cdf0e10cSrcweir 				if (s.startsWith("ProcInstr"))
132cdf0e10cSrcweir 				{
133cdf0e10cSrcweir 					s += ", ";
134cdf0e10cSrcweir 				}
135cdf0e10cSrcweir 				else
136cdf0e10cSrcweir 				{
137cdf0e10cSrcweir 					s += ": ";
138cdf0e10cSrcweir 				}
139cdf0e10cSrcweir 
140cdf0e10cSrcweir 				String t = m_domNode.getNodeValue();
141cdf0e10cSrcweir 				s += t;
142cdf0e10cSrcweir 			}
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 			if (m_domNode.getNodeType() == ELEMENT_TYPE)
145cdf0e10cSrcweir 			{
146cdf0e10cSrcweir 				NamedNodeMap attrs = m_domNode.getAttributes();
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 				int length = attrs.getLength();
149cdf0e10cSrcweir 				for (int i=0; i<length; ++i)
150cdf0e10cSrcweir 				{
151cdf0e10cSrcweir 					Attr attr = (Attr)(attrs.item(i));
152cdf0e10cSrcweir 					s += " "+ attr.getName()+"='"+attr.getValue() + "'";
153cdf0e10cSrcweir 				}
154cdf0e10cSrcweir 			}
155cdf0e10cSrcweir 			rc = s;
156cdf0e10cSrcweir 		}
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 		return rc;
159cdf0e10cSrcweir 	}
160cdf0e10cSrcweir }
161cdf0e10cSrcweir 
162