## org.opencyc.conversation
Class Interpreter

    java.lang.Object
      |
      +--org.opencyc.conversation.Interpreter

public class Interpreter
extends java.lang.Object

Contains the attributes and behavior of a chat fsm interpreter.

The chat conversation is in the form of a text conversation using asynchronous receiving and sending of messages. This interpreter models the chat interaction with nested fsms in a stack. Mixed initiative is supported by a dictionary of fsm stacks, one of which is active, and the rest suspended. Sub fsms are passed a list of attribute/value pairs which form the initial state attributes. When done, sub fsms pass back result attribute/value pairs to the calling fsm's state attributes.

Author:
  Stephen L. Reed

  Copyright 2001 Cycorp, Inc., license is open source GNU LGPL.

  the license

  www.opencyc.org

  OpenCyc at SourceForge

  THIS SOFTWARE AND KNOWLEDGE BASE CONTENT ARE PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENCYC ORGANIZATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE AND KNOWLEDGE BASE CONTENT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Field Summary
`protected ChatterBot` `chatterBot` reference to the parent ChatterBot
`protected ChatUserModel` `chatUserModel` Reference to the user model, which contains user state and history information, persisted in the Cyc KB.
`protected State` `currentState` finite state machine current node
`protected Fsm` `fsm` reference to the active fsm
`protected StackWithPointer` `fsmStack` Reference to the current fsm stack, which is a stack of FsmInfo elements.
`protected java.util.HashMap` `fsmStacks` dictionary of fsm stacks fsmStackId --> fsm stack
`protected Performative` `nextPerformative` Next computed Performative, or null if none.
`protected Performer` `performer` Performs fsm actions.
`protected java.util.HashMap` `stateAttributes` Dictionary of state attribute and object values.
`protected TemplateFactory` `templateFactory` Makes Template objects for the TemplateParser.
`protected TemplateParser` `templateParser` Parses the users input text.

Constructor Summary
`protected` `Interpreter()` Constructs a new Interpreter without arguments.
`` `Interpreter(ChatterBot chatterBot, java.lang.String chatUserNickname, java.lang.String chatUserUniqueId, java.lang.String fsmStackId, Fsm fsm)` Constructs a new Interpreter object given the parent ChatterBot.

Method Summary
`java.lang.Object` `getStateAttribute(java.lang.Object attribute)` Returns the value for the given state attribute.
`void` `initialize(java.lang.String fsmStackId, Fsm fsm)` Initializes the fsm interpreter.
`protected Arc` `lookupArc(Performative performative)` Returns the arc which corresponds to the performative received in the current state.
`void` `popFsmStateInfo()` Pops the fsm state stack and restores the previous fsm state.
`void` `pushFsmStateInfo(FsmStateInfo fsmStateInfo)` Pushes the given fsm state onto the current fsm stack.
`void` `receiveChatMessage(java.lang.String chatMessage)` Receives the given chat message from the given chat partner, obtains the performative, transitions to the corresponding state and performs the required action.
`void` `sendChatMessage(java.lang.String chatMessage)` Sends the given chat message into the chat system.
`void` `setNextPerformative(Performative nextPerformative)` Sets the value of the computed next performative.
`void` `setStateAttribute(java.lang.String attribute, java.lang.Object value)` Sets the value for the given state attribute.
`void` `setupSubFsm(Fsm fsm, java.util.ArrayList arguments)` Sets up the given sub fsm and the input arguments as a list of attribute/value pairs.
`protected void` `transitionState(Arc arc)` Transitions to the to-state given in the arc, and performs the action.

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

Field Detail

### chatterBot

    protected ChatterBot chatterBot

  reference to the parent ChatterBot

### chatUserModel

    protected ChatUserModel chatUserModel

  Reference to the user model, which contains user state and history information, persisted in the Cyc KB.

### fsmStacks

    protected java.util.HashMap fsmStacks

  dictionary of fsm stacks fsmStackId --> fsm stack

