SCXML : State Chart XML
Events
Deux types d'évènements
Il existe deux types d'évènements à gérer avec la machine d'états : les évènements que l'on reçoit de la machine et les évènements que l'on veut envoyer à la machine. En effet, ces évènements dans le premier cas permettront de savoir dans quelle transition on se situe alors que dans le deuxième cas ils permettront d'effectuer une transition sur la machine.
Send Events
Pour envoyer un évènement à la machine, il faut utiliser l'objet TriggerEvent. Cet objet prend deux paramètres : un eventName qui est le nom de l'évènement qu'on veut lever, et un eventType SIGNAL_EVENT. Une fois l'objet créé, il faut le donner à la machine d'état (SCXMLExecutor) via sa méthode triggerEvent. Il est possible d'envoyer une série de TriggerEvent (tableau) via la méthode triggerEvents.
//import org.apache.commons.scxml.SCXMLExecutor; //import org.apache.commons.scxml.TriggerEvent; //import org.apache.commons.scxml.model.ModelException; // where "exec" is the SCXMLExecutor instance TriggerEvent te = new TriggerEvent("foo.bar", TriggerEvent.SIGNAL_EVENT); try { exec.triggerEvent(te); } catch (ModelException me) { // The events left the engine in inconsistent state }
Receive Events
Pour recevoir les évènements de la machine, il faut créer un objet SCXMLListener. Il s'agit d'une interface qui présente trois méthodes :
- onEntry : Cette méthode est appelée lorsque l'on rentre dans un état du diagramme
- onExit : Cette méthode est appelée lorsque l'on sort d'un état de la machine
- onTransition : Cette méthode est appelée lorsqu'une transition apparait
Une fois l'objet créé, il faut l'ajouter à la machine via la méthode addListener qui prend l'objet précédent en paramètre.
Pour plus d'informations...
Je vous invite à consulter le site officiel d'Apache ainsi que la Javadoc pour mieux appréhender les principes de fonctionnement des évènements.