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.Node;
061:
062: /**
063: * NON-DOM CLASS: Describe one of the Elements (and its associated
064: * Attributes) defined in this Document Type.
065: * <p>
066: * I've included this in Level 1 purely as an anchor point for default
067: * attributes. In Level 2 it should enable the ChildRule support.
068: *
069: * @version
070: */
071: public class DeferredElementDefinitionImpl extends
072: ElementDefinitionImpl implements DeferredNode {
073:
074: //
075: // Constants
076: //
077:
078: /** Serialization version. */
079: static final long serialVersionUID = 6703238199538041591L;
080:
081: //
082: // Data
083: //
084:
085: /** Node index. */
086: protected transient int fNodeIndex;
087:
088: //
089: // Constructors
090: //
091:
092: /**
093: * This is the deferred constructor. Only the fNodeIndex is given here.
094: * All other data, can be requested from the ownerDocument via the index.
095: */
096: DeferredElementDefinitionImpl(DeferredDocumentImpl ownerDocument,
097: int nodeIndex) {
098: super (ownerDocument, null);
099:
100: fNodeIndex = nodeIndex;
101: needsSyncData(true);
102: needsSyncChildren(true);
103:
104: } // <init>(DeferredDocumentImpl,int)
105:
106: //
107: // DeferredNode methods
108: //
109:
110: /** Returns the node index. */
111: public int getNodeIndex() {
112: return fNodeIndex;
113: }
114:
115: //
116: // Protected methods
117: //
118:
119: /** Synchronizes the data (name and value) for fast nodes. */
120: protected void synchronizeData() {
121:
122: // no need to sync in the future
123: needsSyncData(false);
124:
125: // fluff data
126: DeferredDocumentImpl ownerDocument = (DeferredDocumentImpl) this .ownerDocument;
127: name = ownerDocument.getNodeNameString(fNodeIndex);
128:
129: } // synchronizeData()
130:
131: /** Synchronizes the default attribute values. */
132: protected void synchronizeChildren() {
133:
134: // we don't want to generate any event for this so turn them off
135: boolean orig = ownerDocument.getMutationEvents();
136: ownerDocument.setMutationEvents(false);
137:
138: // attributes are now synced
139: needsSyncChildren(false);
140:
141: // create attributes node map
142: DeferredDocumentImpl ownerDocument = (DeferredDocumentImpl) this .ownerDocument;
143: attributes = new NamedNodeMapImpl(ownerDocument);
144:
145: // Default attributes dangle as children of the element
146: // definition "node" in the internal fast table.
147: for (int nodeIndex = ownerDocument.getLastChild(fNodeIndex); nodeIndex != -1; nodeIndex = ownerDocument
148: .getPrevSibling(nodeIndex)) {
149: Node attr = ownerDocument.getNodeObject(nodeIndex);
150: attributes.setNamedItem(attr);
151: }
152:
153: // set mutation events flag back to its original value
154: ownerDocument.setMutationEvents(orig);
155:
156: } // synchronizeChildren()
157:
158: } // class DeferredElementDefinitionImpl
|