1 9 10 package org.ozoneDB.xml.dom4j.o3impl; 11 12 import org.dom4j.DocumentFactory; 13 import org.dom4j.Namespace; 14 import org.dom4j.NodeFactory; 15 import org.dom4j.QName; 16 17 import java.util.*; 18 19 25 public class QNameCache { 26 27 28 protected Map noNamespaceCache = Collections.synchronizedMap(new HashMap()); 29 30 33 protected Map namespaceCache = Collections.synchronizedMap(new HashMap()); 34 35 38 private NodeFactory nodeFactory; 39 40 41 public QNameCache() { 42 } 43 44 47 public QNameCache(DocumentFactory documentFactory) { 48 this.nodeFactory = documentFactory; 49 } 50 51 public QNameCache(NodeFactory nodeFactory) { 52 this.nodeFactory = nodeFactory; 53 } 54 55 57 public List getQNames() { 58 List answer = new ArrayList(); 59 answer.addAll(noNamespaceCache.values()); 60 for (Iterator iter = namespaceCache.values().iterator(); iter.hasNext();) { 61 Map map = (Map) iter.next(); 62 answer.addAll(map.values()); 63 } 64 return answer; 65 } 66 67 69 public QName get(String name) { 70 QName answer = null; 71 if (name != null) { 72 answer = (QName) noNamespaceCache.get(name); 73 } else { 74 name = ""; 75 } 76 if (answer == null) { 77 answer = createQName(name); 78 answer.setNodeFactory(nodeFactory); 79 noNamespaceCache.put(name, answer); 80 } 81 return answer; 82 } 83 84 86 public QName get(String name, Namespace namespace) { 87 Map cache = getNamespaceCache(namespace); 88 QName answer = null; 89 if (name != null) { 90 answer = (QName) cache.get(name); 91 } else { 92 name = ""; 93 } 94 if (answer == null) { 95 answer = createQName(name, namespace); 96 answer.setNodeFactory(nodeFactory); 97 cache.put(name, answer); 98 } 99 return answer; 100 } 101 102 103 105 public QName get(String localName, Namespace namespace, String qualifiedName) { 106 Map cache = getNamespaceCache(namespace); 107 QName answer = null; 108 if (localName != null) { 109 answer = (QName) cache.get(localName); 110 } else { 111 localName = ""; 112 } 113 114 if (answer == null) { 115 answer = createQName(localName, namespace, qualifiedName); 116 answer.setNodeFactory(nodeFactory); 117 cache.put(localName, answer); 118 } 119 return answer; 120 } 121 122 123 public QName get(String qualifiedName, String uri) { 124 int index = qualifiedName.indexOf(':'); 125 if (index < 0) { 126 return get(qualifiedName, nodeFactory.getNamespace(uri)); 127 } else { 128 String name = qualifiedName.substring(index + 1); 129 String prefix = qualifiedName.substring(0, index); 130 return get(name, nodeFactory.createNamespace(prefix, uri)); 131 } 132 } 133 134 135 138 public QName intern(QName qname) { 139 return get(qname.getName(), qname.getNamespace(), qname.getQualifiedName()); 140 } 141 142 145 protected Map getNamespaceCache(Namespace namespace) { 146 if (namespace.equals(nodeFactory.getNoNamespace())) { 147 return noNamespaceCache; 148 } 149 Map answer = null; 150 if (namespace != null) { 151 answer = (Map) namespaceCache.get(namespace); 152 } 153 if (answer == null) { 154 answer = createMap(); 155 namespaceCache.put(namespace, answer); 156 } 157 return answer; 158 } 159 160 163 protected Map createMap() { 164 return Collections.synchronizedMap(new HashMap()); 165 } 166 167 170 protected QName createQName(String name) { 171 return new DefaultQName(name, nodeFactory); 172 } 173 174 177 protected QName createQName(String name, Namespace namespace) { 178 return new DefaultQName(name, namespace, nodeFactory); 179 } 180 181 184 protected QName createQName(String name, Namespace namespace, String qualifiedName) { 185 return new DefaultQName(name, namespace, qualifiedName, nodeFactory); 186 } 187 } 188 189 190 234 | Popular Tags |