1 2 /** 3 * Module for Extended SCION impl. 4 * 5 * @class mmir.env.statemachine.engine.extended 6 */ 7 define(['dictionary', 'stringExtension'], function(Dictionary) { 8 9 /** 10 * @param {Engine} _scion 11 * the SCION engine instance 12 * 13 * @return {ExtendedEngine} 14 * the extended SCION engine instance 15 * 16 * @memberOf mmir.env.statemachine.engine.extended 17 */ 18 var extend = function (_scion) { 19 20 /* 21 * if (testbed._util) return testbed._util; 22 */ 23 24 /** @memberOf mmir.env.statemachine.engine.extended.private */ 25 var _states = []; 26 /** @memberOf mmir.env.statemachine.engine.extended.private */ 27 var _transitions = new Dictionary(); 28 /** @memberOf mmir.env.statemachine.engine.extended.private */ 29 var _events = new Dictionary(); 30 31 32 (function() { 33 34 /** @memberOf mmir.env.statemachine.engine.extended.private */ 35 var events = []; 36 /** @memberOf mmir.env.statemachine.engine.extended.private */ 37 var transitions = {}; 38 /** @memberOf mmir.env.statemachine.engine.extended.private */ 39 var states = _scion.model.states; 40 41 42 //temporary variables: 43 /** @memberOf mmir.env.statemachine.engine.extended.private */ 44 var n; 45 /** @memberOf mmir.env.statemachine.engine.extended.private */ 46 var stateObj; 47 /** @memberOf mmir.env.statemachine.engine.extended.private */ 48 var transitionObjects; 49 /** @memberOf mmir.env.statemachine.engine.extended.private */ 50 var m; 51 /** @memberOf mmir.env.statemachine.engine.extended.private */ 52 var ev; 53 /** @memberOf mmir.env.statemachine.engine.extended.private */ 54 var targets; 55 /** @memberOf mmir.env.statemachine.engine.extended.private */ 56 var targetObject; 57 /** @memberOf mmir.env.statemachine.engine.extended.private */ 58 var t; 59 60 // crawl all states, events and transitions 61 for (n = 0; n < states.length; n++) { 62 63 stateObj = states[n]; 64 65 var id = stateObj.id; 66 if (!id.startsWith('$')){ 67 _states.push(id); 68 } 69 70 transitionObjects = stateObj.transitions; 71 for (m = 0; m < transitionObjects.length; m++) { 72 73 targets = transitionObjects[m].targets; 74 ev = transitionObjects[m].events; 75 events = events.concat(ev); 76 77 if (targets) { 78 for (t = 0; t < targets.length; t++) { 79 80 targetObject = targets[t]; 81 if (typeof transitions[ev] === 'undefined') { 82 transitions[ev] = targetObject.id; 83 } 84 else { 85 var tmp = transitions[ev]; 86 87 if (typeof tmp === 'string') { 88 var a = new Array(); 89 a.push(targetObject.id); 90 } 91 else if (tmp instanceof Array) { 92 transitions[ev].push(targetObject[ev]); 93 } 94 } 95 } 96 } 97 else { 98 transitions[ev] = stateObj.id; 99 } 100 } 101 102 _transitions.put(stateObj.id, transitions); 103 transitions = {}; 104 105 _events.put(stateObj.id, events); 106 events = []; 107 } 108 109 })(); 110 111 /** @class ExtendedEngineImpl */ 112 return { 113 /** @scope ExtendedEngineImpl */ 114 115 /** @memberOf ExtendedEngineImpl */ 116 _scion : _scion, 117 118 _states : _states, 119 120 _events : _events, 121 122 _transitions : _transitions, 123 124 start : function() { 125 this._scion.start(); 126 }, 127 128 ignoreScript : function() { 129 this._scion.opts.retrace = true; 130 }, 131 132 evalScript : function() { 133 this._scion.opts.retrace = false; 134 }, 135 136 gen : function(event, data) { 137 this._scion.gen(event, data); 138 }, 139 140 getStates : function() { 141 return this._scion.getConfiguration(); 142 }, 143 144 getActiveStates : function() { 145 return this._scion.getFullConfiguration(); 146 }, 147 148 getEvents : function() { 149 var i, events = [], states = this._scion.getConfiguration(); 150 for (i = 0; i < states.length; i++) { 151 events = events.concat(this._events.get(states[i])); 152 } 153 return events; 154 }, 155 156 getActiveEvents : function() { 157 158 var i, events = [], states = this._scion.getFullConfiguration(); 159 160 for (i = 0; i < states.length; i++) { 161 events = events.concat(this._events.get(states[i])); 162 } 163 164 return events; 165 }, 166 167 getTransitions : function() { 168 169 var i, t, e, transitions = {}, states = this._scion.getConfiguration(); 170 171 for (i = 0; i < states.length; i++) { 172 173 t = this._transitions.get(states[i]); 174 175 for (e in t) { 176 transitions[e] = t[e]; 177 } 178 } 179 180 return transitions; 181 }, 182 183 getActiveTransitions : function() { 184 185 var i, t, e, transitions = {}, states = this._scion.getFullConfiguration(); 186 187 for (i = 0; i < states.length; i++) { 188 189 t = this._transitions.get(states[i]); 190 191 for (e in t) { 192 transitions[e] = t[e]; 193 } 194 } 195 196 return transitions; 197 } 198 199 };//END: return {... 200 201 };//END: extend = function(_scion) {... 202 203 return extend; 204 205 });//END: define(... 206