package railo.runtime.text.xml.struct; import java.lang.reflect.Method; 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; import railo.runtime.exp.PageRuntimeException; import railo.runtime.op.Caster; import railo.runtime.type.Collection; import railo.runtime.type.util.ArrayUtil; /** * */ public final class XMLDocumentStruct extends XMLNodeStruct implements Document { private Document doc; /** * @param doc * @param caseSensitive */ protected XMLDocumentStruct(Document doc, boolean caseSensitive) { super(doc, caseSensitive); this.doc=doc; } @Override public DOMImplementation getImplementation() { return doc.getImplementation(); } @Override public DocumentFragment createDocumentFragment() { return doc.createDocumentFragment(); } @Override public DocumentType getDoctype() { return doc.getDoctype(); } @Override public Element getDocumentElement() { return doc.getDocumentElement(); } @Override public Attr createAttribute(String name) throws DOMException { return doc.createAttribute(name); } @Override public CDATASection createCDATASection(String data) throws DOMException { return doc.createCDATASection(data); } @Override public Comment createComment(String data) { return doc.createComment(data); } @Override public Element createElement(String tagName) throws DOMException { return doc.createElement(tagName); } @Override public Element getElementById(String elementId) { return doc.getElementById(elementId); } @Override public EntityReference createEntityReference(String name) throws DOMException { return doc.createEntityReference(name); } @Override public Node importNode(Node importedNode, boolean deep) throws DOMException { return doc.importNode(importedNode,deep); } @Override public NodeList getElementsByTagName(String tagname) { return doc.getElementsByTagName(tagname); } @Override public Text createTextNode(String data) { return doc.createTextNode(data); } @Override public Attr createAttributeNS(String namespaceURI, String qualifiedName) throws DOMException { return doc.createAttributeNS(namespaceURI,qualifiedName); } @Override public Element createElementNS(String namespaceURI, String qualifiedName) throws DOMException { return doc.createElementNS(namespaceURI,qualifiedName); } @Override public NodeList getElementsByTagNameNS(String namespaceURI, String localName) { return doc.getElementsByTagNameNS(namespaceURI,localName); } @Override public ProcessingInstruction createProcessingInstruction(String target, String data) throws DOMException { return doc.createProcessingInstruction(target,data); } public Node adoptNode(Node arg0) throws DOMException { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("adoptNode", new Class[]{arg0.getClass()}); return Caster.toNode(m.invoke(doc, new Object[]{arg0})); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public String getDocumentURI() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getDocumentURI", new Class[]{}); return Caster.toString(m.invoke(doc, ArrayUtil.OBJECT_EMPTY)); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public DOMConfiguration getDomConfig() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getDomConfig", new Class[]{}); return (DOMConfiguration) m.invoke(doc, ArrayUtil.OBJECT_EMPTY); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public String getInputEncoding() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getInputEncoding", new Class[]{}); return Caster.toString(m.invoke(doc, ArrayUtil.OBJECT_EMPTY)); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public boolean getStrictErrorChecking() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getStrictErrorChecking", new Class[]{}); return Caster.toBooleanValue(m.invoke(doc, ArrayUtil.OBJECT_EMPTY)); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public String getXmlEncoding() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getXmlEncoding", new Class[]{}); return Caster.toString(m.invoke(doc, ArrayUtil.OBJECT_EMPTY)); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public boolean getXmlStandalone() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getXmlStandalone", new Class[]{}); return Caster.toBooleanValue(m.invoke(doc, ArrayUtil.OBJECT_EMPTY)); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public String getXmlVersion() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("getXmlVersion", new Class[]{}); return Caster.toString(m.invoke(doc, ArrayUtil.OBJECT_EMPTY)); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public void normalizeDocument() { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("normalizeDocument", new Class[]{}); m.invoke(doc, ArrayUtil.OBJECT_EMPTY); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public Node renameNode(Node arg0, String arg1, String arg2) throws DOMException { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("renameNode", new Class[]{arg0.getClass(),arg1.getClass(),arg2.getClass()}); return Caster.toNode(m.invoke(doc, new Object[]{arg0,arg1,arg2})); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public void setDocumentURI(String arg0) { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("setDocumentURI", new Class[]{arg0.getClass()}); m.invoke(doc, new Object[]{arg0}); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public void setStrictErrorChecking(boolean arg0) { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("setStrictErrorChecking", new Class[]{boolean.class}); m.invoke(doc, new Object[]{Caster.toBoolean(arg0)}); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public void setXmlStandalone(boolean arg0) throws DOMException { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("setXmlStandalone", new Class[]{boolean.class}); m.invoke(doc, new Object[]{Caster.toBoolean(arg0)}); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } public void setXmlVersion(String arg0) throws DOMException { // dynamic load to support jre 1.4 and 1.5 try { Method m = doc.getClass().getMethod("setXmlVersion", new Class[]{arg0.getClass()}); m.invoke(doc, new Object[]{arg0}); } catch (Exception e) { throw new PageRuntimeException(Caster.toPageException(e)); } } @Override public Collection duplicate(boolean deepCopy) { return new XMLDocumentStruct((Document)doc.cloneNode(deepCopy),caseSensitive); } @Override public Node cloneNode(boolean deep) { return new XMLDocumentStruct((Document)doc.cloneNode(deep),caseSensitive); } }