X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api%2Fsrc%2Forg%2Fargeo%2Fapi%2Fgcr%2FContentSession.java;h=6c80189b24aebecafb4211d6f2a30a9bad05e8ba;hb=e5a22cdc7d0f4918f2740c626e1ab6384bd5ee44;hp=d779093be863c160914e32a22d5fcca415875431;hpb=51efb630db7314b67654a03d1bd983b45aa2f1ed;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api/src/org/argeo/api/gcr/ContentSession.java b/org.argeo.api/src/org/argeo/api/gcr/ContentSession.java index d779093be..6c80189b2 100644 --- a/org.argeo.api/src/org/argeo/api/gcr/ContentSession.java +++ b/org.argeo.api/src/org/argeo/api/gcr/ContentSession.java @@ -1,13 +1,49 @@ package org.argeo.api.gcr; import java.util.Locale; +import java.util.Objects; import javax.security.auth.Subject; +import javax.xml.XMLConstants; +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; -public interface ContentSession { +public interface ContentSession extends NamespaceContext { Subject getSubject(); Locale getLocale(); Content get(String path); + + /* + * NAMESPACE CONTEXT + */ + + default ContentName parsePrefixedName(String nameWithPrefix) { + Objects.requireNonNull(nameWithPrefix, "Name cannot be null"); + if (nameWithPrefix.charAt(0) == '{') { + return new ContentName(QName.valueOf(nameWithPrefix), this); + } + int index = nameWithPrefix.indexOf(':'); + if (index < 0) { + return new ContentName(nameWithPrefix); + } + String prefix = nameWithPrefix.substring(0, index); + // TODO deal with empty name? + String localName = nameWithPrefix.substring(index + 1); + String namespaceURI = getNamespaceURI(prefix); + if (XMLConstants.NULL_NS_URI.equals(namespaceURI)) + throw new IllegalStateException("Prefix " + prefix + " is unbound."); + return new ContentName(namespaceURI, localName, prefix); + } + + default String toPrefixedName(QName name) { + if (XMLConstants.NULL_NS_URI.equals(name.getNamespaceURI())) + return name.getLocalPart(); + String prefix = getPrefix(name.getNamespaceURI()); + if (prefix == null) + throw new IllegalStateException("Namespace " + name.getNamespaceURI() + " is unbound."); + return prefix + ":" + name.getLocalPart(); + } + }