package nota.oxygen.common; import java.util.*; import javax.xml.namespace.NamespaceContext; /** * {@link NamespaceContext} based on a {@link Map}, that the user manually adds prefix/name-space pairs to * @author OHA */ public class ManualNamespaceContext implements NamespaceContext { Map<String,String> _prefixNSMap = new HashMap<String,String>(); /** * Creates a {@link ManualNamespaceContext} initialized with no prefix/name-space pair */ public ManualNamespaceContext() { } /** * Creates a {@link ManualNamespaceContext} initialized with one prefix/name-space pair * @param prefix The prefix part of the pair * @param ns The name-space part of the pair */ public ManualNamespaceContext(String prefix, String ns) { mapPrefix(prefix, ns); } /** * Creates a {@link ManualNamespaceContext} initialized with prefix/name-space pairs from a given {@link Map} * @param map The given {@link Map}, mapping prefixes to name-spaces */ public ManualNamespaceContext(Map<String,String> map) { Iterator<String> itr = map.keySet().iterator(); while (itr.hasNext()) { String prefix = itr.next(); mapPrefix(prefix, map.get(prefix)); } } @Override public String getNamespaceURI(String prefix) { if (_prefixNSMap.containsKey(prefix)) return _prefixNSMap.get(prefix); return null; } @Override public String getPrefix(String namespaceURI) { Iterator<String> prefixes = getPrefixes(namespaceURI); if (prefixes.hasNext()) return prefixes.next(); return null; } @Override public Iterator<String> getPrefixes(String namespaceURI) { Iterator<String> prefixes = _prefixNSMap.keySet().iterator(); Set<String> res = new HashSet<String>(); while (prefixes.hasNext()){ String p = prefixes.next(); if (_prefixNSMap.get(p)==namespaceURI) res.add(p); } return res.iterator(); } /** * Maps a given prefix to a given name-space * @param prefix The prefix * @param namespace The name-space */ public void mapPrefix(String prefix, String namespace) { if (namespace==null) { if (_prefixNSMap.containsKey(prefix)) _prefixNSMap.remove(prefix); } else { _prefixNSMap.put(prefix, namespace); } } }