KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > quercus > lib > dom > DOMImplementation


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  *
23  * Free Software Foundation, Inc.
24  * 59 Temple Place, Suite 330
25  * Boston, MA 02111-1307 USA
26  *
27  * @author Sam
28  */

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 JavaDoc;
42
43 import java.io.IOException JavaDoc;
44 import java.util.IdentityHashMap JavaDoc;
45
46 public class DOMImplementation
47 {
48   private static L10N L = new L10N(DOMImplementation.class);
49
50   private final IdentityHashMap JavaDoc<Object JavaDoc, Object JavaDoc> _wrapperMap = new IdentityHashMap JavaDoc<Object JavaDoc, Object JavaDoc>();
51   private final DOMFactory _factory;
52
53   final org.w3c.dom.DOMImplementation JavaDoc _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 JavaDoc feature, String JavaDoc version)
74   {
75     return get(env)._delegate.hasFeature(feature, version);
76   }
77
78   static public DOMDocument createDocument(Env env,
79                                            @Optional String JavaDoc namespaceURI,
80                                            @Optional String JavaDoc 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 JavaDoc qualifiedName,
107                                                    @Optional String JavaDoc publicId,
108                                                    @Optional String JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc getWrapper(Object JavaDoc obj)
258   {
259     Object JavaDoc 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 JavaDoc)
280           wrapper = createWrapper((org.w3c.dom.DOMConfiguration JavaDoc) obj);
281         else if (obj instanceof org.w3c.dom.DOMException JavaDoc)
282           wrapper = createWrapper((org.w3c.dom.DOMException JavaDoc) 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 JavaDoc)
294           wrapper = createWrapper((org.w3c.dom.DOMStringList JavaDoc) 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 JavaDoc toString()
310   {
311     return getClass().getSimpleName();
312   }
313
314   DOMAttr createAttr(String JavaDoc 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 JavaDoc qualifiedName)
335   {
336     return createWrapper(_factory.createDocumentType(qualifiedName));
337   }
338
339   public DOMDocumentType createDocumentType(String JavaDoc qualifiedName,
340                                             String JavaDoc publicId,
341                                             String JavaDoc systemId)
342   {
343     return createWrapper(_factory.createDocumentType(qualifiedName,
344                                                      publicId,
345                                                      systemId));
346   }
347
348   public DOMElement createElement(String JavaDoc name)
349   {
350     return createWrapper(_factory.createElement(name));
351   }
352
353   public DOMElement createElement(String JavaDoc name, String JavaDoc namespace)
354   {
355     return createWrapper(_factory.createElement(name, namespace));
356   }
357
358   public DOMEntityReference createEntityReference(String JavaDoc name)
359   {
360     return createWrapper(_factory.createEntityReference(name));
361   }
362
363   public DOMProcessingInstruction createProcessingInstruction(String JavaDoc 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 JavaDoc path)
374     throws IOException JavaDoc, SAXException JavaDoc
375   {
376     _factory.parseXMLDocument(document, is, path);
377   }
378
379   public void parseXMLDocument(Document document, ReadStream is, String JavaDoc path)
380     throws IOException JavaDoc, SAXException JavaDoc
381   {
382     _factory.parseXMLDocument(document, is, path);
383   }
384 }
385
Popular Tags