Package org.opensaml.core.xml

# Class NamespaceManager

java.lang.Object
org.opensaml.core.xml.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 Summary

Fields
Modifier and Type
Field
Description
`private final Set<Namespace>`
`attrNames`
Registered namespaces of attribute names.
`private final Map<String,Namespace>`
`attrValues`
Registered namespaces of attribute values.
`private Namespace`
`contentValue`
Registered namespaces of content values.
`private final Set<Namespace>`
`decls`
Explicitly declared namespaces.
`static final String`
`DEFAULT_NS_TOKEN`
The token used to represent the default namespace in `getNonVisibleNamespacePrefixes()`.
`private Namespace`
`elementName`
XMLObject name namespace.
`private Namespace`
`elementType`
XMLObject type namespace.
`private final XMLObject`
`owner`
The owning XMLObject.
`private static final Namespace`
`XML_NAMESPACE`
The 'xml' namespace.
`private static final Namespace`
`XSI_NAMESPACE`
The 'xsi' namespace.

## Constructor Summary

Constructors
Constructor
Description
`NamespaceManager(XMLObject owningObject)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`private void`
`addNamespace(Set<Namespace> namespaces, Namespace newNamespace)`
Add a Namespace to a set of Namespaces.
`private void`
`addPrefixes(Set<String> prefixes, Collection<Namespace> namespaces)`
Add the prefixes from a collection of namespaces to a set of prefixes.
`private Namespace`
`buildNamespace(QName name)`
Build a `Namespace` instance from a `QName`.
`private boolean`
`checkQName(QName name)`
Check whether the supplied QName contains non-empty namespace info and should be managed by the namespace manager.
`void`
`deregisterAttributeName(QName attributeName)`
Deregister a namespace-qualified attribute name.
`void`
`deregisterAttributeValue(String attributeID)`
Deregister a QName attribute value.
`void`
`deregisterContentValue()`
Deregister a QName content value.
`void`
`deregisterNamespaceDeclaration(Namespace namespace)`
Deregister a namespace declaration.
`static String`
`generateAttributeID(QName name)`
From a QName representing a qualified attribute name, generate an attribute ID suitable for use in `registerAttributeValue(String, QName)` and `deregisterAttributeValue(String)`.
`Set<Namespace>`
`getAllNamespacesInSubtreeScope()`
Get the set of all namespaces which are in scope within the subtree rooted at the owning XMLObject.
`private Namespace`
`getElementNameNamespace()`
Return a Namespace instance representing the namespace of the element name.
`private Namespace`
`getElementTypeNamespace()`
Return a Namespace instance representing the namespace of the element type, if known.
`Set<Namespace>`
`getNamespaceDeclarations()`
Get the set of namespace declarations registered on the owning XMLObject.
`Set<Namespace>`
`getNamespaces()`
Get the set of namespaces currently in use on the owning XMLObject.
`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).
`Set<String>`
`getNonVisibleNamespacePrefixes()`
Obtain the set of namespace prefixes used in a non-visible manner on owning XMLObject and its children.
`Set<Namespace>`
`getNonVisibleNamespaces()`
Obtain the set of namespaces used in a non-visible manner on owning XMLObject and its children.
`XMLObject`
`getOwner()`
Get the owning XMLObject instance.
`private Set<Namespace>`
`getVisibleNamespaces()`
Get the set of namespaces which are currently visibly-used on the owning XMLObject (only the owner, not its children).
`private Set<Namespace>`
`mergeNamespaceCollections(Collection<Namespace>... namespaces)`
Merge 2 or more Namespace collections into a single set.
`void`
`registerAttributeName(QName attributeName)`
Register a namespace-qualified attribute name.
`void`
`registerAttributeValue(String attributeID, QName attributeValue)`
Register a QName attribute value.
`void`
`registerContentValue(QName content)`
Register a QName element content value.
`void`
`registerElementName(QName name)`
Register the owning XMLObject's element name.
`void`
`registerElementType(QName type)`
Register the owning XMLObject's element type, if explicitly declared via an xsi:type.
`void`
`registerNamespaceDeclaration(Namespace namespace)`
Register a namespace declaration.
`private void`
`removeNamespace(Set<Namespace> namespaces, Namespace oldNamespace)`
Remove a Namespace from a set of Namespaces.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### DEFAULT_NS_TOKEN

@Nonnull @NotEmpty public static final String DEFAULT_NS_TOKEN
The token used to represent the default namespace in `getNonVisibleNamespacePrefixes()`.

See Also:
  - Constant Field Values

### XML_NAMESPACE

@Nonnull private static final Namespace XML_NAMESPACE
The 'xml' namespace.

### XSI_NAMESPACE

@Nonnull private static final Namespace XSI_NAMESPACE
The 'xsi' namespace.

### owner

@Nonnull private final XMLObject owner
The owning XMLObject.

### elementName

@Nullable private Namespace elementName
XMLObject name namespace.

### elementType

@Nullable 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

@Nullable private Namespace contentValue
Registered namespaces of content values.

## Constructor Details

### NamespaceManager

public NamespaceManager(@Nonnull XMLObject owningObject)
Constructor.

Parameters:
  `owningObject` - the XMLObject whose namespace info is to be managed

## Method Details

### generateAttributeID

@Nonnull @NotEmpty public static String generateAttributeID(@Nonnull QName name)
From a QName representing a qualified attribute name, generate an attribute ID suitable for use in `registerAttributeValue(String, QName)` and `deregisterAttributeValue(String)`.

Parameters:
  `name` - attribute name as a QName
Returns:
  a string attribute ID

### getOwner

@Nonnull public XMLObject getOwner()
Get the owning XMLObject instance.

Returns:
  the owning XMLObject

### getNamespaces

@Nonnull @Unmodifiable @NotLive 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 @Unmodifiable @NotLive 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 @Unmodifiable @NotLive 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 @Unmodifiable @NotLive 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 @Unmodifiable @NotLive 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 @Live 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 @Live 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

@SafeVarargs @Nonnull @Unmodifiable @NotLive private Set<Namespace> mergeNamespaceCollections(@Nonnull 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 @Unmodifiable @NotLive 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 @Unmodifiable @NotLive 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 @Live 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