2
* The Apache Software License, Version 1.1
5
* Copyright (c) 1999-2002 The Apache Software Foundation. All rights
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
12
* 1. Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in
17
* the documentation and/or other materials provided with the
20
* 3. The end-user documentation included with the redistribution,
21
* if any, must include the following acknowledgment:
22
* "This product includes software developed by the
23
* Apache Software Foundation (http://www.apache.org/)."
24
* Alternately, this acknowledgment may appear in the software itself,
25
* if and wherever such third-party acknowledgments normally appear.
27
* 4. The names "Xerces" and "Apache Software Foundation" must
28
* not be used to endorse or promote products derived from this
29
* software without prior written permission. For written
30
* permission, please contact apache@apache.org.
32
* 5. Products derived from this software may not be called "Apache",
33
* nor may "Apache" appear in their name, without prior written
34
* permission of the Apache Software Foundation.
36
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48
* ====================================================================
50
* This software consists of voluntary contributions made by many
51
* individuals on behalf of the Apache Software Foundation and was
52
* originally based on software copyright (c) 1999, International
53
* Business Machines, Inc., http://www.apache.org. For more
54
* information on the Apache Software Foundation, please see
55
* <http://www.apache.org/>.
58
package org.apache.xerces.dom;
62
* Entity nodes hold the reference data for an XML Entity -- either
63
* parsed or unparsed. The nodeName (inherited from Node) will contain
64
* the name (if any) of the Entity. Its data will be contained in the
65
* Entity's children, in exactly the structure which an
66
* EntityReference to this name will present within the document's
69
* Note that this object models the actual entity, _not_ the entity
70
* declaration or the entity reference.
72
* An XML processor may choose to completely expand entities before
73
* the structure model is passed to the DOM; in this case, there will
74
* be no EntityReferences in the DOM tree.
76
* Quoting the 10/01 DOM Proposal,
78
* "The DOM Level 1 does not support editing Entity nodes; if a user
79
* wants to make changes to the contents of an Entity, every related
80
* EntityReference node has to be replaced in the structure model by
81
* a clone of the Entity's contents, and then the desired changes
82
* must be made to each of those clones instead. All the
83
* descendants of an Entity node are readonly."
85
* I'm interpreting this as: It is the parser's responsibilty to call
86
* the non-DOM operation setReadOnly(true,true) after it constructs
87
* the Entity. Since the DOM explicitly decided not to deal with this,
88
* _any_ answer will involve a non-DOM operation, and this is the
92
* @version $Id: DeferredEntityImpl.java,v 1.17 2003/11/13 22:47:15 elena Exp $
93
* @since PR-DOM-Level-1-19980818.
95
public class DeferredEntityImpl
97
implements DeferredNode {
103
/** Serialization version. */
104
static final long serialVersionUID = 4760180431078941638L;
111
protected transient int fNodeIndex;
118
* This is the deferred constructor. Only the fNodeIndex is given here.
119
* All other data, can be requested from the ownerDocument via the index.
121
DeferredEntityImpl(DeferredDocumentImpl ownerDocument, int nodeIndex) {
122
super(ownerDocument, null);
124
fNodeIndex = nodeIndex;
126
needsSyncChildren(true);
128
} // <init>(DeferredDocumentImpl,int)
131
// DeferredNode methods
134
/** Returns the node index. */
135
public int getNodeIndex() {
144
* Synchronize the entity data. This is special because of the way
145
* that the "fast" version stores the information.
147
protected void synchronizeData() {
149
// no need to sychronize again
150
needsSyncData(false);
153
DeferredDocumentImpl ownerDocument =
154
(DeferredDocumentImpl)this.ownerDocument;
155
name = ownerDocument.getNodeName(fNodeIndex);
157
// get the entity data
158
publicId = ownerDocument.getNodeValue(fNodeIndex);
159
systemId = ownerDocument.getNodeURI(fNodeIndex);
160
int extraDataIndex = ownerDocument.getNodeExtra(fNodeIndex);
161
ownerDocument.getNodeType(extraDataIndex);
163
notationName = ownerDocument.getNodeName(extraDataIndex);
165
// encoding and version DOM L3
166
version = ownerDocument.getNodeValue(extraDataIndex);
167
encoding = ownerDocument.getNodeURI(extraDataIndex);
169
// baseURI, actualEncoding DOM L3
170
int extraIndex2 = ownerDocument.getNodeExtra(extraDataIndex);
171
baseURI = ownerDocument.getNodeName(extraIndex2);
172
inputEncoding = ownerDocument.getNodeValue(extraIndex2);
174
} // synchronizeData()
176
/** Synchronize the children. */
177
protected void synchronizeChildren() {
179
// no need to synchronize again
180
needsSyncChildren(false);
183
DeferredDocumentImpl ownerDocument =
184
(DeferredDocumentImpl) ownerDocument();
185
ownerDocument.synchronizeChildren(this, fNodeIndex);
186
setReadOnly(true, true);
188
} // synchronizeChildren()
190
} // class DeferredEntityImpl