# Class PrinterStateReasons

java.lang.Object
java.util.AbstractMap<PrinterStateReason, Severity>
java.util.HashMap<PrinterStateReason, Severity>
javax.print.attribute.standard.PrinterStateReasons

All Implemented Interfaces:
  `Serializable, Cloneable, Map<PrinterStateReason, Severity>, Attribute, PrintServiceAttribute`

public final class PrinterStateReasons extends HashMap<PrinterStateReason, Severity> implements PrintServiceAttribute
Class `PrinterStateReasons` is a printing attribute class, a set of enumeration values, that provides additional information about the printer's current state, i.e., information that augments the value of the printer's `PrinterState` attribute.

Instances of `PrinterStateReason` do not appear in a Print Service's attribute set directly. Rather, a `PrinterStateReasons` attribute appears in the Print Service's attribute set. The `PrinterStateReasons` attribute contains zero, one, or more than one `PrinterStateReason` objects which pertain to the Print Service's status, and each `PrinterStateReason` object is associated with a `Severity` level of `REPORT` (least severe), `WARNING`, or `ERROR` (most severe). The printer adds a `PrinterStateReason` object to the Print Service's `PrinterStateReasons` attribute when the corresponding condition becomes true of the printer, and the printer removes the `PrinterStateReason` object again when the corresponding condition becomes false, regardless of whether the Print Service's overall `PrinterState` also changed.

Class PrinterStateReasons inherits its implementation from class `java.util.HashMap`. Each entry in the map consists of a `PrinterStateReason` object (key) mapping to a `Severity` object (value):

Unlike most printing attributes which are immutable once constructed, class `PrinterStateReasons` is designed to be mutable; you can add `PrinterStateReason` objects to an existing `PrinterStateReasons` object and remove them again. However, like class `java.util.HashMap`, class `PrinterStateReasons` is not multiple thread safe. If a `PrinterStateReasons` object will be used by multiple threads, be sure to synchronize its operations (e.g., using a synchronized map view obtained from class `java.util.Collections`).

IPP Compatibility: The string values returned by each individual `PrinterStateReason` object's and the associated `Severity` object's `toString()` methods, concatenated together with a hyphen (`"-"`) in between, gives the IPP keyword value. The category name returned by `getName()` gives the IPP attribute name.

See Also:
  - Serialized Form

