## org.apache.lucene.util
Class AttributeSource

    java.lang.Object
      org.apache.lucene.util.AttributeSource

Direct Known Subclasses:
  TokenStream

    public class AttributeSource

extends java.lang.Object

An AttributeSource contains a list of different `AttributeImpl`s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the Attribute (Class<Attribute>) to the `addAttribute(Class)`, which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it.

Nested Class Summary
`static class` `AttributeSource.AttributeFactory` An AttributeFactory creates instances of `AttributeImpl`s.
`static class` `AttributeSource.State` This class holds the state of an AttributeSource.

Constructor Summary
`AttributeSource()` An AttributeSource using the default attribute factory `AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY`.
`AttributeSource(AttributeSource.AttributeFactory factory)` An AttributeSource using the supplied `AttributeSource.AttributeFactory` for creating new `Attribute` instances.
`AttributeSource(AttributeSource input)` An AttributeSource that uses the same attributes as the supplied one.

Method Summary
`Attribute` `addAttribute(java.lang.Class attClass)` The caller must pass in a Class<? extends Attribute> value.
`void` `addAttributeImpl(AttributeImpl att)` Adds a custom AttributeImpl instance with one or more Attribute interfaces.
`AttributeSource.State` `captureState()` Captures the state of all Attributes.
`void` `clearAttributes()` Resets all Attributes in this AttributeSource by calling `AttributeImpl.clear()` on each Attribute implementation.
`AttributeSource` `cloneAttributes()` Performs a clone of all `AttributeImpl` instances returned in a new AttributeSource instance.
`boolean` `equals(java.lang.Object obj)`
`Attribute` `getAttribute(java.lang.Class attClass)` The caller must pass in a Class<? extends Attribute> value.
`java.util.Iterator` `getAttributeClassesIterator()` Returns a new iterator that iterates the attribute classes in the same order they were added in.
`AttributeSource.AttributeFactory` `getAttributeFactory()` returns the used AttributeFactory.
`java.util.Iterator` `getAttributeImplsIterator()` Returns a new iterator that iterates all unique Attribute implementations.
`boolean` `hasAttribute(java.lang.Class attClass)` The caller must pass in a Class<? extends Attribute> value.
`boolean` `hasAttributes()` Returns true, iff this AttributeSource has any attributes
`int` `hashCode()`
`void` `restoreState(AttributeSource.State state)` Restores this state by copying the values of all attribute implementations that this state contains into the attributes implementations of the targetStream.
`java.lang.String` `toString()`

Methods inherited from class java.lang.Object
`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

Constructor Detail

### AttributeSource

    public AttributeSource()

  An AttributeSource using the default attribute factory `AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY`.

### AttributeSource

    public AttributeSource(AttributeSource input)

  An AttributeSource that uses the same attributes as the supplied one.

### AttributeSource

    public AttributeSource(AttributeSource.AttributeFactory factory)

  An AttributeSource using the supplied `AttributeSource.AttributeFactory` for creating new `Attribute` instances.

Method Detail

### getAttributeFactory

    public AttributeSource.AttributeFactory getAttributeFactory()

  returns the used AttributeFactory.

### getAttributeClassesIterator

    public java.util.Iterator getAttributeClassesIterator()

  Returns a new iterator that iterates the attribute classes in the same order they were added in.

  Signature for Java 1.5: `public Iterator<Class<? extends Attribute>> getAttributeClassesIterator()`

### getAttributeImplsIterator

    public java.util.Iterator getAttributeImplsIterator()

  Returns a new iterator that iterates all unique Attribute implementations. This iterator may contain less entries that `getAttributeClassesIterator()`, if one instance implements more than one Attribute interface.

  Signature for Java 1.5: `public Iterator<AttributeImpl> getAttributeImplsIterator()`

### addAttributeImpl

    public void addAttributeImpl(AttributeImpl att)

  Adds a custom AttributeImpl instance with one or more Attribute interfaces.

### addAttribute

    public Attribute addAttribute(java.lang.Class attClass)

  The caller must pass in a Class<? extends Attribute> value. This method first checks if an instance of that class is already in this AttributeSource and returns it. Otherwise a new instance is created, added to this AttributeSource and returned.

  Signature for Java 1.5: `public <T extends Attribute> T addAttribute(Class<T>)`

### hasAttributes

    public boolean hasAttributes()

  Returns true, iff this AttributeSource has any attributes

### hasAttribute

    public boolean hasAttribute(java.lang.Class attClass)

  The caller must pass in a Class<? extends Attribute> value. Returns true, iff this AttributeSource contains the passed-in Attribute.

  Signature for Java 1.5: `public boolean hasAttribute(Class<? extends Attribute>)`

### getAttribute

    public Attribute getAttribute(java.lang.Class attClass)

  The caller must pass in a Class<? extends Attribute> value. Returns the instance of the passed in Attribute contained in this AttributeSource

  Signature for Java 1.5: `public <T extends Attribute> T getAttribute(Class<T>)`

  Throws:
    `java.lang.IllegalArgumentException` - if this AttributeSource does not contain the Attribute. It is recommended to always use `addAttribute(java.lang.Class)` even in consumers of TokenStreams, because you cannot know if a specific TokenStream really uses a specific Attribute. `addAttribute(java.lang.Class)` will automatically make the attribute available. If you want to only use the attribute, if it is available (to optimize consuming), use `hasAttribute(java.lang.Class)`.

### clearAttributes

    public void clearAttributes()

  Resets all Attributes in this AttributeSource by calling `AttributeImpl.clear()` on each Attribute implementation.

### captureState

    public AttributeSource.State captureState()

  Captures the state of all Attributes. The return value can be passed to `restoreState(org.apache.lucene.util.AttributeSource.State)` to restore the state of this or another AttributeSource.

### restoreState

    public void restoreState(AttributeSource.State state)

  Restores this state by copying the values of all attribute implementations that this state contains into the attributes implementations of the targetStream. The targetStream must contain a corresponding instance for each argument contained in this state (e.g. it is not possible to restore the state of an AttributeSource containing a TermAttribute into a AttributeSource using a Token instance as implementation).

  Note that this method does not affect attributes of the targetStream that are not contained in this state. In other words, if for example the targetStream contains an OffsetAttribute, but this state doesn't, then the value of the OffsetAttribute remains unchanged. It might be desirable to reset its value to the default, in which case the caller should first call `clearAttributes()` on the targetStream.

### hashCode

    public int hashCode()

  Overrides:
    `hashCode` in class `java.lang.Object`

### equals

    public boolean equals(java.lang.Object obj)

  Overrides:
    `equals` in class `java.lang.Object`

### toString

    public java.lang.String toString()

  Overrides:
    `toString` in class `java.lang.Object`

### cloneAttributes

    public AttributeSource cloneAttributes()

  Performs a clone of all `AttributeImpl` instances returned in a new AttributeSource instance. This method can be used to e.g. create another TokenStream with exactly the same attributes (using `AttributeSource(AttributeSource)`)

Copyright © 2000-2011 Apache Software Foundation. All Rights Reserved.