/**
* Checks a fully loaded statemachine for a valid configuration.
*
* This is useful in a debug situation so you can check for the validity of
* rules, commands and callables in guard logic, transition logic and state entry/exit logic
* before they hit a
*
* This does not instantiate any objects. It just checks if callables can be found
* and if classes for rules and commands can be found
*
* @param StateMachine $machine
* @return Exception[] an array of exceptions if anything is wrong with the configuration
*/
public static function checkConfiguration(StateMachine $machine)
{
//TODO: also check the rules and commands
$exceptions = array();
$output = array();
//check state callables
foreach ($machine->getStates() as $state) {
$exceptions[] = self::getExceptionForCheckingCallable($state->getExitCallable(), State::CALLABLE_ENTRY, $state);
$exceptions[] = self::getExceptionForCheckingCallable($state->getEntryCallable(), State::CALLABLE_ENTRY, $state);
}
//check transition callables
foreach ($machine->getTransitions() as $transition) {
$exceptions[] = self::getExceptionForCheckingCallable($transition->getGuardCallable(), Transition::CALLABLE_GUARD, $transition);
$exceptions[] = self::getExceptionForCheckingCallable($transition->getTransitionCallable(), Transition::CALLABLE_TRANSITION, $transition);
}
//get the exceptions
foreach ($exceptions as $e) {
if (is_a($e, '\\Exception')) {
$output[] = $e;
}
}
return $output;
}