From 254ee6f47eebfc00462c10756a92066e82cc1a96 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 21 Jun 2011 15:46:02 +0200 Subject: Initial commit --- .../instance/stateMachine/StateMachine.java | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100755 source/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java (limited to 'source/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java') diff --git a/source/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java b/source/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java new file mode 100755 index 0000000..da7419c --- /dev/null +++ b/source/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java @@ -0,0 +1,142 @@ + +package com.c2kernel.lifecycle.instance.stateMachine; + +import java.io.Serializable; + +import com.c2kernel.lifecycle.instance.Activity; +import com.c2kernel.utils.Logger; + +/** + * @version $Revision: 1.30 $ $Date: 2004/06/04 09:39:19 $ + * @author $Author: sgaspard $ + */ +/** this class represents the link between 2 successive activities */ +public class StateMachine implements Serializable +{ + public int state = 0; + private Activity activity; + + public static final String SKIPPABLE = "Skippable"; + public static final String REPEATABLE = "Repeatable"; + public static final String IGNORABLE = "Ignorable"; + public static final String AUTOSTART = "Autostart"; + + + /** + * Method StateMachine. + * @param act + */ + public StateMachine(Activity act) + { + activity = act; + } + + /** row : States from (WAITING,RESERVED,STARTED,SUSPENDED,FINISHED,RWAITING,RRESERVED,RSTARTED,RSUSPENDED) + * collumn : transition (RESERVE,START,SKIP,DONE,COMPLETE,SUSPEND,REASIGN,RESUME,REPEAT,IGNORE,PROCEED) + * cell : State that is reached (-1 if transition not allowed) + */ + private int[][] getCurrentMachine() + { + int [][] returnArray = + { /*RESERVE, START, SKIP, DONE,COMPLETE,SUSPEND,REASIGN,RESUME, REPEAT, IGNORE, PROCEED*/ + /*0 WAITING*/ { 1,getActive()?2:-1,getSkippable()?4:-1,getActive()?4:-1, -1, -1, -1, -1, -1, -1, -1},/*0 WAITING*/ + /*1 RESERVED*/ { -1,getActive()?2:-1,getSkippable()?4:-1,getActive()?4:-1, -1, -1, -1, -1, -1, 0, -1},/*1 RESERVED*/ + /*2 STARTED*/ { -1, -1, -1, -1, 4, 3, -1, -1, -1,getIgnorable()?0:-1, -1},/*2 STARTED*/ + /*3 SUSPENDED*/ { -1, -1, -1, -1, -1, -1, 2, 2, -1,getIgnorable()?0:-1, -1},/*3 SUSPENDED*/ + /*4 FINISHED*/ { -1, -1, -1, -1, -1, -1, -1, -1,getRepeatable()?!getAutoStart()?5:7:-1, -1,getActive()?4:-1},/*4 FINISHED*/ + /*5 RWAITING*/ { 6,getActive()?7:-1,getSkippable()?4:-1,getActive()?4:-1, -1, -1, -1, -1, -1, -1, -1},/*5 RWAITING*/ + /*6 RRESERVED*/ { -1,getActive()?7:-1,getSkippable()?4:-1,getActive()?4:-1, -1, -1, -1, -1, -1, -1, -1},/*6 RRESERVED*/ + /*7 RSTARTED*/ { -1, -1, -1, -1, 4, 8, -1, -1, -1,getIgnorable()?5:-1, -1},/*7 RSTARTED*/ + /*8 RSUSPENDED*/ { -1, -1, -1, -1, -1, -1, 8, 7, -1, -1, -1} /*8 RSUSPENDED*/ + }; + return returnArray; + } + + /** + * @see java.lang.Object#Object() + */ + public StateMachine() + { + } + + /** + * Method getCurrentState. + * @return String + */ + public int getCurrentState() + { + return state; + } + + /** + * Method possibleTransition. + * @return String[] + */ + public int[] possibleTransition() + { + int[] trans = new int[9]; + int cmpt = 0; + for (int i=0; i< getCurrentMachine()[state].length;i++) + if (getCurrentMachine()[state][i]!=-1) trans[cmpt++]=i; + + int [] result = new int[cmpt]; + for (int i=0;i -1) { + state=newState; + return true; + } + Logger.msg("StateMachine.traverse() - Illegal transition "+Transitions.getTransitionName(transition)+" from "+States.getStateName(state)); + return false; + } + public int simulate(int transition) + { + return getCurrentMachine()[state][transition]; + } + /** + * Returns the ignorable. + * @return boolean + */ + public boolean getIgnorable() + { + return ((Boolean)activity.getProperties().get(IGNORABLE)).booleanValue(); + } + + /** + * Returns the repeatable. + * @return boolean + */ + public boolean getRepeatable() + { + return ((Boolean)activity.getProperties().get(REPEATABLE)).booleanValue(); + } + + /** + * Returns the skippable. + * @return boolean + */ + public boolean getSkippable() + { + return ((Boolean)activity.getProperties().get(SKIPPABLE)).booleanValue(); + } + + public boolean getAutoStart() + { + return ((Boolean)activity.getProperties().get(AUTOSTART)).booleanValue(); + } + public boolean getActive() + { + return activity.getActive(); + } + +} -- cgit v1.2.3