izzum\statemachine\loader\XML::load PHP 메소드

load() 공개 메소드

{@inheritDoc}
public load ( StateMachine $stateMachine )
$stateMachine izzum\statemachine\StateMachine
    public function load(StateMachine $stateMachine)
    {
        //load the xml in a php object structure. suppres warning with @ operator since we explicitely check the return value
        $xml = @simplexml_load_string($this->getXML());
        if ($xml === false) {
            //could not load
            throw new Exception(sprintf('could not load xml data. check the xml format'), Exception::BAD_LOADERDATA);
        }
        $name = $stateMachine->getContext()->getMachine();
        $found = false;
        $data = null;
        foreach ($xml->machine as $data) {
            if ((string) @$data->name === $name) {
                $found = true;
                break;
            }
        }
        if (!$found) {
            //no name match found
            throw new Exception(sprintf('no machine data found for %s in xml. seems like a wrong configuration.', $name), Exception::BAD_LOADERDATA);
        }
        //accessing xml as an object with the @ error suppresion operator ('shut the fuck up' operator)
        //allows you to get properties, even if they do not exist, without notices.
        //this let's us be a littlebit lazy since we know some nonessential properties could not be there
        $states = array();
        foreach ($data->states->state as $state) {
            $tmp = new State((string) $state->name, (string) $state->type, (string) @$state->entry_command, (string) @$state->exit_command, (string) @$state->entry_callable, (string) @$state->exit_callable);
            $tmp->setDescription((string) @$state->description);
            $states[$tmp->getName()] = $tmp;
        }
        $transitions = array();
        foreach ($data->transitions->transition as $transition) {
            $tmp = new Transition($states[(string) @$transition->state_from], $states[(string) @$transition->state_to], (string) @$transition->event, (string) @$transition->rule, (string) @$transition->command, (string) @$transition->guard_callable, (string) @$transition->transition_callable);
            $tmp->setDescription((string) @$transition->description);
            $transitions[] = $tmp;
        }
        //delegate to loader
        $loader = new LoaderArray($transitions);
        return $loader->load($stateMachine);
    }