# com.beasys.commerce.ebusiness.order
StateMachine Class

public class StateMachine
extends `Object`
implements `Serializable`

A class for implementing finite state machines. The state machine is created by parsing an XML document, classes\orderstatus.xml.
The state machine helps get valid transitions based on a current transition, so that an Order Status can be moved to a valid new state.

Hierarchy
  `Object`
  `StateMachine`

All Implemented Interfaces
  `Serializable`

## Constructor Summary

StateMachine(`String` domDocFile) Constructor that takes as a parameter the name of an XML specification for the state machine.

## Method Summary

`public `String`` | `getFirstState`() Gets the first state an order can be set to, which should correspond to a SUBMITTED state.
`public `String`` | `getNextStateName`(`String` currStateName, `String` event) Gets the state that results from sending a specified event to a specified state.
`public `String`[]` | `getValidEvents`(`String` stateName) Gets the names of the events associated with transitions that lead from a specified state
`public `String`` | `handleEvent`(`Object` targetObject, `String` currStateName, `String` event) Handles an event for a given object, in particular invokes the onExitMethod, onEntryMethod, and doMethod if they exists
`public static void` | `main`(`String`[] argv) A testing 'main' that uses the classes\orderstatus.xml and show a tree of the possible transitions

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

## Constructor Detail

### StateMachine

    public StateMachine(String domDocFile)

  Constructor that takes as a parameter the name of an XML specification for the state machine.

## Method Detail

### getFirstState() Method

    public String getFirstState()
         throws StateTransitionException

Gets the first state an order can be set to, which should correspond to a SUBMITTED state.

#### Returns

the 'first' state, the source of transitions.

#### Exceptions

``StateTransitionException``

### getNextStateName(String, String) Method

    public String getNextStateName(String currStateName,
                                   String event)
         throws StateTransitionException

Gets the state that results from sending a specified event to a specified state.

#### Parameters

currStateName
  The name of the current state

event
  The event to be sent to the current state

#### Returns

The name of the new state

#### Exceptions

``StateTransitionException``

### getValidEvents(String) Method

    public String[] getValidEvents(String stateName)

Gets the names of the events associated with transitions that lead from a specified state

#### Parameters

stateName
  the name of a state in the machine

#### Returns

an array of String, one per reachable events.

### handleEvent(Object, String, String) Method

    public String handleEvent(Object targetObject,
                              String currStateName,
                              String event)
         throws StateTransitionException

Handles an event for a given object, in particular invokes the onExitMethod, onEntryMethod, and doMethod if they exists

#### Parameters

targetObject
  the target of the handling

currStateName
  based on the current state, decides on which action to take

event
  based on the event being handled, decides on which action to take

#### Returns

the new state the object has moved to.

#### Exceptions

``StateTransitionException``

### main(String[]) Method

    public static void main(String[] argv)

A testing 'main' that uses the classes\orderstatus.xml and show a tree of the possible transitions