## org.biojava.bio.program.tagvalue
Class StateMachine

    java.lang.Object
      org.biojava.bio.program.tagvalue.StateMachine

All Implemented Interfaces:
  TagValueListener, TagValueWrapper

    public class StateMachine

extends Object
implements TagValueWrapper

This class implements a state machine for parsing events from the Parser class.

Each State can be specified to deliver events to a particular TagValueListener.

Transitions can be specified to occur between States when specific events are encountered. These events can be Tags delivered by startTag as well as the endTag/endRecord events. Events that result in exit from the current State can be specified to be notifiable to the State listener.

In addition, tables of transitions can be defined and specified as the fallback when the a corresponding Transition cannot be found for the tag. This is useful for specifying the destination States that are globally applicable for particular tags. As the fallbacks can be chained, you can end up with a hierarchy of Transition Tables, some being State-specific, others applicable to groups of States and finally one being global.

Author:
  David Huen

Nested Class Summary
`class` `StateMachine.BasicState` Implementation of a State in a state machine
`static interface` `StateMachine.ExitNotification` Interface implemented by State listeners that want notification when a transition leaves the State.
`class` `StateMachine.SimpleStateListener` a basic listener for a State.
`static interface` `StateMachine.State` Interface for a State within this StateMachine
`class` `StateMachine.Transition` class to represent a State Transition
`class` `StateMachine.TransitionTable` Table of Transition destination States and their corresponding Tags.

Field Summary
`protected TagValueListener` `delegate`
`protected static String` `END_RECORD_TAG`
`protected static String` `END_TAG`
`protected static String` `MAGICAL_STATE`
`protected static String` `START_RECORD_TAG`

Constructor Summary
`StateMachine()`

Method Summary
`StateMachine.BasicState` `createState(String label)`
`StateMachine.TransitionTable` `createTransitionTable()`
`void` `endRecord()` The current record has ended.
`void` `endTag()` End the current tag.
`TagValueListener` `getDelegate()` get listener to which all calls will be delegated
`StateMachine.BasicState` `getMagicalState()`
`StateMachine.State` `getState(String label)`
`void` `setDelegate(TagValueListener delegate)` TagValueWrapper interface
`void` `startRecord()` A new record is about to start.
`void` `startTag(Object tag)` TagValueListener interface
`void` `value(TagValueContext ctxt, Object value)` A value has been seen.

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

Field Detail

### START_RECORD_TAG

    protected static final String START_RECORD_TAG

See Also:
  Constant Field Values

### END_RECORD_TAG

    protected static final String END_RECORD_TAG

See Also:
  Constant Field Values

### END_TAG

    protected static final String END_TAG

See Also:
  Constant Field Values

### MAGICAL_STATE

    protected static final String MAGICAL_STATE

See Also:
  Constant Field Values

### delegate

    protected TagValueListener delegate

Constructor Detail

### StateMachine

    public StateMachine()

Method Detail

### getMagicalState

    public StateMachine.BasicState getMagicalState()

### createState

    public StateMachine.BasicState createState(String label)

### getState

    public StateMachine.State getState(String label)

### createTransitionTable

    public StateMachine.TransitionTable createTransitionTable()

### setDelegate

    public void setDelegate(TagValueListener delegate)

  TagValueWrapper interface

  Specified by:
    `setDelegate` in interface `TagValueWrapper`

### getDelegate

    public TagValueListener getDelegate()

  Description copied from interface: `TagValueWrapper`
  get listener to which all calls will be delegated

  Specified by:
    `getDelegate` in interface `TagValueWrapper`

### startTag

    public void startTag(Object tag)
                  throws ParserException

  TagValueListener interface

  Specified by:
    `startTag` in interface `TagValueListener`
  Parameters:
    `tag` - the Object representing the new tag
  Throws:
    `ParserException` - if the tag could not be started

### endTag

    public void endTag()
                throws ParserException

  Description copied from interface: `TagValueListener`
  End the current tag.

  Specified by:
    `endTag` in interface `TagValueListener`
  Throws:
    `ParserException` - if the tag could not be ended

### startRecord

    public void startRecord()
                     throws ParserException

  Description copied from interface: `TagValueListener`
  A new record is about to start.

  Specified by:
    `startRecord` in interface `TagValueListener`
  Throws:
    `ParserException` - if the record can not be started

### endRecord

    public void endRecord()
                   throws ParserException

  Description copied from interface: `TagValueListener`
  The current record has ended.

  Specified by:
    `endRecord` in interface `TagValueListener`
  Throws:
    `ParserException` - if the record can not be ended

### value

    public void value(TagValueContext ctxt,
                      Object value)
               throws ParserException

  Description copied from interface: `TagValueListener`
  A value has been seen.

  Specified by:
    `value` in interface `TagValueListener`
  Parameters:
    `ctxt` - a TagValueContext that could be used to push a sub-document
    `value` - the value Object observed
  Throws:
    `ParserException` - if the value could not be processed