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