nextapp.echo2.webrender.output.HtmlDocument Maven / Gradle / Ivy
The newest version!
/*
* This file is part of the Echo Web Application Framework (hereinafter "Echo").
* Copyright (C) 2002-2009 NextApp, Inc.
*
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*/
package nextapp.echo2.webrender.output;
import nextapp.echo2.webrender.util.DomUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
/**
* A simple wrapper around JAXP/W3C DOM APIs to generate and render an
* XHTML 1.0 Transitional document.
*/
public class HtmlDocument extends XmlDocument {
public static final String XHTML_1_0_TRANSITIONAL_PUBLIC_ID = "-//W3C//DTD XHTML 1.0 Transitional//EN";
public static final String XHTML_1_0_TRANSITIONAL_SYSTSEM_ID = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
public static final String XHTML_1_0_NAMESPACE_URI = "http://www.w3.org/1999/xhtml";
/**
* Creates a new HtmlDocument
.
*/
public HtmlDocument(String publicId, String systemId, String namespaceUri) {
super("html", publicId, systemId, namespaceUri);
Document document = getDocument();
Element htmlElement = document.getDocumentElement();
Element headElement = document.createElement("head");
Element titleElement = document.createElement("title");
titleElement.appendChild(document.createTextNode(" "));
Element bodyElement = document.createElement("body");
htmlElement.appendChild(headElement);
headElement.appendChild(titleElement);
htmlElement.appendChild(bodyElement);
}
/**
* Adds inline JavaScript code to the document.
*
* @param code the inline code
*/
public void addJavaScriptText(String code) {
Document document = getDocument();
Element headElement = (Element) document.getElementsByTagName("head").item(0);
Element scriptElement = document.createElement("script");
Text textNode = document.createTextNode(code);
scriptElement.appendChild(textNode);
scriptElement.setAttribute("type", "text/javascript");
headElement.appendChild(scriptElement);
}
/**
* Adds a JavaScript include reference to the document.
*
* @param uri the URI of the JavaScript code
*/
public void addJavaScriptInclude(String uri) {
Document document = getDocument();
Element headElement = (Element) document.getElementsByTagName("head").item(0);
Element scriptElement = document.createElement("script");
Text textNode = document.createTextNode(" ");
scriptElement.appendChild(textNode);
scriptElement.setAttribute("type", "text/javascript");
scriptElement.setAttribute("src", uri);
headElement.appendChild(scriptElement);
}
/**
* Retrieves the BODY element of the document.
*
* @return the BODY element
*/
public Element getBodyElement() {
return (Element) getDocument().getElementsByTagName("body").item(0);
}
/**
* Retrieves the HEAD element of the document.
*
* @return the HEAD element
*/
public Element getHeadElement() {
return (Element) getDocument().getElementsByTagName("head").item(0);
}
/**
* Sets the value of the "generator" META element.
*
* @param value the value
*/
public void setGenarator(String value) {
Element metaGeneratorElement = getDocument().createElement("meta");
metaGeneratorElement.setAttribute("name", "generator");
metaGeneratorElement.setAttribute("content", value);
getHeadElement().appendChild(metaGeneratorElement);
}
/**
* Convenience method to set the title of the document.
*
* @param value The new title value.
*/
public void setTitle(String value) {
NodeList titles = getDocument().getElementsByTagName("title");
if (titles.getLength() == 1) {
DomUtil.setElementText((Element) titles.item(0), value == null ? "" : value);
}
}
}