X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api%2Fsrc%2Forg%2Fargeo%2Fapi%2Fgcr%2FContentNameSupplier.java;fp=org.argeo.api%2Fsrc%2Forg%2Fargeo%2Fapi%2Fgcr%2FContentNameSupplier.java;h=b6d802049cf85fe72882c2107d441c73965c10b2;hb=e5a22cdc7d0f4918f2740c626e1ab6384bd5ee44;hp=0000000000000000000000000000000000000000;hpb=51efb630db7314b67654a03d1bd983b45aa2f1ed;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api/src/org/argeo/api/gcr/ContentNameSupplier.java b/org.argeo.api/src/org/argeo/api/gcr/ContentNameSupplier.java new file mode 100644 index 000000000..b6d802049 --- /dev/null +++ b/org.argeo.api/src/org/argeo/api/gcr/ContentNameSupplier.java @@ -0,0 +1,102 @@ +package org.argeo.api.gcr; + +import java.util.Collections; +import java.util.Iterator; +import java.util.function.Supplier; + +import javax.xml.XMLConstants; +import javax.xml.namespace.NamespaceContext; + +public interface ContentNameSupplier extends Supplier, NamespaceContext { + String name(); + + @Override + default ContentName get() { + return toContentName(); + } + + default ContentName toContentName() { + CompositeString cs = new CompositeString(name()); + String camlName = cs.toStringCaml(false); + return new ContentName(getNamespaceURI(), camlName, this); + } + + default String getNamespaceURI() { + return XMLConstants.NULL_NS_URI; + } + + default String getDefaultPrefix() { + return XMLConstants.DEFAULT_NS_PREFIX; + } + +// static ContentName toContentName(String namespaceURI, String localName, String prefix) { +// CompositeString cs = new CompositeString(localName); +// String camlName = cs.toStringCaml(false); +// return new ContentName(namespaceURI, camlName, this); +// } + + /* + * NAMESPACE CONTEXT + */ + + @Override + default String getNamespaceURI(String prefix) { + String namespaceURI = getStandardNamespaceURI(prefix); + if (namespaceURI != null) + return namespaceURI; + if (prefix.equals(getDefaultPrefix())) + return getNamespaceURI(); + return XMLConstants.NULL_NS_URI; + } + + @Override + default String getPrefix(String namespaceURI) { + String prefix = getStandardPrefix(namespaceURI); + if (prefix != null) + return prefix; + if (namespaceURI.equals(getNamespaceURI())) + return getDefaultPrefix(); + return null; + } + + @Override + default Iterator getPrefixes(String namespaceURI) { + Iterator it = getStandardPrefixes(namespaceURI); + if (it != null) + return it; + if (namespaceURI.equals(getNamespaceURI())) + return Collections.singleton(getDefaultPrefix()).iterator(); + return Collections.emptyIterator(); + } + + /* + * DEFAULT NAMESPACE CONTEXT OPERATIONS as specified in NamespaceContext + */ + static String getStandardPrefix(String namespaceURI) { + if (namespaceURI == null) + throw new IllegalArgumentException("Namespace URI cannot be null"); + if (XMLConstants.XML_NS_URI.equals(namespaceURI)) + return XMLConstants.XML_NS_PREFIX; + else if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) + return XMLConstants.XMLNS_ATTRIBUTE; + return null; + } + + static Iterator getStandardPrefixes(String namespaceURI) { + String prefix = ContentNameSupplier.getStandardPrefix(namespaceURI); + if (prefix == null) + return null; + return Collections.singleton(prefix).iterator(); + } + + static String getStandardNamespaceURI(String prefix) { + if (prefix == null) + throw new IllegalArgumentException("Prefix cannot be null"); + if (XMLConstants.XML_NS_PREFIX.equals(prefix)) + return XMLConstants.XML_NS_URI; + else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix)) + return XMLConstants.XMLNS_ATTRIBUTE_NS_URI; + return null; + } + +}