com.gargoylesoftware.htmlunit.html.DomText Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vaadin-client-compiler-deps Show documentation
Show all versions of vaadin-client-compiler-deps Show documentation
Vaadin is a web application framework for Rich Internet Applications (RIA).
Vaadin enables easy development and maintenance of fast and
secure rich web
applications with a stunning look and feel and a wide browser support.
It features a server-side architecture with the majority of the logic
running
on the server. Ajax technology is used at the browser-side to ensure a
rich
and interactive user experience.
/*
* Copyright (c) 2002-2011 Gargoyle Software Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gargoylesoftware.htmlunit.html;
import java.io.PrintWriter;
import org.w3c.dom.DOMException;
import org.w3c.dom.Text;
import com.gargoylesoftware.htmlunit.SgmlPage;
import com.gargoylesoftware.htmlunit.util.StringUtils;
/**
* Representation of a text node in the HTML DOM.
*
* @version $Revision: 6264 $
* @author David K. Taylor
* @author Christian Sell
* @author Rodney Gitzel
* @author Ahmed Ashour
* @author Sudhan Moghe
* @author Philip Graf
*/
public class DomText extends DomCharacterData implements Text {
/** The symbolic node name. */
public static final String NODE_NAME = "#text";
/**
* Creates an instance of DomText.
*
* @param page the Page that contains this element
* @param data the string data held by this node
*/
public DomText(final SgmlPage page, final String data) {
super(page, data);
}
/**
* {@inheritDoc}
*/
public DomText splitText(final int offset) {
if (offset < 0 || offset > getLength()) {
throw new IllegalArgumentException("offset: " + offset + " data.length: " + getLength());
}
// split text into two separate nodes
final DomText newText = createSplitTextNode(offset);
setData(getData().substring(0, offset));
// insert new text node
if (getParentNode() != null) {
getParentNode().insertBefore(newText, getNextSibling());
}
return newText;
}
/**
* Creates a new text node split from another text node. This method allows
* the derived type of the new text node to match the original node type.
*
* @param offset the character position at which to split the DomText node
* @return the newly created Text node
*/
protected DomText createSplitTextNode(final int offset) {
return new DomText(getPage(), getData().substring(offset));
}
/**
* {@inheritDoc}
* Not yet implemented.
*/
public boolean isElementContentWhitespace() {
throw new UnsupportedOperationException("DomText.isElementContentWhitespace is not yet implemented.");
}
/**
* {@inheritDoc}
* Not yet implemented.
*/
public String getWholeText() {
throw new UnsupportedOperationException("DomText.getWholeText is not yet implemented.");
}
/**
* {@inheritDoc}
* Not yet implemented.
*/
public Text replaceWholeText(final String content) throws DOMException {
throw new UnsupportedOperationException("DomText.replaceWholeText is not yet implemented.");
}
/**
* @return the node type constant, in this case {@link org.w3c.dom.Node#TEXT_NODE}
*/
@Override
public short getNodeType() {
return org.w3c.dom.Node.TEXT_NODE;
}
/**
* @return the node name, in this case {@link #NODE_NAME}
*/
@Override
public String getNodeName() {
return NODE_NAME;
}
/**
* Recursively writes the XML data for the node tree starting at node
.
*
* @param indent white space to indent child nodes
* @param printWriter writer where child nodes are written
*/
@Override
protected void printXml(final String indent, final PrintWriter printWriter) {
String data = getData();
if (org.apache.commons.lang.StringUtils.isNotBlank(data)) {
printWriter.print(indent);
if (!(getParentNode() instanceof HtmlStyle) || !data.startsWith("")) {
data = StringUtils.escapeXmlChars(data);
}
printWriter.println(data);
}
printChildrenAsXml(indent, printWriter);
}
/**
* Gives a simple representation to facilitate debugging.
* @return a simple representation
*/
@Override
public String toString() {
return asText();
}
/**
* {@inheritDoc}
*/
@Override
protected boolean isTrimmedText() {
return false;
}
}