### fsmStack

    protected StackWithPointer fsmStack

  Reference to the current fsm stack, which is a stack of FsmInfo elements. Each of these elements contains the fsm and its state attributes.

### fsm

    protected Fsm fsm

  reference to the active fsm

### currentState

    protected State currentState

  finite state machine current node

### stateAttributes

    protected java.util.HashMap stateAttributes

  Dictionary of state attribute and object values.

### nextPerformative

    protected Performative nextPerformative

  Next computed Performative, or null if none.

### templateFactory

    protected TemplateFactory templateFactory

  Makes Template objects for the TemplateParser.

### templateParser

    protected TemplateParser templateParser

  Parses the users input text.

### performer

    protected Performer performer

  Performs fsm actions.

Constructor Detail

### Interpreter

    protected Interpreter()

  Constructs a new Interpreter without arguments. Used for unit testing.

### Interpreter

    public Interpreter(ChatterBot chatterBot,
                       java.lang.String chatUserNickname,
                       java.lang.String chatUserUniqueId,
                       java.lang.String fsmStackId,
                       Fsm fsm)

  Constructs a new Interpreter object given the parent ChatterBot.
  Parameters:
    `chatterBot` - the parent ChatterBot
    `chatUserNickname` - the preferred name (possibly not unique) of the chat partner
    `chatUserUniqueId` - the unique id assigned to the user by the chat system

Method Detail

### receiveChatMessage

    public void receiveChatMessage(java.lang.String chatMessage)
                            throws CycApiException,
                                   java.io.IOException,
                                   java.net.UnknownHostException,
                                   ChatException

  Receives the given chat message from the given chat partner, obtains the performative, transitions to the corresponding state and performs the required action.
  Parameters:
    `chatPartner` - the name of the chat partner
    `chatMessage` - the chat message

### lookupArc

    protected Arc lookupArc(Performative performative)

  Returns the arc which corresponds to the performative received in the current state.
  Parameters:
    `performative` - the performative
  Returns:
    the arc which corresponds to the performative received in the current state

### transitionState

    protected void transitionState(Arc arc)

  Transitions to the to-state given in the arc, and performs the action.
  Parameters:
    `arc` - the finite state machine arc

### initialize

    public void initialize(java.lang.String fsmStackId,
                           Fsm fsm)

  Initializes the fsm interpreter.
  Parameters:
    `fsmStackId` - provides an id for the first fsm stack
    `fsm` - the initial fsm, which is also the sole object on the fsm stack

### sendChatMessage

    public void sendChatMessage(java.lang.String chatMessage)
                         throws ChatException

  Sends the given chat message into the chat system.
  Parameters:
    `chatMessage` - the chat message

### setStateAttribute

    public void setStateAttribute(java.lang.String attribute,
                                  java.lang.Object value)

  Sets the value for the given state attribute.
  Parameters:
    `attribute` - the key object
    `value` - the value object

### setNextPerformative

    public void setNextPerformative(Performative nextPerformative)

  Sets the value of the computed next performative.
  Parameters:
    `nextAction` - the computed next performative

### getStateAttribute

    public java.lang.Object getStateAttribute(java.lang.Object attribute)

  Returns the value for the given state attribute.
  Parameters:
    `attribute` - the key object

### setupSubFsm

    public void setupSubFsm(Fsm fsm,
                            java.util.ArrayList arguments)

  Sets up the given sub fsm and the input arguments as a list of attribute/value pairs.
  Parameters:
    `fsm` - the new fsm
    `arguments` - a list of Object arrays of length two, the first array element is the attribute and the second array element is its value

### pushFsmStateInfo

    public void pushFsmStateInfo(FsmStateInfo fsmStateInfo)

  Pushes the given fsm state onto the current fsm stack.
  Parameters:
    `fsmStateInfo` - the new fsm and its state

### popFsmStateInfo

    public void popFsmStateInfo()

  Pops the fsm state stack and restores the previous fsm state.