Example #1
0
 /**
  * @param SimpleXMLElement $xml
  * @param StateMachine $sm
  * @return static
  */
 public static function fromXml(SimpleXMLElement $xml, StateMachine $sm)
 {
     $rVal = new static();
     // Attach the statemachine
     $rVal->sm = $sm;
     // Value and Label
     $rVal->value = (string) $xml->attributes()->value;
     $rVal->label = (string) $xml->attributes()->label;
     // Load events
     foreach ($xml->event as $eventXml) {
         $rVal->events[] = Event::fromXml($eventXml, $sm, $rVal);
     }
     // Load timeouts
     foreach ($xml->timeout as $timeoutXml) {
         $rVal->timeouts[] = Timeout::fromXml($timeoutXml, $sm, $rVal);
     }
     // Enter Commands XML fragments
     $enterXml = !empty($xml->enter) ? $xml->enter[0]->command : [];
     foreach ($enterXml as $item) {
         $rVal->enter[] = $item;
     }
     // Exit Commands XML fragments
     $exitXml = !empty($xml->exit) ? $xml->exit[0]->command : [];
     foreach ($exitXml as $item) {
         $rVal->exit[] = $item;
     }
     $rVal->isInitial = $sm->getInitialStateValue() === $rVal->value;
     $rVal->isFinal = empty($rVal->events);
     return $rVal;
 }