1 29 30 package com.caucho.quercus.lib.dom; 31 32 import com.caucho.quercus.UnimplementedException; 33 import com.caucho.quercus.annotation.NotNull; 34 import com.caucho.quercus.annotation.Optional; 35 import com.caucho.quercus.annotation.ReturnNullAsFalse; 36 import com.caucho.quercus.env.Env; 37 import com.caucho.util.L10N; 38 import com.caucho.vfs.ReadStream; 39 40 import org.w3c.dom.*; 41 import org.xml.sax.SAXException ; 42 43 import java.io.IOException ; 44 import java.util.IdentityHashMap ; 45 46 public class DOMImplementation 47 { 48 private static L10N L = new L10N(DOMImplementation.class); 49 50 private final IdentityHashMap <Object , Object > _wrapperMap = new IdentityHashMap <Object , Object >(); 51 private final DOMFactory _factory; 52 53 final org.w3c.dom.DOMImplementation _delegate; 54 55 static DOMImplementation get(Env env) 56 { 57 DOMImplementation impl = env.getSpecialValue("caucho.dom"); 58 59 if (impl == null) { 60 impl = new DOMImplementation(); 61 env.setSpecialValue("caucho.dom", impl); 62 } 63 64 return impl; 65 } 66 67 public DOMImplementation() 68 { 69 _factory = new QDOMFactory(); 70 _delegate = _factory.getImplementation(); 71 } 72 73 static public boolean hasFeature(Env env, String feature, String version) 74 { 75 return get(env)._delegate.hasFeature(feature, version); 76 } 77 78 static public DOMDocument createDocument(Env env, 79 @Optional String namespaceURI, 80 @Optional String name, 81 @Optional DOMDocumentType docType) 82 { 83 DOMDocument doc; 84 85 if (docType != null) 86 doc = get(env).createDocument(docType); 87 else 88 doc = get(env).createDocument(); 89 90 if (name != null && name.length() > 0) { 91 DOMElement elt; 92 93 if (namespaceURI != null && namespaceURI.length() > 0) 94 elt = doc.createElementNS(namespaceURI, name); 95 else 96 elt = doc.createElement(name); 97 98 doc.appendChild(elt); 99 } 100 101 return doc; 102 } 103 104 @ReturnNullAsFalse 105 static public DOMDocumentType createDocumentType(Env env, 106 @NotNull String qualifiedName, 107 @Optional String publicId, 108 @Optional String systemId) 109 { 110 if (qualifiedName == null) 111 return null; 112 113 if ((publicId != null && publicId.length() > 0) 114 && (publicId != null && publicId.length() > 0)) 115 return get(env).createDocumentType(qualifiedName, publicId, systemId); 116 else 117 return get(env).createDocumentType(qualifiedName); 118 } 119 120 121 DOMAttr createWrapper(Attr node) 122 { 123 DOMAttr wrapper = new DOMAttr(this, node); 124 _wrapperMap.put(node, wrapper); 125 126 return wrapper; 127 } 128 129 DOMCDATASection createWrapper(CDATASection node) 130 { 131 DOMCDATASection wrapper = new DOMCDATASection(this, node); 132 _wrapperMap.put(node, wrapper); 133 134 return wrapper; 135 } 136 137 DOMComment createWrapper(Comment node) 138 { 139 DOMComment wrapper = new DOMComment(this, node); 140 _wrapperMap.put(node, wrapper); 141 142 return wrapper; 143 } 144 145 DOMDocument createWrapper(Document node) 146 { 147 DOMDocument wrapper = new DOMDocument(this, node); 148 _wrapperMap.put(node, wrapper); 149 150 return wrapper; 151 } 152 153 DOMDocumentFragment createWrapper(DocumentFragment node) 154 { 155 DOMDocumentFragment wrapper = new DOMDocumentFragment(this, node); 156 _wrapperMap.put(node, wrapper); 157 158 return wrapper; 159 } 160 161 DOMDocumentType createWrapper(DocumentType node) 162 { 163 DOMDocumentType wrapper = new DOMDocumentType(this, node); 164 _wrapperMap.put(node, wrapper); 165 166 return wrapper; 167 } 168 169 DOMConfiguration createWrapper(org.w3c.dom.DOMConfiguration node) 170 { 171 DOMConfiguration wrapper = new DOMConfiguration(this, node); 172 _wrapperMap.put(node, wrapper); 173 174 return wrapper; 175 } 176 177 DOMException createWrapper(org.w3c.dom.DOMException node) 178 { 179 DOMException wrapper = new DOMException(this, node); 180 _wrapperMap.put(node, wrapper); 181 182 return wrapper; 183 } 184 185 DOMElement createWrapper(Element node) 186 { 187 DOMElement wrapper = new DOMElement(this, node); 188 _wrapperMap.put(node, wrapper); 189 190 return wrapper; 191 } 192 193 DOMEntityReference createWrapper(EntityReference node) 194 { 195 DOMEntityReference wrapper = new DOMEntityReference(this, node); 196 _wrapperMap.put(node, wrapper); 197 198 return wrapper; 199 } 200 201 DOMNamedNodeMap createWrapper(NamedNodeMap node) 202 { 203 DOMNamedNodeMap wrapper = new DOMNamedNodeMap(this, node); 204 _wrapperMap.put(node, wrapper); 205 206 return wrapper; 207 } 208 209 DOMNodeList createWrapper(NodeList node) 210 { 211 DOMNodeList wrapper = new DOMNodeList(this, node); 212 _wrapperMap.put(node, wrapper); 213 214 return wrapper; 215 } 216 217 DOMNotation createWrapper(Notation node) 218 { 219 DOMNotation wrapper = new DOMNotation(this, node); 220 _wrapperMap.put(node, wrapper); 221 222 return wrapper; 223 } 224 225 DOMProcessingInstruction createWrapper(ProcessingInstruction node) 226 { 227 DOMProcessingInstruction wrapper = new DOMProcessingInstruction(this, node); 228 _wrapperMap.put(node, wrapper); 229 230 return wrapper; 231 } 232 233 DOMStringList createWrapper(org.w3c.dom.DOMStringList node) 234 { 235 DOMStringList wrapper = new DOMStringList(this, node); 236 _wrapperMap.put(node, wrapper); 237 238 return wrapper; 239 } 240 241 DOMText createWrapper(Text node) 242 { 243 DOMText wrapper = new DOMText(this, node); 244 _wrapperMap.put(node, wrapper); 245 246 return wrapper; 247 } 248 249 DOMTypeInfo createWrapper(TypeInfo node) 250 { 251 DOMTypeInfo wrapper = new DOMTypeInfo(this, node); 252 _wrapperMap.put(node, wrapper); 253 254 return wrapper; 255 } 256 257 Object getWrapper(Object obj) 258 { 259 Object wrapper; 260 261 if (obj instanceof NodeList) 262 wrapper = createWrapper((NodeList) obj); 263 else { 264 wrapper = _wrapperMap.get(obj); 265 266 if (wrapper == null) { 267 if (obj instanceof Attr) 268 wrapper = createWrapper((Attr) obj); 269 else if (obj instanceof CDATASection) 270 wrapper = createWrapper((CDATASection) obj); 271 else if (obj instanceof Comment) 272 wrapper = createWrapper((Comment) obj); 273 else if (obj instanceof Document) 274 wrapper = createWrapper((Document) obj); 275 else if (obj instanceof DocumentFragment) 276 wrapper = createWrapper((DocumentFragment) obj); 277 else if (obj instanceof DocumentType) 278 wrapper = createWrapper((DocumentType) obj); 279 else if (obj instanceof org.w3c.dom.DOMConfiguration ) 280 wrapper = createWrapper((org.w3c.dom.DOMConfiguration ) obj); 281 else if (obj instanceof org.w3c.dom.DOMException ) 282 wrapper = createWrapper((org.w3c.dom.DOMException ) obj); 283 else if (obj instanceof Element) 284 wrapper = createWrapper((Element) obj); 285 else if (obj instanceof EntityReference) 286 wrapper = createWrapper((EntityReference) obj); 287 else if (obj instanceof NamedNodeMap) 288 wrapper = createWrapper((NamedNodeMap) obj); 289 else if (obj instanceof Notation) 290 wrapper = createWrapper((Notation) obj); 291 else if (obj instanceof ProcessingInstruction) 292 wrapper = createWrapper((ProcessingInstruction) obj); 293 else if (obj instanceof org.w3c.dom.DOMStringList ) 294 wrapper = createWrapper((org.w3c.dom.DOMStringList ) obj); 295 else if (obj instanceof Text) 296 wrapper = createWrapper((Text) obj); 297 else if (obj instanceof TypeInfo) 298 wrapper = createWrapper((TypeInfo) obj); 299 else 300 throw new UnimplementedException(L.l("cannot wrap element of type {0}", obj.getClass().getName())); 301 302 _wrapperMap.put(obj, wrapper); 303 } 304 } 305 306 return wrapper; 307 } 308 309 public String toString() 310 { 311 return getClass().getSimpleName(); 312 } 313 314 DOMAttr createAttr(String name) 315 { 316 return createWrapper(_factory.createAttr(name)); 317 } 318 319 public DOMComment createComment() 320 { 321 return createWrapper(_factory.createComment()); 322 } 323 324 public DOMDocument createDocument() 325 { 326 return createWrapper(_factory.createDocument()); 327 } 328 329 public DOMDocument createDocument(DOMDocumentType docType) 330 { 331 return createWrapper(_factory.createDocument(docType._delegate)); 332 } 333 334 public DOMDocumentType createDocumentType(String qualifiedName) 335 { 336 return createWrapper(_factory.createDocumentType(qualifiedName)); 337 } 338 339 public DOMDocumentType createDocumentType(String qualifiedName, 340 String publicId, 341 String systemId) 342 { 343 return createWrapper(_factory.createDocumentType(qualifiedName, 344 publicId, 345 systemId)); 346 } 347 348 public DOMElement createElement(String name) 349 { 350 return createWrapper(_factory.createElement(name)); 351 } 352 353 public DOMElement createElement(String name, String namespace) 354 { 355 return createWrapper(_factory.createElement(name, namespace)); 356 } 357 358 public DOMEntityReference createEntityReference(String name) 359 { 360 return createWrapper(_factory.createEntityReference(name)); 361 } 362 363 public DOMProcessingInstruction createProcessingInstruction(String name) 364 { 365 return createWrapper(_factory.createProcessingInstruction(name)); 366 } 367 368 public DOMText createText() 369 { 370 return createWrapper(_factory.createText()); 371 } 372 373 public void parseHTMLDocument(Document document, ReadStream is, String path) 374 throws IOException , SAXException 375 { 376 _factory.parseXMLDocument(document, is, path); 377 } 378 379 public void parseXMLDocument(Document document, ReadStream is, String path) 380 throws IOException , SAXException 381 { 382 _factory.parseXMLDocument(document, is, path); 383 } 384 } 385 | Popular Tags |