# Interface AbstractDocument.AttributeContext

All Known Implementing Classes:
  `StyleContext, StyleSheet`

Enclosing class:
  `AbstractDocument`

public static interface AbstractDocument.AttributeContext
An interface that can be used to allow MutableAttributeSet implementations to use pluggable attribute compression techniques. Each mutation of the attribute set can be used to exchange a previous AttributeSet instance with another, preserving the possibility of the AttributeSet remaining immutable. An implementation is provided by the StyleContext class. The Element implementations provided by this class use this interface to provide their MutableAttributeSet implementations, so that different AttributeSet compression techniques can be employed. The method `getAttributeContext` should be implemented to return the object responsible for implementing the desired compression technique.

See Also:
  - `StyleContext`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `AttributeSet`
  `addAttribute(AttributeSet old, Object name, Object value)`
  Adds an attribute to the given set, and returns the new representative set.
  `AttributeSet`
  `addAttributes(AttributeSet old, AttributeSet attr)`
  Adds a set of attributes to the element.
  `AttributeSet`
  `getEmptySet()`
  Fetches an empty AttributeSet.
  `void`
  `reclaim(AttributeSet a)`
  Reclaims an attribute set.
  `AttributeSet`
  `removeAttribute(AttributeSet old, Object name)`
  Removes an attribute from the set.
  `AttributeSet`
  `removeAttributes(AttributeSet old, Enumeration<?> names)`
  Removes a set of attributes for the element.
  `AttributeSet`
  `removeAttributes(AttributeSet old, AttributeSet attrs)`
  Removes a set of attributes for the element.

- ## Method Details

  - ### addAttribute

    AttributeSet addAttribute(AttributeSet old, Object name, Object value)
    Adds an attribute to the given set, and returns the new representative set.
    Parameters:
      `old` - the old attribute set
      `name` - the non-null attribute name
      `value` - the attribute value
    Returns:
      the updated attribute set
    See Also:
      - `MutableAttributeSet.addAttribute(Object, Object)`

  - ### addAttributes

    AttributeSet addAttributes(AttributeSet old, AttributeSet attr)
    Adds a set of attributes to the element.
    Parameters:
      `old` - the old attribute set
      `attr` - the attributes to add
    Returns:
      the updated attribute set
    See Also:
      - `MutableAttributeSet.addAttribute(Object, Object)`

  - ### removeAttribute

    AttributeSet removeAttribute(AttributeSet old, Object name)
    Removes an attribute from the set.
    Parameters:
      `old` - the old attribute set
      `name` - the non-null attribute name
    Returns:
      the updated attribute set
    See Also:
      - `MutableAttributeSet.removeAttribute(Object)`

  - ### removeAttributes

    AttributeSet removeAttributes(AttributeSet old, Enumeration<?> names)
    Removes a set of attributes for the element.
    Parameters:
      `old` - the old attribute set
      `names` - the attribute names
    Returns:
      the updated attribute set
    See Also:
      - `MutableAttributeSet.removeAttributes(Enumeration)`

  - ### removeAttributes

    AttributeSet removeAttributes(AttributeSet old, AttributeSet attrs)
    Removes a set of attributes for the element.
    Parameters:
      `old` - the old attribute set
      `attrs` - the attributes
    Returns:
      the updated attribute set
    See Also:
      - `MutableAttributeSet.removeAttributes(Enumeration)`

  - ### getEmptySet

    AttributeSet getEmptySet()
    Fetches an empty AttributeSet.
    Returns:
      the attribute set

  - ### reclaim

    void reclaim(AttributeSet a)
    Reclaims an attribute set. This is a way for a MutableAttributeSet to mark that it no longer need a particular immutable set. This is only necessary in 1.1 where there are no weak references. A 1.1 implementation would call this in its finalize method.
    Parameters:
      `a` - the attribute set to reclaim