001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.visualweb.designer.markup;
042:
043: import java.util.logging.Level;
044: import java.util.logging.LogRecord;
045: import java.util.logging.Logger;
046: import org.apache.xerces.dom.CoreDocumentImpl;
047: import org.apache.xerces.dom.TextImpl;
048: import org.w3c.dom.DOMException;
049: import org.w3c.dom.Text;
050:
051: // CVS note: This file used to be called XhtmlText (same directory)
052: // if you need to look at older CVS history
053:
054: /**
055: * XXX Originally in insync.
056: * This class represents an individual TEXT_NODE in an RaveDocument DOM.
057: *
058: * @author Tor Norbye
059: */
060: class RaveText extends TextImpl {
061: private static final long serialVersionUID = 4122818088460105010L;
062:
063: // private boolean jspx;
064: // XXX This seems to be a dummy unused field.
065: // RaveText source;
066:
067: // /** Flag which indicates whether this node lives in the "source" DOM (typically the JSP file)
068: // * or the "rendered" DOM (typically the HTML file). I chose to use "render"/"source" terms
069: // * instead of HTML/JSP terms since the JSP can itself contain HTML markup which might muddy the
070: // * issue. */
071: // private boolean rendered;
072: //
073: // /** If this is a "rendered" node (see {@link isRendered} then alternate points to its JSP
074: // * source node, and if this is a node in the source DOM (the JSP itself), then alternate
075: // * will point to the first, top level HTML node rendered from this node. HTML markup
076: // * in the JSP will have a 1-1 mapping to HTML markup in the rendered DOM. For JSF components,
077: // * only the top level HTML rendered elements will point back to the source JSP node; children
078: // * will be null indicating that they have no direct alternate node.
079: // */
080: // private RaveText alternate;
081:
082: public RaveText() {
083: }
084:
085: /** Factory constructor. */
086: public RaveText(CoreDocumentImpl ownerDoc, String data) {
087: super (ownerDoc, data);
088: }
089:
090: // Ensure that split text nodes "inherit" the jspx attribute.
091: public Text splitText(int offset) throws DOMException {
092: // RaveTextImpl t = (RaveTextImpl)super.splitText(offset);
093: RaveText t = (RaveText) super .splitText(offset);
094: t.copyFrom(this );
095: // t.source = null; // source should NOT be duplicated here - that's the source for the pre-split node
096:
097: return t;
098: }
099:
100: // Ensure that cloned text nodes "inherit" the jspx attribute.
101: public Text replaceWholeText(String content) throws DOMException {
102: // RaveTextImpl t = (RaveTextImpl)super.replaceWholeText(content);
103: RaveText t = (RaveText) super .replaceWholeText(content);
104: t.copyFrom(this );
105: // t.source = null; // source should NOT be duplicated here
106:
107: return t;
108: }
109:
110: // Moved to MarkupServiceImpl.
111: // /** Recursively mark all text nodes in the given node subtree as
112: // * being jspx nodes
113: // */
114: // public static void markJspxSource(Node n) {
115: // if (n instanceof RenderNode) {
116: // ((RenderNode)n).setJspx(true);
117: // }
118: //
119: // NodeList list = n.getChildNodes();
120: // int len = list.getLength();
121: //
122: // for (int i = 0; i < len; i++) {
123: // markJspxSource(list.item(i));
124: // }
125: // }
126:
127: // XXX Get rid of this.
128: /** During a clone operation, copy relevant info from the given
129: * source element to this target element
130: */
131: // void copyFrom(RaveTextImpl from) {
132: void copyFrom(RaveText from) {
133: // jspx = from.jspx;
134: // setJspx(from.isJspx());
135: MarkupServiceImpl.setJspxNode(this , MarkupServiceImpl
136: .isJspxNode(from));
137: // this.source = (from.source != null) ? from.source : from;
138: }
139:
140: // public boolean isRendered() {
141: // return rendered;
142: // }
143: // public abstract boolean isRendered();
144:
145: // public RaveText getRendered() {
146: // if (rendered) {
147: // // TODO - should anyone ask for this if they already have HTML ? The code
148: // // might be confused so perhaps I should assert on this instead to pinpoint
149: // // questionable code...
150: // return this;
151: // }
152: //
153: // return alternate;
154: // }
155: //
156: // public RaveText getSource() {
157: // if (!rendered) {
158: // // TODO - should anyone ask for this if they already have JSP ? The code
159: // // might be confused so perhaps I should assert on this instead to pinpoint
160: // // questionable code...
161: // return this;
162: // }
163: //
164: // return alternate;
165: // }
166: //
167: // public void setSource(RaveText source) {
168: // rendered = true;
169: // alternate = source;
170: //
171: // if (alternate != null) {
172: // ((RaveTextImpl) alternate).rendered = false;
173: // ((RaveTextImpl) alternate).alternate = this;
174: // }
175: // }
176: //
177: // public void setRendered(RaveText rendered) {
178: // this.rendered = false;
179: // alternate = rendered;
180: //
181: // if (alternate != null) {
182: // ((RaveTextImpl) alternate).rendered = true;
183: // ((RaveTextImpl) alternate).alternate = this;
184: // }
185: // }
186:
187: // public boolean isJspx() {
188: //// return jspx;
189: // }
190: //
191: // public void setJspx(boolean jspx) {
192: //// this.jspx = jspx;
193: // }
194:
195: // public /*RaveRenderNode*/ Node getSourceNode() {
196: // return getSource();
197: // }
198: //
199: // public /*RaveRenderNode*/ Node getRenderedNode() {
200: // return getRendered();
201: // }
202:
203: // public void markRendered() {
204: // this.rendered = true;
205: // }
206:
207: public String toString() {
208: return "RaveText[" + getNodeValue() + "]";
209: }
210: }
|