1 package org
.argeo
.api
.acr
;
3 import java
.util
.Collections
;
4 import java
.util
.Iterator
;
5 import java
.util
.Objects
;
7 import java
.util
.function
.Function
;
9 import javax
.xml
.XMLConstants
;
10 import javax
.xml
.namespace
.NamespaceContext
;
11 import javax
.xml
.namespace
.QName
;
13 public class NamespaceUtils
{
15 public static ContentName
parsePrefixedName(NamespaceContext nameSpaceContext
, String nameWithPrefix
) {
16 Objects
.requireNonNull(nameWithPrefix
, "Name cannot be null");
17 if (nameWithPrefix
.charAt(0) == '{') {
18 return new ContentName(QName
.valueOf(nameWithPrefix
), nameSpaceContext
);
20 int index
= nameWithPrefix
.indexOf(':');
22 return new ContentName(nameWithPrefix
);
24 String prefix
= nameWithPrefix
.substring(0, index
);
25 // TODO deal with empty name?
26 String localName
= nameWithPrefix
.substring(index
+ 1);
27 String namespaceURI
= nameSpaceContext
.getNamespaceURI(prefix
);
28 if (XMLConstants
.NULL_NS_URI
.equals(namespaceURI
))
29 throw new IllegalStateException("Prefix " + prefix
+ " is unbound.");
30 return new ContentName(namespaceURI
, localName
, prefix
);
33 public static String
toPrefixedName(NamespaceContext nameSpaceContext
, QName name
) {
34 if (XMLConstants
.NULL_NS_URI
.equals(name
.getNamespaceURI()))
35 return name
.getLocalPart();
36 String prefix
= nameSpaceContext
.getPrefix(name
.getNamespaceURI());
38 throw new IllegalStateException("Namespace " + name
.getNamespaceURI() + " is unbound.");
39 return prefix
+ ":" + name
.getLocalPart();
43 private NamespaceUtils() {
47 * DEFAULT NAMESPACE CONTEXT OPERATIONS as specified in NamespaceContext
49 public static String
getStandardPrefix(String namespaceURI
) {
50 if (namespaceURI
== null)
51 throw new IllegalArgumentException("Namespace URI cannot be null");
52 if (XMLConstants
.XML_NS_URI
.equals(namespaceURI
))
53 return XMLConstants
.XML_NS_PREFIX
;
54 else if (XMLConstants
.XMLNS_ATTRIBUTE_NS_URI
.equals(namespaceURI
))
55 return XMLConstants
.XMLNS_ATTRIBUTE
;
59 public static Iterator
<String
> getStandardPrefixes(String namespaceURI
) {
60 String prefix
= getStandardPrefix(namespaceURI
);
63 return Collections
.singleton(prefix
).iterator();
66 public static String
getStandardNamespaceURI(String prefix
) {
68 throw new IllegalArgumentException("Prefix cannot be null");
69 if (XMLConstants
.XML_NS_PREFIX
.equals(prefix
))
70 return XMLConstants
.XML_NS_URI
;
71 else if (XMLConstants
.XMLNS_ATTRIBUTE
.equals(prefix
))
72 return XMLConstants
.XMLNS_ATTRIBUTE_NS_URI
;
76 public static String
getNamespaceURI(Function
<String
, String
> mapping
, String prefix
) {
77 String namespaceURI
= NamespaceUtils
.getStandardNamespaceURI(prefix
);
78 if (namespaceURI
!= null)
80 if (XMLConstants
.DEFAULT_NS_PREFIX
.equals(prefix
))
81 return XMLConstants
.NULL_NS_URI
;
82 namespaceURI
= mapping
.apply(prefix
);
83 if (namespaceURI
!= null)
85 return XMLConstants
.NULL_NS_URI
;
88 public static String
getPrefix(Function
<String
, String
> mapping
, String namespaceURI
) {
89 String prefix
= NamespaceUtils
.getStandardPrefix(namespaceURI
);
92 if (XMLConstants
.NULL_NS_URI
.equals(namespaceURI
))
93 return XMLConstants
.DEFAULT_NS_PREFIX
;
94 return mapping
.apply(namespaceURI
);
97 public static Iterator
<String
> getPrefixes(Function
<String
, Set
<String
>> mapping
, String namespaceURI
) {
98 Iterator
<String
> standard
= NamespaceUtils
.getStandardPrefixes(namespaceURI
);
101 if (XMLConstants
.NULL_NS_URI
.equals(namespaceURI
))
102 return Collections
.singleton(XMLConstants
.DEFAULT_NS_PREFIX
).iterator();
103 Set
<String
> prefixes
= mapping
.apply(namespaceURI
);
104 assert prefixes
!= null;
105 return prefixes
.iterator();