001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 1999 The Apache Software Foundation. All rights
006: * reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by the
023: * Apache Software Foundation (http://www.apache.org/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. The names "Xerces" and "Apache Software Foundation" must
028: * not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation and was
052: * originally based on software copyright (c) 1999, International
053: * Business Machines, Inc., http://www.apache.org. For more
054: * information on the Apache Software Foundation, please see
055: * <http://www.apache.org/>.
056: */
057:
058: package org.apache.xerces.dom;
059:
060: import org.w3c.dom.NamedNodeMap;
061: import org.w3c.dom.Node;
062:
063: /**
064: * NON-DOM CLASS: Describe one of the Elements (and its associated
065: * Attributes) defined in this Document Type.
066: * <p>
067: * I've included this in Level 1 purely as an anchor point for default
068: * attributes. In Level 2 it should enable the ChildRule support.
069: *
070: * @version
071: */
072: public class ElementDefinitionImpl extends ParentNode {
073:
074: //
075: // Constants
076: //
077:
078: /** Serialization version. */
079: static final long serialVersionUID = -8373890672670022714L;
080:
081: //
082: // Data
083: //
084:
085: /** Element definition name. */
086: protected String name;
087:
088: /** Default attributes. */
089: protected NamedNodeMapImpl attributes;
090:
091: //
092: // Constructors
093: //
094:
095: /** Factory constructor. */
096: public ElementDefinitionImpl(CoreDocumentImpl ownerDocument,
097: String name) {
098: super (ownerDocument);
099: this .name = name;
100: attributes = new NamedNodeMapImpl(ownerDocument);
101: }
102:
103: //
104: // Node methods
105: //
106:
107: /**
108: * A short integer indicating what type of node this is. The named
109: * constants for this value are defined in the org.w3c.dom.Node interface.
110: */
111: public short getNodeType() {
112: return NodeImpl.ELEMENT_DEFINITION_NODE;
113: }
114:
115: /**
116: * Returns the element definition name
117: */
118: public String getNodeName() {
119: if (needsSyncData()) {
120: synchronizeData();
121: }
122: return name;
123: }
124:
125: /**
126: * Replicate this object.
127: */
128: public Node cloneNode(boolean deep) {
129:
130: ElementDefinitionImpl newnode = (ElementDefinitionImpl) super
131: .cloneNode(deep);
132: // NamedNodeMap must be explicitly replicated to avoid sharing
133: newnode.attributes = attributes.cloneMap(newnode);
134: return newnode;
135:
136: } // cloneNode(boolean):Node
137:
138: /**
139: * Query the attributes defined on this Element.
140: * <p>
141: * In the base implementation this Map simply contains Attribute objects
142: * representing the defaults. In a more serious implementation, it would
143: * contain AttributeDefinitionImpl objects for all declared Attributes,
144: * indicating which are Default, DefaultFixed, Implicit and/or Required.
145: *
146: * @return org.w3c.dom.NamedNodeMap containing org.w3c.dom.Attribute
147: */
148: public NamedNodeMap getAttributes() {
149:
150: if (needsSyncChildren()) {
151: synchronizeChildren();
152: }
153: return attributes;
154:
155: } // getAttributes():NamedNodeMap
156:
157: } // class ElementDefinitionImpl
|