]> git.argeo.org Git - lgpl/argeo-commons.git/blob - gcr/ContentNameSupplier.java
Prepare next development cycle
[lgpl/argeo-commons.git] / gcr / ContentNameSupplier.java
1 package org.argeo.api.gcr;
2
3 import java.util.Collections;
4 import java.util.Iterator;
5 import java.util.function.Supplier;
6
7 import javax.xml.XMLConstants;
8 import javax.xml.namespace.NamespaceContext;
9
10 public interface ContentNameSupplier extends Supplier<ContentName>, NamespaceContext {
11 String name();
12
13 @Override
14 default ContentName get() {
15 return toContentName();
16 }
17
18 default ContentName toContentName() {
19 CompositeString cs = new CompositeString(name());
20 String camlName = cs.toStringCaml(false);
21 return new ContentName(getNamespaceURI(), camlName, this);
22 }
23
24 default String getNamespaceURI() {
25 return XMLConstants.NULL_NS_URI;
26 }
27
28 default String getDefaultPrefix() {
29 return XMLConstants.DEFAULT_NS_PREFIX;
30 }
31
32 // static ContentName toContentName(String namespaceURI, String localName, String prefix) {
33 // CompositeString cs = new CompositeString(localName);
34 // String camlName = cs.toStringCaml(false);
35 // return new ContentName(namespaceURI, camlName, this);
36 // }
37
38 /*
39 * NAMESPACE CONTEXT
40 */
41
42 @Override
43 default String getNamespaceURI(String prefix) {
44 String namespaceURI = getStandardNamespaceURI(prefix);
45 if (namespaceURI != null)
46 return namespaceURI;
47 if (prefix.equals(getDefaultPrefix()))
48 return getNamespaceURI();
49 return XMLConstants.NULL_NS_URI;
50 }
51
52 @Override
53 default String getPrefix(String namespaceURI) {
54 String prefix = getStandardPrefix(namespaceURI);
55 if (prefix != null)
56 return prefix;
57 if (namespaceURI.equals(getNamespaceURI()))
58 return getDefaultPrefix();
59 return null;
60 }
61
62 @Override
63 default Iterator<String> getPrefixes(String namespaceURI) {
64 Iterator<String> it = getStandardPrefixes(namespaceURI);
65 if (it != null)
66 return it;
67 if (namespaceURI.equals(getNamespaceURI()))
68 return Collections.singleton(getDefaultPrefix()).iterator();
69 return Collections.emptyIterator();
70 }
71
72 /*
73 * DEFAULT NAMESPACE CONTEXT OPERATIONS as specified in NamespaceContext
74 */
75 static String getStandardPrefix(String namespaceURI) {
76 if (namespaceURI == null)
77 throw new IllegalArgumentException("Namespace URI cannot be null");
78 if (XMLConstants.XML_NS_URI.equals(namespaceURI))
79 return XMLConstants.XML_NS_PREFIX;
80 else if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI))
81 return XMLConstants.XMLNS_ATTRIBUTE;
82 return null;
83 }
84
85 static Iterator<String> getStandardPrefixes(String namespaceURI) {
86 String prefix = ContentNameSupplier.getStandardPrefix(namespaceURI);
87 if (prefix == null)
88 return null;
89 return Collections.singleton(prefix).iterator();
90 }
91
92 static String getStandardNamespaceURI(String prefix) {
93 if (prefix == null)
94 throw new IllegalArgumentException("Prefix cannot be null");
95 if (XMLConstants.XML_NS_PREFIX.equals(prefix))
96 return XMLConstants.XML_NS_URI;
97 else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
98 return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
99 return null;
100 }
101
102 }