attributeset.java
来自「java jdk 1.4的源码」· Java 代码 · 共 553 行 · 第 1/2 页
JAVA
553 行
/* * $Id: AttributeSet.java,v 1.15 2001/07/13 00:00:30 edwingo Exp $ * * The Apache Software License, Version 1.1 * * * Copyright (c) 2000 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Crimson" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 1999, Sun Microsystems, Inc., * http://www.sun.com. For more information on the Apache Software * Foundation, please see <http://www.apache.org/>. */package org.apache.crimson.tree;import java.io.CharArrayWriter;import java.io.Writer;import java.io.IOException;import java.util.Vector;import org.w3c.dom.*;import org.xml.sax.Attributes;import org.apache.crimson.parser.AttributesEx;import org.apache.crimson.util.XmlNames;/** * Class representing a list of XML attributes. * * <P> This couples slightly with the Sun XML parser, in that it optionally * uses an extended SAX API to see if an attribute was specified in the * document or was instead defaulted by attribute processing. * * @author David Brownell * @version $Revision: 1.15 $ */finalclass AttributeSet implements NamedNodeMap, XmlWritable{ private boolean readonly; private Vector list; private Element ownerElement; private AttributeSet() { // no-arg constructor } /* Constructs an attribute list, with associated name scope. */ // package private AttributeSet(Element ownerElement) { list = new Vector (5); this.ownerElement = ownerElement; } /* * Constructs a copy of an attribute list, for use in cloning. * AttributeNode.ownerElement is set later when the attributes are * associated with an Element. */ // package private AttributeSet (AttributeSet original, boolean deep) { int size = original.getLength (); list = new Vector (size); for (int i = 0; i < size; i++) { Node node = original.item (i); if (!(node instanceof AttributeNode)) throw new IllegalArgumentException (((NodeBase)node). getMessage ("A-003")); AttributeNode attr = (AttributeNode)node; node = attr.cloneAttributeNode(deep); list.addElement (node); } } /** * Constructor used to implement Document.importNode(). Only * "specified" Attr nodes are copied. Copy is always deep. */ AttributeSet(AttributeSet original) { int size = original.getLength(); list = new Vector(size); for (int i = 0; i < size; i++) { Node node = original.item(i); if (!(node instanceof AttributeNode)) { throw new IllegalArgumentException(((NodeBase)node). getMessage ("A-003")); } AttributeNode attr = (AttributeNode) node; // Copy only specified attributes if (attr.getSpecified()) { node = attr.cloneAttributeNode(true); list.addElement(node); } } list.trimToSize(); } /** * Create a DOM NamedNodeMap consisting of DOM Level 2 Attr nodes from * a SAX2 Attributes object */ static AttributeSet createAttributeSet2(Attributes source) throws DOMException { AttributeSet retval = new AttributeSet(); int len = source.getLength(); AttributesEx ex = null; retval.list = new Vector(len); if (source instanceof AttributesEx) { ex = (AttributesEx) source; } for (int i = 0; i < len; i++) { // Process the namespaceURI according to DOM Level 2 spec String uri; String qName = source.getQName(i); if ("xmlns".equals(qName) || "xmlns".equals(XmlNames.getPrefix(qName))) { // Associate the right namespaceURI with "xmlns" attributes uri = XmlNames.SPEC_XMLNS_URI; } else { uri = source.getURI(i); // Translate "" of SAX2 to null. See DOM2 spec under Node // namespaceURI if ("".equals(uri)) { uri = null; } } AttributeNode attrNode = new AttributeNode(uri, qName, source.getValue(i), ex == null // remember if it was specified ? true : ex.isSpecified(i), ex == null // remember any default value ? null : ex.getDefault(i)); retval.list.addElement(attrNode); } return retval; } /** * Create a DOM NamedNodeMap consisting of DOM Level 1 Attr nodes from * a SAX2 Attributes object */ static AttributeSet createAttributeSet1(Attributes source) throws DOMException { AttributeSet retval = new AttributeSet(); int len = source.getLength(); AttributesEx ex = null; retval.list = new Vector(len); if (source instanceof AttributesEx) { ex = (AttributesEx) source; } for (int i = 0; i < len; i++) { AttributeNode1 attrNode1 = new AttributeNode1( source.getQName(i), source.getValue(i), ex == null // remember if it was specified ? true : ex.isSpecified(i), ex == null // remember any default value ? null : ex.getDefault(i)); retval.list.addElement(attrNode1); } return retval; } // package private void trimToSize () { list.trimToSize (); } // package private public void setReadonly () { readonly = true; for (int i = 0; i < list.size (); i++) ((AttributeNode)list.elementAt (i)).setReadonly (true); } public boolean isReadonly () { if (readonly) return true; for (int i = 0; i < list.size (); i++) { if (((AttributeNode)list.elementAt (i)).isReadonly ()) { return true; } } return false; } // package private void setOwnerElement(Element e) { if (e != null && ownerElement != null) { throw new IllegalStateException(((NodeBase)e).getMessage("A-004")); } ownerElement = e; // need to bind the attributes to this element int length = list.size(); for (int i = 0; i < length; i++) { AttributeNode node; node = (AttributeNode)list.elementAt(i); node.setOwnerElement(null); node.setOwnerElement(e); } } // package private String getValue (String name) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?