org.biojava.bio.program.tagvalue
Class StateMachine

java.lang.Object
  extended by org.biojava.bio.program.tagvalue.StateMachine
All Implemented Interfaces:
TagValueListener, TagValueWrapper

public class StateMachine
extends java.lang.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 java.lang.String END_RECORD_TAG
           
protected static java.lang.String END_TAG
           
protected static java.lang.String MAGICAL_STATE
           
protected static java.lang.String START_RECORD_TAG
           
 
Constructor Summary
StateMachine()
           
 
Method Summary
 StateMachine.BasicState createState(java.lang.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(java.lang.String label)
           
 void setDelegate(TagValueListener delegate)
          TagValueWrapper interface
 void startRecord()
          A new record is about to start.
 void startTag(java.lang.Object tag)
          TagValueListener interface
 void value(TagValueContext ctxt, java.lang.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 java.lang.String START_RECORD_TAG
See Also:
Constant Field Values

END_RECORD_TAG

protected static final java.lang.String END_RECORD_TAG
See Also:
Constant Field Values

END_TAG

protected static final java.lang.String END_TAG
See Also:
Constant Field Values

MAGICAL_STATE

protected static final java.lang.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(java.lang.String label)

getState

public StateMachine.State getState(java.lang.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(java.lang.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,
                  java.lang.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