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