1 9 10 package org.ozoneDB.xml.dom4j.o3impl; 11 12 import org.dom4j.*; 13 import org.dom4j.rule.Pattern; 14 import org.dom4j.xpath.DefaultXPath; 15 import org.dom4j.xpath.XPathPattern; 16 import org.jaxen.VariableContext; 17 import org.ozoneDB.OzoneInterface; 18 import org.ozoneDB.OzoneObject; 19 import org.ozoneDB.UnexpectedException; 20 import org.ozoneDB.xml.dom4j.OzoneDocument; 21 import org.ozoneDB.xml.dom4j.OzoneDocumentFactory; 22 23 import java.io.IOException ; 24 import java.io.ObjectInputStream ; 25 import java.util.HashMap ; 26 import java.util.List ; 27 import java.util.Map ; 28 29 40 public class OzoneDocumentFactoryImpl extends OzoneObject implements OzoneDocumentFactory { 41 42 final static long serialVersionUID = 1L; 43 44 protected transient O3QNameCache qnameCache; 45 47 protected transient O3NamespaceCache namespaceCache; 48 50 51 private Map xpathNamespaceURIs; 52 53 54 private static transient Map factories = new HashMap (); 55 56 public static synchronized OzoneDocumentFactory getInstance(OzoneInterface db) { 57 try { 58 OzoneDocumentFactory factory = (OzoneDocumentFactory)factories.get(db); 59 if ( factory == null) { 60 System.out.println("looking for OzoneDocumentFactory instance (" + OBJECT_NAME + ") for database " + db); 61 factory = (OzoneDocumentFactory) db.objectForName(OBJECT_NAME); 62 if (factory == null) { 63 System.out.println("creating new OzoneDocumentFactory"); 64 factory = OzoneDocumentFactoryImpl.create(db); 65 } 66 factories.put(db, factory); 67 } 68 System.out.println("returning factory " + factory); 69 return factory; 70 } catch (Exception e) { 71 throw new UnexpectedException("failed to get OzoneDocumentFactory instance!", e); 72 } 73 } 74 75 public static OzoneDocumentFactory create(OzoneInterface db) { 76 return (OzoneDocumentFactory) db.createObject(OzoneDocumentFactoryImpl.class, 77 OzoneInterface.Public, 78 OBJECT_NAME); 79 } 80 81 public OzoneDocumentFactoryImpl() { 82 } 83 84 public void onCreate() { 85 namespaceCache = new O3NamespaceCache(database()); 86 qnameCache = new org.ozoneDB.xml.dom4j.o3impl.O3QNameCache(this, database()); 87 } 88 89 public void onActivate() { 90 factories = new HashMap (); 94 namespaceCache = new O3NamespaceCache(database()); 95 qnameCache = new O3QNameCache(this, database()); 96 } 97 98 public void onPassivate() { 99 } 101 102 103 105 public Document createDocument() { 106 OzoneDocument answer = (OzoneDocument) database() 107 .createObject(OzoneDocumentImpl.class); 108 return answer; 109 } 110 111 public Document createDocument(Element rootElement) { 112 Document answer = createDocument(); 113 answer.setRootElement(rootElement); 114 return answer; 115 } 116 117 118 public Document createDocument(String name) { 119 OzoneDocument answer = OzoneDocumentImpl.create(database(), name); 120 return answer; 121 } 122 123 public Document createDocument(Element rootElement, String name) { 124 Document answer = createDocument(name); 125 answer.setRootElement(rootElement); 126 return answer; 127 } 128 129 public DocumentType createDocType(String name, String publicId, String systemId) { 130 return OzoneDocumentTypeImpl.create(database(), name, publicId, systemId); 131 } 132 133 public Element createElement(QName qname) { 134 return OzoneElementImpl.create(database(), qname); 135 } 136 137 public Element createElement(String name) { 138 return OzoneElementImpl.create(database(), name); 140 } 141 142 public Element createElement(String qualifiedName, String namespaceURI) { 143 return createElement(createQName(qualifiedName, namespaceURI)); 144 } 145 146 public Attribute createAttribute(Element owner, QName qname, String value) { 147 Attribute att = OzoneAttributeImpl.create(database(), owner, qname, value); 149 return att; 151 } 152 153 public Attribute createAttribute(Element owner, String name, String value) { 154 return createAttribute(owner, createQName(name), value); 157 } 159 160 public CDATA createCDATA(String text) { 161 return OzoneCDATAImpl.create(database(), text); 162 } 163 164 public Comment createComment(String text) { 165 return OzoneCommentImpl.create(database(), text); 166 } 167 168 public Text createText(String text) { 169 if (text == null) { 170 throw new IllegalArgumentException ("Adding text to an XML document must not be null"); 171 } 172 return OzoneTextImpl.create(database(), text); 173 } 174 175 176 public Entity createEntity(String name, String text) { 177 return OzoneEntityImpl.create(database(), name, text); 178 } 179 180 public Namespace createNamespace(String prefix, String uri) { 181 return namespaceCache.get(prefix, uri); 182 } 183 184 public Namespace getNamespace(String uri) { 185 return namespaceCache.get(uri); 186 } 187 188 public Namespace getXmlNameSpace() { 189 return namespaceCache.getXmlNamespace(); 190 } 191 192 public Namespace getNoNamespace() { 193 return namespaceCache.getNoNamespace(); 194 } 195 196 public ProcessingInstruction createProcessingInstruction(String target, String data) { 197 return OzoneProcessingInstructionImpl.create(database(), target, data); 198 } 199 200 public ProcessingInstruction createProcessingInstruction(String target, Map data) { 201 return OzoneProcessingInstructionImpl.create(database(), target, data); 202 } 203 204 public QName createQName(String localName, Namespace namespace) { 206 return qnameCache.get(localName, namespace); 207 } 208 209 public QName createQName(String localName) { 210 return qnameCache.get(localName); 211 } 212 213 public QName createQName(String name, String prefix, String uri) { 214 return qnameCache.get(name, namespaceCache.get(prefix, uri)); 215 } 216 217 public QName createQName(String qualifiedName, String uri) { 218 return qnameCache.get(qualifiedName, uri); 219 } 220 221 228 public XPath createXPath(String xpathExpression) throws InvalidXPathException { 229 XPath xpath = new DefaultXPath(xpathExpression); 237 if (xpathNamespaceURIs != null) { 238 xpath.setNamespaceURIs(xpathNamespaceURIs); 239 } 240 return xpath; 241 } 242 243 251 public XPath createXPath(String xpathExpression, VariableContext variableContext) { 252 XPath xpath = createXPath(xpathExpression); 253 xpath.setVariableContext(variableContext); 254 return xpath; 255 } 256 257 267 public NodeFilter createXPathFilter(String xpathFilterExpression, VariableContext variableContext) { 268 XPath answer = createXPath(xpathFilterExpression); 269 answer.setVariableContext(variableContext); 271 return answer; 272 } 273 274 283 public NodeFilter createXPathFilter(String xpathFilterExpression) { 284 return createXPath(xpathFilterExpression); 285 } 287 288 296 public Pattern createPattern(String xpathPattern) { 297 return new XPathPattern(xpathPattern); 301 } 302 303 304 307 310 public List getQNames() { 311 return qnameCache.getQNames(); 312 } 313 314 319 public Map getXPathNamespaceURIs() { 320 return xpathNamespaceURIs; 321 } 322 323 328 public void setXPathNamespaceURIs(Map xpathNamespaceURIs) { 329 this.xpathNamespaceURIs = xpathNamespaceURIs; 330 } 331 332 public O3NamespaceCache getNamespaceCache() { 335 return namespaceCache; 336 } 337 338 public void setNamespaceCache(O3NamespaceCache namespaceCache) { 339 this.namespaceCache = namespaceCache; 340 } 341 342 345 protected QName intern(QName qname) { 346 return qnameCache.intern(qname); 347 } 348 349 private void readObject(ObjectInputStream in) throws IOException , ClassNotFoundException { 350 in.defaultReadObject(); 351 } 352 353 } 354 355 356 400 | Popular Tags |