xref: /trunk/main/xmlsecurity/tools/uno/AdapterNode.java (revision 3309286857f19787ae62bd793a98b5af4edd2ad3)
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 }
161