001 package railo.runtime.text.xml.struct; 002 003 import java.lang.reflect.Method; 004 005 import org.w3c.dom.Attr; 006 import org.w3c.dom.DOMException; 007 import org.w3c.dom.Element; 008 import org.w3c.dom.Node; 009 import org.w3c.dom.NodeList; 010 import org.w3c.dom.TypeInfo; 011 012 import railo.runtime.exp.PageRuntimeException; 013 import railo.runtime.op.Caster; 014 import railo.runtime.type.Collection; 015 import railo.runtime.type.util.ArrayUtil; 016 017 018 /** 019 * 020 */ 021 public class XMLElementStruct extends XMLNodeStruct implements Element { 022 023 024 private Element element; 025 026 /** 027 * constructor of the class 028 * @param element 029 * @param caseSensitive 030 */ 031 protected XMLElementStruct(Element element, boolean caseSensitive) { 032 super(element instanceof XMLElementStruct?element=((XMLElementStruct)element).getElement():element, caseSensitive); 033 this.element=element; 034 } 035 036 @Override 037 public String getTagName() { 038 return element.getTagName(); 039 } 040 @Override 041 public void removeAttribute(String name) throws DOMException { 042 element.removeAttribute(name); 043 } 044 @Override 045 public boolean hasAttribute(String name) { 046 return element.hasAttribute(name); 047 } 048 @Override 049 public String getAttribute(String name) { 050 return element.getAttribute(name); 051 } 052 @Override 053 public void removeAttributeNS(String namespaceURI, String localName) throws DOMException { 054 element.removeAttributeNS(namespaceURI,localName); 055 } 056 @Override 057 public void setAttribute(String name, String value) throws DOMException { 058 element.setAttribute(name,value); 059 } 060 @Override 061 public boolean hasAttributeNS(String namespaceURI, String localName) { 062 return element.hasAttributeNS(namespaceURI,localName); 063 } 064 @Override 065 public Attr getAttributeNode(String name) { 066 return element.getAttributeNode(name); 067 } 068 @Override 069 public Attr removeAttributeNode(Attr oldAttr) throws DOMException { 070 return element.removeAttributeNode(oldAttr); 071 } 072 @Override 073 public Attr setAttributeNode(Attr newAttr) throws DOMException { 074 return element.setAttributeNode(newAttr); 075 } 076 @Override 077 public Attr setAttributeNodeNS(Attr newAttr) throws DOMException { 078 return element.setAttributeNodeNS(newAttr); 079 } 080 @Override 081 public NodeList getElementsByTagName(String name) { 082 return element.getElementsByTagName(name); 083 } 084 @Override 085 public String getAttributeNS(String namespaceURI, String localName) { 086 return element.getAttributeNS(namespaceURI,localName); 087 } 088 @Override 089 public void setAttributeNS(String namespaceURI, String qualifiedName,String value) throws DOMException { 090 element.setAttributeNS(namespaceURI,qualifiedName,value); 091 } 092 @Override 093 public Attr getAttributeNodeNS(String namespaceURI, String localName) { 094 return element.getAttributeNodeNS(namespaceURI,localName); 095 } 096 @Override 097 public NodeList getElementsByTagNameNS(String namespaceURI, String localName) { 098 return element.getElementsByTagNameNS(namespaceURI,localName); 099 } 100 101 public void setIdAttribute(String name, boolean isId) throws DOMException { 102 // dynamic load to support jre 1.4 and 1.5 103 try { 104 Method m = element.getClass().getMethod("setIdAttribute", new Class[]{name.getClass(),boolean.class}); 105 m.invoke(element, new Object[]{name,Caster.toBoolean(isId)}); 106 } 107 catch (Exception e) { 108 throw new PageRuntimeException(Caster.toPageException(e)); 109 } 110 } 111 112 public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException { 113 // dynamic load to support jre 1.4 and 1.5 114 try { 115 Method m = element.getClass().getMethod("setIdAttributeNS", new Class[]{namespaceURI.getClass(),localName.getClass(),boolean.class}); 116 m.invoke(element, new Object[]{namespaceURI,localName,Caster.toBoolean(isId)}); 117 } 118 catch (Exception e) { 119 throw new PageRuntimeException(Caster.toPageException(e)); 120 } 121 } 122 123 public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException { 124 // dynamic load to support jre 1.4 and 1.5 125 try { 126 Method m = element.getClass().getMethod("setIdAttributeNode", new Class[]{idAttr.getClass(),boolean.class}); 127 m.invoke(element, new Object[]{idAttr,Caster.toBoolean(isId)}); 128 } 129 catch (Exception e) { 130 element.setAttributeNodeNS(idAttr); 131 } 132 } 133 134 public TypeInfo getSchemaTypeInfo() { 135 // dynamic load to support jre 1.4 and 1.5 136 try { 137 Method m = element.getClass().getMethod("getSchemaTypeInfo", new Class[]{}); 138 return (TypeInfo) m.invoke(element, ArrayUtil.OBJECT_EMPTY); 139 } 140 catch (Exception e) { 141 throw new PageRuntimeException(Caster.toPageException(e)); 142 } 143 } 144 /** 145 * @return the element 146 */ 147 public Element getElement() { 148 return element; 149 } 150 151 @Override 152 public Collection duplicate(boolean deepCopy) { 153 return new XMLElementStruct((Element)element.cloneNode(deepCopy),caseSensitive); 154 } 155 156 157 @Override 158 public Node cloneNode(boolean deep) { 159 return new XMLElementStruct((Element)element.cloneNode(deep),caseSensitive); 160 } 161 }