1 25 package org.apache.taglibs.standard.tag.common.xml; 26 27 import java.util.Arrays ; 28 import java.util.ArrayList ; 29 import java.util.HashMap ; 30 import java.util.Iterator ; 31 32 import javax.xml.namespace.NamespaceContext ; 33 import javax.xml.XMLConstants ; 34 35 38 public class JSTLXPathNamespaceContext implements NamespaceContext { 39 40 43 46 public JSTLXPathNamespaceContext() { 47 namespaces = new HashMap (); 48 } 49 50 public JSTLXPathNamespaceContext(HashMap nses) { 51 namespaces = nses; 52 } 53 54 58 HashMap namespaces; 59 60 69 public String getNamespaceURI(String prefix) 70 throws IllegalArgumentException { 71 if (prefix == null) { 73 throw new IllegalArgumentException ("Cannot get Namespace URI for null prefix"); 74 } 75 76 if (prefix.equals(XMLConstants.XML_NS_PREFIX)) { 77 return XMLConstants.XML_NS_URI; 78 } 79 if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) { 80 return XMLConstants.XMLNS_ATTRIBUTE_NS_URI; 81 } 82 83 String namespaceURI = (String )namespaces.get(prefix); 84 if (namespaceURI != null) { 86 return namespaceURI; 87 } 88 89 return XMLConstants.NULL_NS_URI; 90 } 91 92 101 public String getPrefix(String namespaceURI) { 102 if (namespaceURI == null) { 104 throw new IllegalArgumentException ("Cannot get prefix for null NamespaceURI"); 105 } 106 107 if (namespaceURI.equals(XMLConstants.XML_NS_URI)) { 108 return XMLConstants.XML_NS_PREFIX; 109 } 110 if (namespaceURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) { 111 return XMLConstants.XMLNS_ATTRIBUTE; 112 } 113 114 Iterator iter = namespaces.keySet().iterator(); 115 while (iter.hasNext()) { 116 String key = (String )iter.next(); 117 String value = (String )namespaces.get(key); 118 if (value.equals(namespaceURI)) { 119 return value; 121 } 122 } 123 124 return null; 126 } 127 128 137 public Iterator getPrefixes(String namespaceURI) { 138 if (namespaceURI == null) { 140 throw new IllegalArgumentException ("Cannot get prefix for null NamespaceURI"); 141 } 142 143 if (namespaceURI.equals(XMLConstants.XML_NS_URI)) { 144 return Arrays.asList(new String [] {XMLConstants.XML_NS_PREFIX}).iterator(); 145 } 146 if (namespaceURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) { 147 return Arrays.asList(new String [] {XMLConstants.XMLNS_ATTRIBUTE}).iterator(); 148 } 149 150 ArrayList prefixList = new ArrayList (); 151 Iterator iter = namespaces.keySet().iterator(); 152 while (iter.hasNext()) { 153 String key = (String )iter.next(); 154 String value = (String )namespaces.get(key); 155 if (value.equals(namespaceURI)) { 156 prefixList.add(key); 157 } 158 } 159 160 return prefixList.iterator(); 162 } 163 164 167 protected void addNamespace(String prefix, String uri ) { 168 namespaces.put(prefix, uri ); 169 } 170 171 174 private static void p(String s) { 175 System.out.println("[JSTLXPathNameContext] " + s); 176 } 177 } 178 | Popular Tags |