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
.namespace
.NamespaceContext
;
12 * Programmatically defined {@link NamespaceContext}, code contributing
13 * namespaces MUST register here with a single default prefix.
15 public class RuntimeNamespaceContext
implements NamespaceContext
{
16 private NavigableMap
<String
, String
> prefixes
= new TreeMap
<>();
17 private NavigableMap
<String
, String
> namespaces
= new TreeMap
<>();
20 public String
getPrefix(String namespaceURI
) {
21 return NamespaceUtils
.getPrefix((ns
) -> {
22 String prefix
= namespaces
.get(ns
);
24 throw new IllegalStateException("Namespace " + ns
+ " is not registered.");
30 public String
getNamespaceURI(String prefix
) {
31 return NamespaceUtils
.getNamespaceURI((p
) -> {
32 String ns
= prefixes
.get(p
);
34 throw new IllegalStateException("Prefix " + p
+ " is not registered.");
40 public Iterator
<String
> getPrefixes(String namespaceURI
) {
41 return Collections
.singleton(getPrefix(namespaceURI
)).iterator();
48 private final static RuntimeNamespaceContext INSTANCE
= new RuntimeNamespaceContext();
51 register(CrName
.CR_NAMESPACE_URI
, CrName
.CR_DEFAULT_PREFIX
);
52 register(CrName
.LDAP_NAMESPACE_URI
, CrName
.LDAP_DEFAULT_PREFIX
);
53 register(CrName
.ROLE_NAMESPACE_URI
, CrName
.ROLE_DEFAULT_PREFIX
);
56 public static NamespaceContext
getNamespaceContext() {
60 public static Map
<String
, String
> getPrefixes() {
61 return Collections
.unmodifiableNavigableMap(INSTANCE
.prefixes
);
64 public synchronized static void register(String namespaceURI
, String prefix
) {
65 NavigableMap
<String
, String
> prefixes
= INSTANCE
.prefixes
;
66 NavigableMap
<String
, String
> namespaces
= INSTANCE
.namespaces
;
67 if (prefixes
.containsKey(prefix
)) {
68 String ns
= prefixes
.get(prefix
);
69 if (ns
.equals(namespaceURI
))
70 return; // ignore silently
71 throw new IllegalStateException("Prefix " + prefix
+ " is already registered with namespace URI " + ns
);
73 if (namespaces
.containsKey(namespaceURI
)) {
74 String p
= namespaces
.get(namespaceURI
);
76 return; // ignore silently
77 throw new IllegalStateException("Namespace " + namespaceURI
+ " is already registered with prefix " + p
);
79 prefixes
.put(prefix
, namespaceURI
);
80 namespaces
.put(namespaceURI
, prefix
);