ステートマシン図からのコード生成例(Java)

<< 目次を表示 >>

ページ位置:  ソースコードの生成と読み込み > 振る舞いモデルからのソースコード生成 > ステートマシン図からのソースコード生成 >

ステートマシン図からのコード生成例(Java)

 

private enum StateType: int

    {

         ProcessOrder_Delivered,

         ProcessOrder_Packed,

         ProcessOrder_Closed,

         ProcessOrder_Dispatched,

         ProcessOrder_New,

         ST_NOSTATE

    }

    private enum TransitionType: int

    {

         ProcessOrder_Delivered_to_ProcessOrder_Closed,

         TT_NOTRANSITION

    }

    private enum CommandType

    {

         Do,

         Entry,

         Exit

    }

    private StateType currState;

    private StateType nextState;

    private TransitionType currTransition;

    private boolean transcend;

    private StateType ProcessOrder_history;

    private void processOrder_Delivered(CommandType command)

    {

         switch(command)

         {

              case Do:

              {

                   // Do Behaviors..

                   setStatus(Delivered);

                   // State's Transitions

                   if((status==Delivered))

                   {

                        nextState = StateType.ProcessOrder_Closed;

                        currTransition = TransitionType.ProcessOrder_Delivered_to_ProcessOrder_Closed;

                   }

                   break;

              }

              default:

             {

                  break;

             }

         }

    }

    private void processOrder_Packed(CommandType command)

    {

         switch(command)

         {

              case Do:

              {

                   // Do Behaviors..

                   setStatus(Packed);

                   // State's Transitions

                   nextState = StateType.ProcessOrder_Dispatched;

                   break;

              }

              default:

              {

                   break;

              }

         }

    }

    private void processOrder_Closed(CommandType command)

    {

         switch(command)

         {

              case Do:

              {

                   // Do Behaviors..

                   // State's Transitions

                   break;

              }

              default:

              {

                   break;

              }

         }

    }

    private void processOrder_Dispatched(CommandType command)

    {

         switch(command)

         {

              case Do:

              {

                   // Do Behaviors..

                   setStatus(Dispatched);

                   // State's Transitions

                   nextState = StateType.ProcessOrder_Delivered;

                   break;

              }

              default:

              {

                   break;

              }

         }

    }

    private void processOrder_New(CommandType command)

    {

         switch(command)

         {

              case Do:

              {

                   // Do Behaviors..

                   setStatus(new);

                   // State's Transitions

                   nextState = StateType.ProcessOrder_Packed;

                   break;

              }

              default:

              {

                   break;

              }

         }

    }

    private void StatesProc(StateType currState, CommandType command)

    {

         switch(currState)

         {

              case ProcessOrder_Delivered:

              {

                   processOrder_Delivered(command);

                   break;

              }

              case ProcessOrder_Packed:

              {

                   processOrder_Packed(command);

                   break;

              }

              case ProcessOrder_Closed:

              {

                   processOrder_Closed(command);

                   break;

              }

              case ProcessOrder_Dispatched:

              {

                   processOrder_Dispatched(command);

                   break;

              }

              case ProcessOrder_New:

              {

                   processOrder_New(command);

                   break;

              }

              default:

              break;

         }

    }

    private void TransitionsProc(TransitionType transition)

    {

         switch(transition)

         {

              case ProcessOrder_Delivered_to_ProcessOrder_Closed:

              {

                   setStatus(closed);

                   break;

              }

              default:

              break;

         }

    }

    private void initalizeStateMachine()

    {

         currState = StateType.ProcessOrder_New;

         nextState = StateType.ST_NOSTATE;

         currTransition = TransitionType.TT_NOTRANSITION;

    }

    private void runStateMachine()

    {

         while (true)

         {

              if (currState == StateType.ST_NOSTATE)

              {

                   break;

              }

              currTransition = TransitionType.TT_NOTRANSITION;

              StatesProc(currState, CommandType.Do);

              // then check if there is any valid transition assigned after the do behavior

              if (nextState == StateType.ST_NOSTATE)

              {

                   break;

              }

              if (currTransition != TransitionType.TT_NOTRANSITION)

              {

                   TransitionsProc(currTransition);

              }

              if (currState != nextState)

             {

                  StatesProc(currState, CommandType.Exit);

                  StatesProc(nextState, CommandType.Entry);

                  currState = nextState;

              }

         }

    }