blob: 3879b304e8e75df35127fec468916061373e609a [file] [log] [blame]
/*
* $Id$
*
* Copyright 2006 The Apache Software Foundation.
*
* 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 org.apache.struts2.views.xslt;
import java.util.Arrays;
import java.util.List;
import org.apache.struts2.StrutsException;
import org.w3c.dom.Attr;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.DocumentType;
import org.w3c.dom.Element;
import org.w3c.dom.EntityReference;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
/**
* SimpleAdapterDocument adapted a Java object and presents it as
* a Document. This class represents the Document container and uses
* the AdapterFactory to produce a child adapter for the wrapped object.
* The adapter produced must be of an Element type or an exception is thrown.
*
* Note: in theory we could base this on AbstractAdapterElement and then allow
* the wrapped object to be a more general Node type. We would just use
* ourselves as the root element. However I don't think this is an issue as
* people expect Documents to wrap Elements.
*/
public class SimpleAdapterDocument extends AbstractAdapterNode implements Document {
private Element rootElement;
public SimpleAdapterDocument(
AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
setContext(adapterFactory, parent, propertyName, value);
}
public void setPropertyValue(Object prop) {
super.setPropertyValue(prop);
rootElement = null; // recreate the root element
}
/**
* Lazily construct the root element adapter from the value object.
*/
private Element getRootElement() {
if (rootElement != null)
return rootElement;
Node node = getAdapterFactory().adaptNode(
this, getPropertyName(), getPropertyValue());
if (node instanceof Element)
rootElement = (Element) node;
else
throw new StrutsException(
"Document adapter expected to wrap an Element type. Node is not an element:" + node);
return rootElement;
}
protected List<Node> getChildAdapters() {
return Arrays.asList(new Node[]{getRootElement()});
}
public NodeList getChildNodes() {
return new NodeList() {
public Node item(int i) {
return getRootElement();
}
public int getLength() {
return 1;
}
};
}
public DocumentType getDoctype() {
return null;
}
public Element getDocumentElement() {
return getRootElement();
}
public Element getElementById(String string) {
return null;
}
public NodeList getElementsByTagName(String string) {
return null;
}
public NodeList getElementsByTagNameNS(String string, String string1) {
return null;
}
public Node getFirstChild() {
return getRootElement();
}
public DOMImplementation getImplementation() {
return null;
}
public Node getLastChild() {
return getRootElement();
}
public String getNodeName() {
return "#document";
}
public short getNodeType() {
return Node.DOCUMENT_NODE;
}
public Attr createAttribute(String string) throws DOMException {
return null;
}
public Attr createAttributeNS(String string, String string1) throws DOMException {
return null;
}
public CDATASection createCDATASection(String string) throws DOMException {
return null;
}
public Comment createComment(String string) {
return null;
}
public DocumentFragment createDocumentFragment() {
return null;
}
public Element createElement(String string) throws DOMException {
return null;
}
public Element createElementNS(String string, String string1) throws DOMException {
return null;
}
public EntityReference createEntityReference(String string) throws DOMException {
return null;
}
public ProcessingInstruction createProcessingInstruction(String string, String string1) throws DOMException {
return null;
}
public Text createTextNode(String string) {
return null;
}
public boolean hasChildNodes() {
return true;
}
public Node importNode(Node node, boolean b) throws DOMException {
return null;
}
public Node getChildAfter(Node child) {
return null;
}
public Node getChildBefore(Node child) {
return null;
}
// DOM level 3
public String getInputEncoding() {
throw operationNotSupported();
}
public String getXmlEncoding() {
throw operationNotSupported();
}
public boolean getXmlStandalone() {
throw operationNotSupported();
}
public void setXmlStandalone(boolean b) throws DOMException {
throw operationNotSupported();
}
public String getXmlVersion() {
throw operationNotSupported();
}
public void setXmlVersion(String string) throws DOMException {
throw operationNotSupported();
}
public boolean getStrictErrorChecking() {
throw operationNotSupported();
}
public void setStrictErrorChecking(boolean b) {
throw operationNotSupported();
}
public String getDocumentURI() {
throw operationNotSupported();
}
public void setDocumentURI(String string) {
throw operationNotSupported();
}
public Node adoptNode(Node node) throws DOMException {
throw operationNotSupported();
}
public DOMConfiguration getDomConfig() {
throw operationNotSupported();
}
public void normalizeDocument() {
throw operationNotSupported();
}
public Node renameNode(Node node, String string, String string1) throws DOMException {
return null;
}
// end DOM level 3
}