- ## Nested Class Summary

  ### Nested classes/interfaces declared in class AbstractMap

  `AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>`
  Modifier and Type
  Class
  Description
  `static class`
  `AbstractMap.SimpleEntry<K,V>`
  An Entry maintaining a key and a value.
  `static class`
  `AbstractMap.SimpleImmutableEntry<K,V>`
  An unmodifiable Entry maintaining a key and a value.

  ### Nested classes/interfaces declared in interface Map

  `Map.Entry<K,V>`
  Modifier and Type
  Interface
  Description
  `static interface`
  `Map.Entry<K,V>`
  A map entry (key-value pair).

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PrinterStateReasons()`
  Construct a new, empty printer state reasons attribute; the underlying hash map has the default initial capacity and load factor.
  `PrinterStateReasons(int initialCapacity)`
  Construct a new, empty printer state reasons attribute; the underlying hash map has the given initial capacity and the default load factor.
  `PrinterStateReasons(int initialCapacity, float loadFactor)`
  Construct a new, empty printer state reasons attribute; the underlying hash map has the given initial capacity and load factor.
  `PrinterStateReasons(Map<PrinterStateReason, Severity> map)`
  Construct a new printer state reasons attribute that contains the same `PrinterStateReason`-to-`Severity` mappings as the given map.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final Class<? extends Attribute>`
  `getCategory()`
  Get the printing attribute class which is to be used as the "category" for this printing attribute value.
  `final String`
  `getName()`
  Get the name of the category of which this attribute value is an instance.
  `Set<PrinterStateReason>`
  `printerStateReasonSet(Severity severity)`
  Obtain an unmodifiable set view of the individual printer state reason attributes at the given severity level in this `PrinterStateReasons` attribute.
  `Severity`
  `put(PrinterStateReason reason, Severity severity)`
  Adds the given printer state reason to this printer state reasons attribute, associating it with the given severity level.

  ### Methods declared in class HashMap

  `clear, clone, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, entrySet, get, isEmpty, keySet, merge, newHashMap, putAll, remove, size, values`
  Modifier and Type
  Method
  Description
  `void`
  `clear()`
  Removes all of the mappings from this map.
  `Object`
  `clone()`
  Returns a shallow copy of this `HashMap` instance: the keys and values themselves are not cloned.
  `Severity`
  `compute(PrinterStateReason key, BiFunction<? super PrinterStateReason, ? super Severity, ? extends Severity> remappingFunction)`
  Attempts to compute a mapping for the specified key and its current mapped value, or `null` if there is no current mapping (optional operation).
  `Severity`
  `computeIfAbsent(PrinterStateReason key, Function<? super PrinterStateReason, ? extends Severity> mappingFunction)`
  If the specified key is not already associated with a value (or is mapped to `null`), attempts to compute its value using the given mapping function and enters it into this map unless `null` (optional operation).
  `Severity`
  `computeIfPresent(PrinterStateReason key, BiFunction<? super PrinterStateReason, ? super Severity, ? extends Severity> remappingFunction)`
  If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value (optional operation).
  `boolean`
  `containsKey(Object key)`
  Returns `true` if this map contains a mapping for the specified key.
  `boolean`
  `containsValue(Object value)`
  Returns `true` if this map maps one or more keys to the specified value.
  `Set<Map.Entry<PrinterStateReason, Severity>>`
  `entrySet()`
  Returns a `Set` view of the mappings contained in this map.
  `Severity`
  `get(Object key)`
  Returns the value to which the specified key is mapped, or `null` if this map contains no mapping for the key.
  `boolean`
  `isEmpty()`
  Returns `true` if this map contains no key-value mappings.
  `Set<PrinterStateReason>`
  `keySet()`
  Returns a `Set` view of the keys contained in this map.
  `Severity`
  `merge(PrinterStateReason key, Severity value, BiFunction<? super Severity, ? super Severity, ? extends Severity> remappingFunction)`
  If the specified key is not already associated with a value or is associated with null, associates it with the given non-null value (optional operation).
  `static <K,V> HashMap<K,V>`
  `newHashMap(int numMappings)`
  Creates a new, empty HashMap suitable for the expected number of mappings.
  `void`
  `putAll(Map<? extends PrinterStateReason, ? extends Severity> m)`
  Copies all of the mappings from the specified map to this map.
  `Severity`
  `remove(Object key)`
  Removes the mapping for the specified key from this map if present.
  `int`
  `size()`
  Returns the number of key-value mappings in this map.
  `Collection<Severity>`
  `values()`
  Returns a `Collection` view of the values contained in this map.

  ### Methods declared in class AbstractMap

  `equals, hashCode, toString`
  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object o)`
  Compares the specified object with this map for equality.
  `int`
  `hashCode()`
  Returns the hash code value for this map.
  `String`
  `toString()`
  Returns a string representation of this map.

  ### Methods declared in class Object

  `finalize, getClass, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

  ### Methods declared in interface Map

  `forEach, getOrDefault, putIfAbsent, remove, replace, replace, replaceAll`
  Modifier and Type
  Method
  Description
  `default void`
  `forEach(BiConsumer<? super PrinterStateReason, ? super Severity> action)`
  Performs the given action for each entry in this map until all entries have been processed or the action throws an exception.
  `default Severity`
  `getOrDefault(Object key, Severity defaultValue)`
  Returns the value to which the specified key is mapped, or `defaultValue` if this map contains no mapping for the key.
  `default Severity`
  `putIfAbsent(PrinterStateReason key, Severity value)`
  If the specified key is not already associated with a value (or is mapped to `null`) associates it with the given value and returns `null`, else returns the current value (optional operation).
  `default boolean`
  `remove(Object key, Object value)`
  Removes the entry for the specified key only if it is currently mapped to the specified value (optional operation).
  `default Severity`
  `replace(PrinterStateReason key, Severity value)`
  Replaces the entry for the specified key only if it is currently mapped to some value (optional operation).
  `default boolean`
  `replace(PrinterStateReason key, Severity oldValue, Severity newValue)`
  Replaces the entry for the specified key only if currently mapped to the specified value (optional operation).
  `default void`
  `replaceAll(BiFunction<? super PrinterStateReason, ? super Severity, ? extends Severity> function)`
  Replaces each entry's value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception (optional operation).

