123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- /* Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
- Date: Fri Aug 05 16:08:36 2016
- Model author: Raphael Mannadiar
- Model name: Traffic_Light_JavaScript_Version
- */
- // package "Traffic_Light_JavaScript_Version"
- var Traffic_Light_JavaScript_Version = {};
- (function() {
- var MainApp = function(controller) {
- RuntimeClassBase.call(this, controller);
-
- this.semantics.big_step_maximality = StatechartSemantics.TakeMany;
- this.semantics.internal_event_lifeline = StatechartSemantics.Queue;
- this.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep;
- this.semantics.priority = StatechartSemantics.SourceParent;
- this.semantics.concurrency = StatechartSemantics.Single;
-
- // build Statechart structure
- this.build_statechart_structure();
-
- // call user defined constructor
- MainApp.prototype.user_defined_constructor.call(this);
- };
- MainApp.prototype = new Object();
- (function() {
- var proto = new RuntimeClassBase();
- for (prop in proto) {
- MainApp.prototype[prop] = proto[prop];
- }
- })();
- MainApp.prototype.user_defined_constructor = function() {
- this.canvas = ui.append_canvas(ui.window,100,310,{'background':'#eee'});
- var police_button = ui.append_button(ui.window, 'Police interrupt');
- var quit_button = ui.append_button(ui.window, 'Quit');
- ui.bind_event(police_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'police_interrupt_clicked');
- ui.bind_event(quit_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'quit_clicked');
- };
- MainApp.prototype.user_defined_destructor = function() {
- };
- // builds Statechart structure
- MainApp.prototype.build_statechart_structure = function() {
-
- // state <root>
- this.states[""] = new State(0, this);
-
- // state /initializing
- this.states["/initializing"] = new State(1, this);
-
- // state /creating
- this.states["/creating"] = new State(2, this);
-
- // state /initialized
- this.states["/initialized"] = new State(3, this);
-
- // add children
- this.states[""].addChild(this.states["/initializing"]);
- this.states[""].addChild(this.states["/creating"]);
- this.states[""].addChild(this.states["/initialized"]);
- this.states[""].fixTree();
- this.states[""].default_state = this.states["/initializing"];
-
- // transition /initializing
- var _initializing_0 = new Transition(this, this.states["/initializing"], [this.states["/creating"]]);
- _initializing_0.setAction(this._initializing_0_exec);
- _initializing_0.setTrigger(null);
- this.states["/initializing"].addTransition(_initializing_0);
-
- // transition /creating
- var _creating_0 = new Transition(this, this.states["/creating"], [this.states["/initialized"]]);
- _creating_0.setAction(this._creating_0_exec);
- _creating_0.setTrigger(new Event("instance_created", null));
- this.states["/creating"].addTransition(_creating_0);
- };
- MainApp.prototype._initializing_0_exec = function(parameters) {
- this.big_step.outputEventOM(new Event("create_instance", null, [this, "trafficlight", "TrafficLight", this.canvas]));
- };
- MainApp.prototype._creating_0_exec = function(parameters) {
- var association_name = parameters[0];
- this.big_step.outputEventOM(new Event("start_instance", null, [this, association_name]));
- this.big_step.outputEventOM(new Event("narrow_cast", null, [this, association_name, new Event("set_association_name", null, [association_name])]));
- };
- MainApp.prototype.initializeStatechart = function() {
- // enter default state
- var states = this.states["/initializing"].getEffectiveTargetStates();
- this.updateConfiguration(states);
- for (var state_idx in states) {
- if (!states.hasOwnProperty(state_idx)) continue;
- var state = states[state_idx]
- if (state.enter) {
- state.enter();
- }
- }
- };
- // add symbol 'MainApp' to package 'Traffic_Light_JavaScript_Version'
- Traffic_Light_JavaScript_Version.MainApp = MainApp;
- var TrafficLight = function(controller, canvas) {
- RuntimeClassBase.call(this, controller);
-
- this.semantics.big_step_maximality = StatechartSemantics.TakeMany;
- this.semantics.internal_event_lifeline = StatechartSemantics.Queue;
- this.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep;
- this.semantics.priority = StatechartSemantics.SourceParent;
- this.semantics.concurrency = StatechartSemantics.Single;
-
- // build Statechart structure
- this.build_statechart_structure();
-
- // call user defined constructor
- TrafficLight.prototype.user_defined_constructor.call(this, canvas);
- };
- TrafficLight.prototype = new Object();
- (function() {
- var proto = new RuntimeClassBase();
- for (prop in proto) {
- TrafficLight.prototype[prop] = proto[prop];
- }
- })();
- TrafficLight.prototype.user_defined_constructor = function(canvas) {
- var size = 100;
- var offset = size+5;
- this.RED = 0;
- this.YELLOW = 1;
- this.GREEN = 2;
- this.colors = ['#f00','#ff0','#0f0']
- this.lights = [canvas.add_rectangle(size/2, size/2, size, size, {'fill':'#000'}),
- canvas.add_rectangle(size/2, size/2+offset, size, size, {'fill':'#000'}),
- canvas.add_rectangle(size/2, size/2+2*offset, size, size, {'fill':'#000'})];
- };
- TrafficLight.prototype.user_defined_destructor = function() {
- };
- // user defined method
- TrafficLight.prototype.clear = function() {
- this.lights[this.RED].set_color('#000');
- this.lights[this.YELLOW].set_color('#000');
- this.lights[this.GREEN].set_color('#000');
- };
- // user defined method
- TrafficLight.prototype.setGreen = function() {
- this.clear();
- this.lights[this.GREEN].set_color(this.colors[this.GREEN]);
- };
- // user defined method
- TrafficLight.prototype.setYellow = function() {
- this.clear();
- this.lights[this.YELLOW].set_color(this.colors[this.YELLOW]);
- };
- // user defined method
- TrafficLight.prototype.setRed = function() {
- this.clear();
- this.lights[this.RED].set_color(this.colors[this.RED]);
- };
- // builds Statechart structure
- TrafficLight.prototype.build_statechart_structure = function() {
-
- // state <root>
- this.states[""] = new State(0, this);
-
- // state /on
- this.states["/on"] = new State(1, this);
-
- // state /on/normal
- this.states["/on/normal"] = new State(2, this);
-
- // state /on/normal/red
- this.states["/on/normal/red"] = new State(3, this);
- this.states["/on/normal/red"].setEnter(this._on_normal_red_enter);
- this.states["/on/normal/red"].setExit(this._on_normal_red_exit);
-
- // state /on/normal/green
- this.states["/on/normal/green"] = new State(4, this);
- this.states["/on/normal/green"].setEnter(this._on_normal_green_enter);
- this.states["/on/normal/green"].setExit(this._on_normal_green_exit);
-
- // state /on/normal/yellow
- this.states["/on/normal/yellow"] = new State(5, this);
- this.states["/on/normal/yellow"].setEnter(this._on_normal_yellow_enter);
- this.states["/on/normal/yellow"].setExit(this._on_normal_yellow_exit);
-
- // state /on/normal/history
- this.states["/on/normal/history"] = new ShallowHistoryState(6, this);
-
- // state /on/interrupted
- this.states["/on/interrupted"] = new State(7, this);
-
- // state /on/interrupted/yellow
- this.states["/on/interrupted/yellow"] = new State(8, this);
- this.states["/on/interrupted/yellow"].setEnter(this._on_interrupted_yellow_enter);
- this.states["/on/interrupted/yellow"].setExit(this._on_interrupted_yellow_exit);
-
- // state /on/interrupted/black
- this.states["/on/interrupted/black"] = new State(9, this);
- this.states["/on/interrupted/black"].setEnter(this._on_interrupted_black_enter);
- this.states["/on/interrupted/black"].setExit(this._on_interrupted_black_exit);
-
- // state /off
- this.states["/off"] = new State(10, this);
- this.states["/off"].setEnter(this._off_enter);
-
- // add children
- this.states[""].addChild(this.states["/on"]);
- this.states[""].addChild(this.states["/off"]);
- this.states["/on"].addChild(this.states["/on/normal"]);
- this.states["/on"].addChild(this.states["/on/interrupted"]);
- this.states["/on/normal"].addChild(this.states["/on/normal/red"]);
- this.states["/on/normal"].addChild(this.states["/on/normal/green"]);
- this.states["/on/normal"].addChild(this.states["/on/normal/yellow"]);
- this.states["/on/normal"].addChild(this.states["/on/normal/history"]);
- this.states["/on/interrupted"].addChild(this.states["/on/interrupted/yellow"]);
- this.states["/on/interrupted"].addChild(this.states["/on/interrupted/black"]);
- this.states[""].fixTree();
- this.states[""].default_state = this.states["/on"];
- this.states["/on"].default_state = this.states["/on/normal"];
- this.states["/on/normal"].default_state = this.states["/on/normal/red"];
- this.states["/on/interrupted"].default_state = this.states["/on/interrupted/yellow"];
-
- // transition /on/normal/red
- var _on_normal_red_0 = new Transition(this, this.states["/on/normal/red"], [this.states["/on/normal/green"]]);
- _on_normal_red_0.setTrigger(new Event("_0after"));
- this.states["/on/normal/red"].addTransition(_on_normal_red_0);
-
- // transition /on/normal/green
- var _on_normal_green_0 = new Transition(this, this.states["/on/normal/green"], [this.states["/on/normal/yellow"]]);
- _on_normal_green_0.setTrigger(new Event("_1after"));
- this.states["/on/normal/green"].addTransition(_on_normal_green_0);
-
- // transition /on/normal/yellow
- var _on_normal_yellow_0 = new Transition(this, this.states["/on/normal/yellow"], [this.states["/on/normal/red"]]);
- _on_normal_yellow_0.setTrigger(new Event("_2after"));
- this.states["/on/normal/yellow"].addTransition(_on_normal_yellow_0);
-
- // transition /on/interrupted/yellow
- var _on_interrupted_yellow_0 = new Transition(this, this.states["/on/interrupted/yellow"], [this.states["/on/interrupted/black"]]);
- _on_interrupted_yellow_0.setTrigger(new Event("_3after"));
- this.states["/on/interrupted/yellow"].addTransition(_on_interrupted_yellow_0);
-
- // transition /on/interrupted/black
- var _on_interrupted_black_0 = new Transition(this, this.states["/on/interrupted/black"], [this.states["/on/interrupted/yellow"]]);
- _on_interrupted_black_0.setTrigger(new Event("_4after"));
- this.states["/on/interrupted/black"].addTransition(_on_interrupted_black_0);
-
- // transition /on
- var _on_0 = new Transition(this, this.states["/on"], [this.states["/off"]]);
- _on_0.setTrigger(new Event("quit_clicked", "ui"));
- this.states["/on"].addTransition(_on_0);
-
- // transition /on/normal
- var _on_normal_0 = new Transition(this, this.states["/on/normal"], [this.states["/on/interrupted"]]);
- _on_normal_0.setTrigger(new Event("police_interrupt_clicked", "ui"));
- this.states["/on/normal"].addTransition(_on_normal_0);
-
- // transition /on/interrupted
- var _on_interrupted_0 = new Transition(this, this.states["/on/interrupted"], [this.states["/on/normal/history"]]);
- _on_interrupted_0.setTrigger(new Event("police_interrupt_clicked", "ui"));
- this.states["/on/interrupted"].addTransition(_on_interrupted_0);
- };
- TrafficLight.prototype._on_normal_red_enter = function() {
- this.addTimer(0, 3);
- this.setRed();
- };
- TrafficLight.prototype._on_normal_red_exit = function() {
- this.removeTimer(0);
- };
- TrafficLight.prototype._on_normal_green_enter = function() {
- this.addTimer(1, 2);
- this.setGreen();
- };
- TrafficLight.prototype._on_normal_green_exit = function() {
- this.removeTimer(1);
- };
- TrafficLight.prototype._on_normal_yellow_enter = function() {
- this.addTimer(2, 1);
- this.setYellow();
- };
- TrafficLight.prototype._on_normal_yellow_exit = function() {
- this.removeTimer(2);
- };
- TrafficLight.prototype._on_interrupted_yellow_enter = function() {
- this.addTimer(3, .5);
- this.setYellow();
- };
- TrafficLight.prototype._on_interrupted_yellow_exit = function() {
- this.removeTimer(3);
- };
- TrafficLight.prototype._on_interrupted_black_enter = function() {
- this.addTimer(4, .5);
- this.clear();
- };
- TrafficLight.prototype._on_interrupted_black_exit = function() {
- this.removeTimer(4);
- };
- TrafficLight.prototype._off_enter = function() {
- this.clear();
- };
- TrafficLight.prototype.initializeStatechart = function() {
- // enter default state
- var states = this.states["/on"].getEffectiveTargetStates();
- this.updateConfiguration(states);
- for (var state_idx in states) {
- if (!states.hasOwnProperty(state_idx)) continue;
- var state = states[state_idx]
- if (state.enter) {
- state.enter();
- }
- }
- };
- // add symbol 'TrafficLight' to package 'Traffic_Light_JavaScript_Version'
- Traffic_Light_JavaScript_Version.TrafficLight = TrafficLight;
- var ObjectManager = function(controller) {
- ObjectManagerBase.call(this, controller);
- };
- ObjectManager.prototype = new Object();
- (function() {
- var proto = new ObjectManagerBase();
- for (prop in proto) {
- ObjectManager.prototype[prop] = proto[prop];
- }
- })();
- ObjectManager.prototype.instantiate = function(class_name, construct_params) {
- if (class_name === "MainApp") {
- var instance = new MainApp(this.controller);
- instance.associations = new Object();
- instance.associations["trafficlight"] = new Association("TrafficLight", 0, -1);
- } else if (class_name === "TrafficLight") {
- var instance = new TrafficLight(this.controller, construct_params[0]);
- instance.associations = new Object();
- } else {
- throw new Error("Cannot instantiate class " + class_name);
- }
- return instance;
- };
- // add symbol 'ObjectManager' to package 'Traffic_Light_JavaScript_Version'
- Traffic_Light_JavaScript_Version.ObjectManager = ObjectManager;
- var Controller = function(event_loop_callbacks, finished_callback, behind_schedule_callback) {
- if (finished_callback === undefined) finished_callback = null;
- if (behind_schedule_callback === undefined) behind_schedule_callback = null;
- EventLoopControllerBase.call(this, new ObjectManager(this), event_loop_callbacks, finished_callback, behind_schedule_callback);
- this.addInputPort("ui");
- this.object_manager.createInstance("MainApp", new Array());
- };
- Controller.prototype = new Object();
- (function() {
- var proto = new EventLoopControllerBase();
- for (prop in proto) {
- Controller.prototype[prop] = proto[prop];
- }
- })();
- // add symbol 'Controller' to package 'Traffic_Light_JavaScript_Version'
- Traffic_Light_JavaScript_Version.Controller = Controller;
- })();
|