~ubuntu-branches/ubuntu/karmic/libxerces2-java/karmic

« back to all changes in this revision

Viewing changes to src/org/apache/xerces/dom/DeferredEntityImpl.java

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Gybas
  • Date: 2004-06-06 18:00:26 UTC
  • Revision ID: james.westby@ubuntu.com-20040606180026-a3vh56uc95hjbyfh
Tags: upstream-2.6.2
ImportĀ upstreamĀ versionĀ 2.6.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * The Apache Software License, Version 1.1
 
3
 *
 
4
 *
 
5
 * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
 
6
 * reserved.
 
7
 *
 
8
 * Redistribution and use in source and binary forms, with or without
 
9
 * modification, are permitted provided that the following conditions
 
10
 * are met:
 
11
 *
 
12
 * 1. Redistributions of source code must retain the above copyright
 
13
 *    notice, this list of conditions and the following disclaimer.
 
14
 *
 
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
 
18
 *    distribution.
 
19
 *
 
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.
 
26
 *
 
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.
 
31
 *
 
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.
 
35
 *
 
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
 
47
 * SUCH DAMAGE.
 
48
 * ====================================================================
 
49
 *
 
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/>.
 
56
 */
 
57
 
 
58
package org.apache.xerces.dom;
 
59
 
 
60
 
 
61
/**
 
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
 
67
 * body.
 
68
 * <P>
 
69
 * Note that this object models the actual entity, _not_ the entity
 
70
 * declaration or the entity reference.
 
71
 * <P>
 
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.
 
75
 * <P>
 
76
 * Quoting the 10/01 DOM Proposal,
 
77
 * <BLOCKQUOTE>
 
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."
 
84
 * </BLOCKQUOTE>
 
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
 
89
 * simplest solution.
 
90
 *
 
91
 *
 
92
 * @version $Id: DeferredEntityImpl.java,v 1.17 2003/11/13 22:47:15 elena Exp $
 
93
 * @since  PR-DOM-Level-1-19980818.
 
94
 */
 
95
public class DeferredEntityImpl
 
96
    extends EntityImpl
 
97
    implements DeferredNode {
 
98
 
 
99
    //
 
100
    // Constants
 
101
    //
 
102
 
 
103
    /** Serialization version. */
 
104
    static final long serialVersionUID = 4760180431078941638L;
 
105
 
 
106
    //
 
107
    // Data
 
108
    //
 
109
 
 
110
    /** Node index. */
 
111
    protected transient int fNodeIndex;
 
112
 
 
113
    //
 
114
    // Constructors
 
115
    //
 
116
 
 
117
    /**
 
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.
 
120
     */
 
121
    DeferredEntityImpl(DeferredDocumentImpl ownerDocument, int nodeIndex) {
 
122
        super(ownerDocument, null);
 
123
 
 
124
        fNodeIndex = nodeIndex;
 
125
        needsSyncData(true);
 
126
        needsSyncChildren(true);
 
127
 
 
128
    } // <init>(DeferredDocumentImpl,int)
 
129
 
 
130
    //
 
131
    // DeferredNode methods
 
132
    //
 
133
 
 
134
    /** Returns the node index. */
 
135
    public int getNodeIndex() {
 
136
        return fNodeIndex;
 
137
    }
 
138
 
 
139
    //
 
140
    // Protected methods
 
141
    //
 
142
 
 
143
    /**
 
144
     * Synchronize the entity data. This is special because of the way
 
145
     * that the "fast" version stores the information.
 
146
     */
 
147
    protected void synchronizeData() {
 
148
 
 
149
        // no need to sychronize again
 
150
        needsSyncData(false);
 
151
 
 
152
        // get the node data
 
153
        DeferredDocumentImpl ownerDocument =
 
154
            (DeferredDocumentImpl)this.ownerDocument;
 
155
        name = ownerDocument.getNodeName(fNodeIndex);
 
156
 
 
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);
 
162
 
 
163
        notationName = ownerDocument.getNodeName(extraDataIndex);
 
164
 
 
165
        // encoding and version DOM L3
 
166
        version     = ownerDocument.getNodeValue(extraDataIndex);
 
167
        encoding    = ownerDocument.getNodeURI(extraDataIndex);
 
168
 
 
169
        // baseURI, actualEncoding DOM L3
 
170
        int extraIndex2 = ownerDocument.getNodeExtra(extraDataIndex);
 
171
        baseURI = ownerDocument.getNodeName(extraIndex2);
 
172
        inputEncoding = ownerDocument.getNodeValue(extraIndex2);
 
173
 
 
174
    } // synchronizeData()
 
175
 
 
176
    /** Synchronize the children. */
 
177
    protected void synchronizeChildren() {
 
178
 
 
179
        // no need to synchronize again
 
180
        needsSyncChildren(false);
 
181
 
 
182
        isReadOnly(false);
 
183
        DeferredDocumentImpl ownerDocument =
 
184
            (DeferredDocumentImpl) ownerDocument();
 
185
        ownerDocument.synchronizeChildren(this, fNodeIndex);
 
186
        setReadOnly(true, true);
 
187
 
 
188
    } // synchronizeChildren()
 
189
 
 
190
} // class DeferredEntityImpl