Class AttributeSource

  • Direct Known Subclasses:
    TokenStream

    public class AttributeSource
    extends Object
    An AttributeSource contains a list of different AttributeImpls, 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.
    • Method Detail

      • getAttributeFactory

        public final AttributeFactory getAttributeFactory()
        returns the used AttributeFactory.
      • getAttributeClassesIterator

        public final Iterator<Class<? extends Attribute>> getAttributeClassesIterator()
        Returns a new iterator that iterates the attribute classes in the same order they were added in.
      • getAttributeImplsIterator

        public final Iterator<AttributeImpl> 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.
      • addAttributeImpl

        public final void addAttributeImpl​(AttributeImpl att)
        Expert: Adds a custom AttributeImpl instance with one or more Attribute interfaces.

        NOTE: It is not guaranteed, that att is added to the AttributeSource, because the provided attributes may already exist. You should always retrieve the wanted attributes using getAttribute(java.lang.Class<T>) after adding with this method and cast to your class. The recommended way to use custom implementations is using an AttributeFactory.

      • addAttribute

        public final <T extends Attribute> T addAttribute​(Class<T> 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.
      • hasAttributes

        public final boolean hasAttributes()
        Returns true, iff this AttributeSource has any attributes
      • hasAttribute

        public final boolean hasAttribute​(Class<? extends Attribute> attClass)
        The caller must pass in a Class<? extends Attribute> value. Returns true, iff this AttributeSource contains the passed-in Attribute.
      • getAttribute

        public final <T extends Attribute> T getAttribute​(Class<T> attClass)
        Returns the instance of the passed in Attribute contained in this AttributeSource

        The caller must pass in a Class<? extends Attribute> value.

        Returns:
        instance of the passed in Attribute, or null if this AttributeSource does not contain the Attribute. It is recommended to always use addAttribute(java.lang.Class<T>) even in consumers of TokenStreams, because you cannot know if a specific TokenStream really uses a specific Attribute. addAttribute(java.lang.Class<T>) 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<? extends org.apache.lucene.util.Attribute>).
      • clearAttributes

        public final void clearAttributes()
        Resets all Attributes in this AttributeSource by calling AttributeImpl.clear() on each Attribute implementation.
      • endAttributes

        public final void endAttributes()
        Resets all Attributes in this AttributeSource by calling AttributeImpl.end() on each Attribute implementation.
      • removeAllAttributes

        public final void removeAllAttributes()
        Removes all attributes and their implementations from this AttributeSource.
      • restoreState

        public final 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 Object
      • reflectAsString

        public final String reflectAsString​(boolean prependAttClass)
        This method returns the current attribute values as a string in the following format by calling the reflectWith(AttributeReflector) method:
        • iff prependAttClass=true: "AttributeClass#key=value,AttributeClass#key=value"
        • iff prependAttClass=false: "key=value,key=value"
        See Also:
        reflectWith(AttributeReflector)
      • cloneAttributes

        public final 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)). You can also use it as a (non-performant) replacement for captureState(), if you need to look into / modify the captured state.
      • toString

        public String toString()
        Returns a string consisting of the class's simple name, the hex representation of the identity hash code, and the current reflection of all attributes.
        Overrides:
        toString in class Object
        See Also:
        reflectAsString(boolean)