package org.argeo.api.acr.spi; import java.util.Collections; import java.util.Iterator; import java.util.Set; import javax.xml.XMLConstants; import javax.xml.namespace.NamespaceContext; import org.argeo.api.acr.ContentNameSupplier; import org.argeo.api.acr.ContentSession; public interface ProvidedSession extends ContentSession, NamespaceContext { ProvidedRepository getRepository(); /* * NAMESPACE CONTEXT */ /** @return the bound namespace or null if not found */ String findNamespace(String prefix); // TODO find the default prefix? Set findPrefixes(String namespaceURI); /** To be overridden for optimisation, as it will be called a lot */ default String findPrefix(String namespaceURI) { Set prefixes = findPrefixes(namespaceURI); if (prefixes.isEmpty()) return null; return prefixes.iterator().next(); } @Override default String getNamespaceURI(String prefix) { String namespaceURI = ContentNameSupplier.getStandardNamespaceURI(prefix); if (namespaceURI != null) return namespaceURI; if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) return XMLConstants.NULL_NS_URI; namespaceURI = findNamespace(prefix); if (namespaceURI != null) return namespaceURI; return XMLConstants.NULL_NS_URI; } @Override default String getPrefix(String namespaceURI) { String prefix = ContentNameSupplier.getStandardPrefix(namespaceURI); if (prefix != null) return prefix; if (XMLConstants.NULL_NS_URI.equals(namespaceURI)) return XMLConstants.DEFAULT_NS_PREFIX; return findPrefix(namespaceURI); } @Override default Iterator getPrefixes(String namespaceURI) { Iterator standard = ContentNameSupplier.getStandardPrefixes(namespaceURI); if (standard != null) return standard; if (XMLConstants.NULL_NS_URI.equals(namespaceURI)) return Collections.singleton(XMLConstants.DEFAULT_NS_PREFIX).iterator(); Set prefixes = findPrefixes(namespaceURI); assert prefixes != null; return prefixes.iterator(); } }