1 package org
.argeo
.api
.acr
;
3 import java
.util
.Collections
;
4 import java
.util
.Iterator
;
6 import java
.util
.NavigableMap
;
7 import java
.util
.TreeMap
;
9 import javax
.xml
.XMLConstants
;
10 import javax
.xml
.namespace
.NamespaceContext
;
13 * Programmatically defined {@link NamespaceContext}, code contributing
14 * namespaces MUST register here with a single default prefix.
16 public class RuntimeNamespaceContext
implements NamespaceContext
{
17 public final static String XSD_DEFAULT_PREFIX
= "xs";
18 public final static String XSD_INSTANCE_DEFAULT_PREFIX
= "xsi";
20 private NavigableMap
<String
, String
> prefixes
= new TreeMap
<>();
21 private NavigableMap
<String
, String
> namespaces
= new TreeMap
<>();
24 public String
getPrefix(String namespaceURI
) {
25 return NamespaceUtils
.getPrefix((ns
) -> {
26 String prefix
= namespaces
.get(ns
);
28 throw new IllegalStateException("Namespace " + ns
+ " is not registered.");
34 public String
getNamespaceURI(String prefix
) {
35 return NamespaceUtils
.getNamespaceURI((p
) -> {
36 String ns
= prefixes
.get(p
);
38 throw new IllegalStateException("Prefix " + p
+ " is not registered.");
44 public Iterator
<String
> getPrefixes(String namespaceURI
) {
45 return Collections
.singleton(getPrefix(namespaceURI
)).iterator();
52 private final static RuntimeNamespaceContext INSTANCE
= new RuntimeNamespaceContext();
56 register(XMLConstants
.XML_NS_URI
, XMLConstants
.XML_NS_PREFIX
);
57 register(XMLConstants
.XMLNS_ATTRIBUTE_NS_URI
, XMLConstants
.XMLNS_ATTRIBUTE
);
60 register(XMLConstants
.W3C_XML_SCHEMA_NS_URI
, XSD_DEFAULT_PREFIX
);
61 register(XMLConstants
.W3C_XML_SCHEMA_INSTANCE_NS_URI
, XSD_INSTANCE_DEFAULT_PREFIX
);
64 register(ArgeoNamespace
.CR_NAMESPACE_URI
, ArgeoNamespace
.CR_DEFAULT_PREFIX
);
65 register(ArgeoNamespace
.LDAP_NAMESPACE_URI
, ArgeoNamespace
.LDAP_DEFAULT_PREFIX
);
66 register(ArgeoNamespace
.ROLE_NAMESPACE_URI
, ArgeoNamespace
.ROLE_DEFAULT_PREFIX
);
69 public static NamespaceContext
getNamespaceContext() {
73 public static Map
<String
, String
> getPrefixes() {
74 return Collections
.unmodifiableNavigableMap(INSTANCE
.prefixes
);
77 public synchronized static void register(String namespaceURI
, String prefix
) {
78 NavigableMap
<String
, String
> prefixes
= INSTANCE
.prefixes
;
79 NavigableMap
<String
, String
> namespaces
= INSTANCE
.namespaces
;
80 if (prefixes
.containsKey(prefix
)) {
81 String ns
= prefixes
.get(prefix
);
82 if (ns
.equals(namespaceURI
))
83 return; // ignore silently
84 throw new IllegalStateException("Prefix " + prefix
+ " is already registered with namespace URI " + ns
);
86 if (namespaces
.containsKey(namespaceURI
)) {
87 String p
= namespaces
.get(namespaceURI
);
89 return; // ignore silently
90 throw new IllegalStateException("Namespace " + namespaceURI
+ " is already registered with prefix " + p
);
92 prefixes
.put(prefix
, namespaceURI
);
93 namespaces
.put(namespaceURI
, prefix
);