diff artifacts/src/main/java/de/intevation/artifacts/ArtifactNamespaceContext.java @ 298:a5e6d1923c95

Made namespace resolution more compatible. artifacts/trunk@2383 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 21 Jul 2011 08:32:34 +0000
parents 933bbc9fc11f
children b0a949d3fe09
line wrap: on
line diff
--- a/artifacts/src/main/java/de/intevation/artifacts/ArtifactNamespaceContext.java	Wed Jul 20 12:30:57 2011 +0000
+++ b/artifacts/src/main/java/de/intevation/artifacts/ArtifactNamespaceContext.java	Thu Jul 21 08:32:34 2011 +0000
@@ -9,6 +9,9 @@
 package de.intevation.artifacts;
 
 import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.ArrayList;
 
 import javax.xml.XMLConstants;
 
@@ -39,10 +42,25 @@
     public static final ArtifactNamespaceContext INSTANCE =
         new ArtifactNamespaceContext();
 
+    protected Map<String, String> map;
+
     /**
      * The default constructor.
      */
     public ArtifactNamespaceContext() {
+        map = new HashMap<String, String>();
+        map.put(
+            XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI);
+        map.put(
+            XMLConstants.DEFAULT_NS_PREFIX, XMLConstants.DEFAULT_NS_PREFIX);
+        map.put(
+            XMLConstants.XMLNS_ATTRIBUTE, XMLConstants.XMLNS_ATTRIBUTE_NS_URI);
+        map.put(
+            NAMESPACE_PREFIX, NAMESPACE_URI);
+    }
+
+    public void add(String prefix, String uri) {
+        map.put(prefix, uri);
     }
 
     /**
@@ -53,38 +71,45 @@
     public String getNamespaceURI(String prefix) {
 
         if (prefix == null) {
-            throw new NullPointerException("Null prefix");
+            throw new IllegalArgumentException("Null prefix");
         }
 
-        if (NAMESPACE_PREFIX.equals(prefix)) {
-            return NAMESPACE_URI;
-        }
+        String namespace = map.get(prefix);
 
-        if ("xml".equals(prefix)) {
-            return XMLConstants.XML_NS_URI;
-        }
-
-        return XMLConstants.NULL_NS_URI;
+        return namespace != null ? namespace : XMLConstants.NULL_NS_URI;
     }
 
     /**
      * @see javax.xml.namespace.NamespaceContext#getPrefix(String)
      * @param uri The URI
-     * @return nothing.
-     * @throws java.lang.UnsupportedOperationException
      */
     public String getPrefix(String uri) {
-        throw new UnsupportedOperationException();
+        
+        if (uri == null) {
+            throw new IllegalArgumentException("Null uri");
+        }
+
+        for (Map.Entry<String, String> entry: map.entrySet()) {
+            if (entry.getValue().equals(uri)) {
+                return entry.getKey();
+            }
+        }
+
+        return XMLConstants.DEFAULT_NS_PREFIX;
     }
 
     /**
      * @see javax.xml.namespace.NamespaceContext#getPrefixes(java.lang.String)
      * @param uri The URI
-     * @return nothing
-     * @throws java.lang.UnsupportedOperationException
      */
     public Iterator getPrefixes(String uri) {
-        throw new UnsupportedOperationException();
+        ArrayList<String> results = new ArrayList<String>();
+        for (Map.Entry<String, String> entry: map.entrySet()) {
+            if (entry.getValue().equals(uri)) {
+                results.add(entry.getKey());
+            }
+        }
+        return results.iterator();
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org