Class NamespaceManager


  • public class NamespaceManager
    extends Object
    A class which is responsible for managing XML namespace-related data for an XMLObject.

    Code which mutates the state of an XMLObject such that XML namespace-related data is also logically changed, should call the appropriate method, based on the type of change being made.

    • Field Detail

      • XML_NAMESPACE

        private static final Namespace XML_NAMESPACE
        The 'xml' namespace.
      • XSI_NAMESPACE

        private static final Namespace XSI_NAMESPACE
        The 'xsi' namespace.
      • owner

        @Nonnull
        private final XMLObject owner
        The owning XMLObject.
      • elementName

        private Namespace elementName
        XMLObject name namespace.
      • elementType

        private Namespace elementType
        XMLObject type namespace.
      • decls

        @Nonnull
        private final Set<Namespace> decls
        Explicitly declared namespaces.
      • attrNames

        @Nonnull
        private final Set<Namespace> attrNames
        Registered namespaces of attribute names.
      • attrValues

        @Nonnull
        private final Map<String,​Namespace> attrValues
        Registered namespaces of attribute values.
      • contentValue

        private Namespace contentValue
        Registered namespaces of content values.
    • Constructor Detail

      • NamespaceManager

        public NamespaceManager​(@Nonnull
                                XMLObject owningObject)
        Constructor.
        Parameters:
        owningObject - the XMLObject whose namespace info is to be managed
    • Method Detail

      • getOwner

        @Nonnull
        public XMLObject getOwner()
        Get the owning XMLObject instance.
        Returns:
        the owning XMLObject
      • getNamespaces

        @Nonnull
        public Set<Namespace> getNamespaces()
        Get the set of namespaces currently in use on the owning XMLObject.
        Returns:
        the unmodifiable set of namespaces
      • registerNamespaceDeclaration

        public void registerNamespaceDeclaration​(@Nonnull
                                                 Namespace namespace)
        Register a namespace declaration.
        Parameters:
        namespace - the namespace to register
      • deregisterNamespaceDeclaration

        public void deregisterNamespaceDeclaration​(@Nonnull
                                                   Namespace namespace)
        Deregister a namespace declaration.
        Parameters:
        namespace - the namespace to deregister
      • getNamespaceDeclarations

        @Nonnull
        public Set<Namespace> getNamespaceDeclarations()
        Get the set of namespace declarations registered on the owning XMLObject.
        Returns:
        the set of namespace declarations
      • registerAttributeName

        public void registerAttributeName​(@Nonnull
                                          QName attributeName)
        Register a namespace-qualified attribute name.
        Parameters:
        attributeName - the attribute name to register
      • deregisterAttributeName

        public void deregisterAttributeName​(@Nonnull
                                            QName attributeName)
        Deregister a namespace-qualified attribute name.
        Parameters:
        attributeName - the attribute name to deregister
      • registerAttributeValue

        public void registerAttributeValue​(@Nonnull
                                           String attributeID,
                                           @Nonnull
                                           QName attributeValue)
        Register a QName attribute value.
        Parameters:
        attributeID - unique identifier for the attribute within the XMLObject's content model
        attributeValue - the QName value to register
      • deregisterAttributeValue

        public void deregisterAttributeValue​(@Nonnull
                                             String attributeID)
        Deregister a QName attribute value.
        Parameters:
        attributeID - unique identifier for the attribute within the XMLObject's content model
      • registerContentValue

        public void registerContentValue​(@Nonnull
                                         QName content)
        Register a QName element content value.
        Parameters:
        content - the QName value to register
      • deregisterContentValue

        public void deregisterContentValue()
        Deregister a QName content value.
      • getNonVisibleNamespacePrefixes

        @Nonnull
        public Set<String> getNonVisibleNamespacePrefixes()
        Obtain the set of namespace prefixes used in a non-visible manner on owning XMLObject and its children.

        The primary use case for this information is to support the inclusive prefixes information that may optionally be supplied as a part of XML exclusive canonicalization.

        Returns:
        the set of non-visibly used namespace prefixes
      • getNonVisibleNamespaces

        @Nonnull
        public Set<Namespace> getNonVisibleNamespaces()
        Obtain the set of namespaces used in a non-visible manner on owning XMLObject and its children.

        The primary use case for this information is to support the inclusive prefixes information that may optionally be supplied as a part of XML exclusive canonicalization.

        Returns:
        the set of non-visibly used namespaces
      • getAllNamespacesInSubtreeScope

        @Nonnull
        public Set<Namespace> getAllNamespacesInSubtreeScope()
        Get the set of all namespaces which are in scope within the subtree rooted at the owning XMLObject.
        Returns:
        set of all namespaces in scope for the owning object
      • registerElementName

        public void registerElementName​(@Nonnull
                                        QName name)
        Register the owning XMLObject's element name.
        Parameters:
        name - the element name to register
      • registerElementType

        public void registerElementType​(@Nullable
                                        QName type)
        Register the owning XMLObject's element type, if explicitly declared via an xsi:type.
        Parameters:
        type - the element type to register
      • getElementNameNamespace

        @Nullable
        private Namespace getElementNameNamespace()
        Return a Namespace instance representing the namespace of the element name.
        Returns:
        the element name's namespace
      • getElementTypeNamespace

        @Nullable
        private Namespace getElementTypeNamespace()
        Return a Namespace instance representing the namespace of the element type, if known.
        Returns:
        the element type's namespace
      • buildNamespace

        @Nonnull
        private Namespace buildNamespace​(@Nonnull
                                         QName name)
        Build a Namespace instance from a QName.
        Parameters:
        name - the source QName
        Returns:
        a Namespace built using the information in the QName
      • addNamespace

        private void addNamespace​(@Nonnull
                                  Set<Namespace> namespaces,
                                  @Nullable
                                  Namespace newNamespace)
        Add a Namespace to a set of Namespaces. Namespaces with identical URI and prefix will be treated as equivalent.
        Parameters:
        namespaces - the set of namespaces
        newNamespace - the namespace to add to the set
      • removeNamespace

        private void removeNamespace​(@Nonnull
                                     Set<Namespace> namespaces,
                                     @Nullable
                                     Namespace oldNamespace)
        Remove a Namespace from a set of Namespaces.
        Parameters:
        namespaces - the set of namespaces
        oldNamespace - the namespace to add to the set
      • mergeNamespaceCollections

        @Nonnull
        private Set<Namespace> mergeNamespaceCollections​(Collection<Namespace>... namespaces)
        Merge 2 or more Namespace collections into a single set.
        Parameters:
        namespaces - list of Namespaces to merge
        Returns:
        the a new set of merged Namespaces
      • getVisibleNamespaces

        @Nonnull
        private Set<Namespace> getVisibleNamespaces()
        Get the set of namespaces which are currently visibly-used on the owning XMLObject (only the owner, not its children).
        Returns:
        the set of visibly-used namespaces
      • getNonVisibleNamespaceCandidates

        @Nonnull
        private Set<Namespace> getNonVisibleNamespaceCandidates()
        Get the set of non-visibly used namespaces used on the owning XMLObject (only the owner, not the owner's children).
        Returns:
        the set of non-visibly-used namespaces
      • addPrefixes

        private void addPrefixes​(@Nonnull
                                 Set<String> prefixes,
                                 @Nonnull
                                 Collection<Namespace> namespaces)
        Add the prefixes from a collection of namespaces to a set of prefixes. The value used to represent the default namespace will be normalized to DEFAULT_NS_TOKEN.
        Parameters:
        prefixes - the set of prefixes to which to add
        namespaces - the source set of Namespaces
      • checkQName

        private boolean checkQName​(@Nullable
                                   QName name)
        Check whether the supplied QName contains non-empty namespace info and should be managed by the namespace manager.
        Parameters:
        name - the QName to check
        Returns:
        true if the QName contains non-empty namespace info and should be managed, false otherwise