- ## Constructor Details

  - ### PrinterStateReasons

    public PrinterStateReasons()
    Construct a new, empty printer state reasons attribute; the underlying hash map has the default initial capacity and load factor.

  - ### PrinterStateReasons

    public PrinterStateReasons(int initialCapacity)
    Construct a new, empty printer state reasons attribute; the underlying hash map has the given initial capacity and the default load factor.
    Parameters:
      `initialCapacity` - initial capacity
    Throws:
      `IllegalArgumentException` - if the initial capacity is negative

  - ### PrinterStateReasons

    public PrinterStateReasons(int initialCapacity, float loadFactor)
    Construct a new, empty printer state reasons attribute; the underlying hash map has the given initial capacity and load factor.
    Parameters:
      `initialCapacity` - initial capacity
      `loadFactor` - load factor
    Throws:
      `IllegalArgumentException` - if the initial capacity is negative

  - ### PrinterStateReasons

    public PrinterStateReasons(Map<PrinterStateReason, Severity> map)
    Construct a new printer state reasons attribute that contains the same `PrinterStateReason`-to-`Severity` mappings as the given map. The underlying hash map's initial capacity and load factor are as specified in the superclass constructor `HashMap(Map)`.
    Parameters:
      `map` - map to copy
    Throws:
      `NullPointerException` - if `map` is `null` or if any key or value in `map` is `null`
      `ClassCastException` - if any key in `map` is not an instance of class `PrinterStateReason` or if any value in `map` is not an instance of class `Severity`

- ## Method Details

  - ### put

    public Severity put(PrinterStateReason reason, Severity severity)
    Adds the given printer state reason to this printer state reasons attribute, associating it with the given severity level. If this printer state reasons attribute previously contained a mapping for the given printer state reason, the old value is replaced.
    Specified by:
      `put` in interface `Map<PrinterStateReason, Severity>`
    Overrides:
      `put` in class `HashMap<PrinterStateReason, Severity>`
    Parameters:
      `reason` - printer state reason. This must be an instance of class `PrinterStateReason`
      `severity` - severity of the printer state reason. This must be an instance of class `Severity`
    Returns:
      previous severity associated with the given printer state reason, or `null` if the given printer state reason was not present
    Throws:
      `NullPointerException` - if `reason` is `null` or `severity` is `null`
      `ClassCastException` - if `reason` is not an instance of class `PrinterStateReason` or if `severity` is not an instance of class `Severity`
    Since:
      1.5

  - ### getCategory

    public final Class<? extends Attribute> getCategory()
    Get the printing attribute class which is to be used as the "category" for this printing attribute value.

    For class `PrinterStateReasons`, the category is class `PrinterStateReasons` itself.

    Specified by:
      `getCategory` in interface `Attribute`
    Returns:
      printing attribute class (category), an instance of class `java.lang.Class`

  - ### getName

    public final String getName()
    Get the name of the category of which this attribute value is an instance.

    For class `PrinterStateReasons`, the category name is `"printer-state-reasons"`.

    Specified by:
      `getName` in interface `Attribute`
    Returns:
      attribute category name

  - ### printerStateReasonSet

    public Set<PrinterStateReason> printerStateReasonSet(Severity severity)
    Obtain an unmodifiable set view of the individual printer state reason attributes at the given severity level in this `PrinterStateReasons` attribute. Each element in the set view is a `PrinterStateReason` object. The only elements in the set view are the `PrinterStateReason` objects that map to the given severity value. The set view is backed by this `PrinterStateReasons` attribute, so changes to this `PrinterStateReasons` attribute are reflected in the set view. The set view does not support element insertion or removal. The set view's iterator does not support element removal.
    Parameters:
      `severity` - severity level
    Returns:
      set view of the individual `PrinterStateReason` attributes at the given `Severity` level
    Throws:
      `NullPointerException` - if `severity` is `null`