1 /* 2 * reserved comment block 3 * DO NOT REMOVE OR ALTER! 4 */ 5 /* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 /* 23 * WARNING: because java doesn't support multi-inheritance some code is 24 * duplicated. If you're changing this file you probably want to change 25 * DeferredElementNSImpl.java at the same time. 26 */ 27 28 package com.sun.org.apache.xerces.internal.dom; 29 30 import org.w3c.dom.NamedNodeMap; 31 32 /** 33 * Elements represent most of the "markup" and structure of the 34 * document. They contain both the data for the element itself 35 * (element name and attributes), and any contained nodes, including 36 * document text (as children). 37 * <P> 38 * Elements may have Attributes associated with them; the API for this is 39 * defined in Node, but the function is implemented here. In general, XML 40 * applications should retrive Attributes as Nodes, since they may contain 41 * entity references and hence be a fairly complex sub-tree. HTML users will 42 * be dealing with simple string values, and convenience methods are provided 43 * to work in terms of Strings. 44 * <P> 45 * DeferredElementImpl inherits from ElementImpl which does not support 46 * Namespaces. DeferredElementNSImpl, which inherits from ElementNSImpl, does. 47 * @see DeferredElementNSImpl 48 * 49 * @xerces.internal 50 * 51 * @since PR-DOM-Level-1-19980818. 52 */ 53 public class DeferredElementImpl 54 extends ElementImpl 55 implements DeferredNode { 56 57 // 58 // Constants 59 // 60 61 /** Serialization version. */ 62 static final long serialVersionUID = -7670981133940934842L; 63 64 // 65 // Data 66 // 67 68 /** Node index. */ 69 protected transient int fNodeIndex; 70 71 // 72 // Constructors 73 // 74 75 /** 76 * This is the deferred constructor. Only the fNodeIndex is given here. All 77 * other data, can be requested from the ownerDocument via the index. 78 */ 79 DeferredElementImpl(DeferredDocumentImpl ownerDoc, int nodeIndex) { 80 super(ownerDoc, null); 81 82 fNodeIndex = nodeIndex; 83 needsSyncChildren(true); 84 85 } // <init>(DocumentImpl,int) 86 87 // 88 // DeferredNode methods 89 // 90 91 /** Returns the node index. */ 92 public final int getNodeIndex() { 93 return fNodeIndex; 94 } 95 96 // 97 // Protected methods 98 // 99 100 /** Synchronizes the data (name and value) for fast nodes. */ 101 protected final void synchronizeData() { 102 103 // no need to sync in the future 104 needsSyncData(false); 105 106 // fluff data 107 DeferredDocumentImpl ownerDocument = 108 (DeferredDocumentImpl)this.ownerDocument; 109 110 // we don't want to generate any event for this so turn them off 111 boolean orig = ownerDocument.mutationEvents; 112 ownerDocument.mutationEvents = false; 113 114 name = ownerDocument.getNodeName(fNodeIndex); 115 116 // attributes 117 setupDefaultAttributes(); 118 int index = ownerDocument.getNodeExtra(fNodeIndex); 119 if (index != -1) { 120 NamedNodeMap attrs = getAttributes(); 121 do { 122 NodeImpl attr = (NodeImpl)ownerDocument.getNodeObject(index); 123 attrs.setNamedItem(attr); 124 index = ownerDocument.getPrevSibling(index); 125 } while (index != -1); 126 } 127 128 // set mutation events flag back to its original value 129 ownerDocument.mutationEvents = orig; 130 131 } // synchronizeData() 132 133 protected final void synchronizeChildren() { 134 DeferredDocumentImpl ownerDocument = 135 (DeferredDocumentImpl) ownerDocument(); 136 ownerDocument.synchronizeChildren(this, fNodeIndex); 137 } // synchronizeChildren() 138 139 } // class DeferredElementImpl