6 eventVarCounterMap = {}
17 Skip = ['\n', '\t', ' ']
18 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
44 def ExtractFunctions(F, appName):
49 while (Temp != "EOF"):
50 if (Temp == "def" or Temp == "private"):
52 if (Temp == "def" or Temp == "private"):
55 if (GetToken(F) == "("): #We have a function to create object for
56 if (appName == "App1"):
57 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
58 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
59 extractedFunctionsApp1.write("%s\n" % NameofFunc)
61 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
62 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
63 extractedFunctionsApp2.write("%s\n" % NameofFunc)
65 #Check input capability
69 variable = GetToken(F)
70 Temp = GetToken(F) #Get '"'
71 Temp = GetToken(F) #Get ','
74 capability = GetToken(F)
75 capabilityMap[variable] = capability
77 #Check subscribed events
78 if (Temp == "subscribe"):
79 if (appName == "App1"):
87 while (Temp != "\"" and Temp != "app" and Temp != "location"):
91 if Temp == "app" or Temp == "location":
92 if Temp not in eventList:
93 eventList.append(Temp)
94 elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList):
95 # We do not repeat the same capability twice
96 capability = capabilityMap[variable]
97 capabilityList.append(capability)
98 eventList.append(Temp)
99 if Temp in eventVarMap.keys():
100 listOfEvents = eventVarMap[Temp]
101 listOfEvents.append(variable)
103 eventVarMap[Temp] = [variable]
104 #print "DEBUG: %s - %s" % (variable, Temp)
108 #Check and analyze capabilities for physical interaction
109 AnalyzeCapabilities(Temp, appName, F)
113 #Warn if there is a potential for physical interaction
114 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
115 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
117 def AnalyzeCapabilities(Temp, appName, F):
119 if (Temp == "capability.switch" or
120 Temp == "capability.switchLevel" or
121 Temp == "capability.illuminanceMeasurement" or
122 Temp == "capability.colorControl" or
124 Temp == "capability.motionSensor" or
125 Temp == "capability.accelerationSensor" or
127 Temp == "capability.valve" or
128 Temp == "capability.waterSensor" or
130 Temp == "capability.musicPlayer" or
131 Temp == "capability.alarm" or
132 Temp == "capability.speechSynthesis" or
133 Temp == "capability.soundSensor"):
134 if (appName == "App1"):
135 app1Capabilities.append(Temp)
137 app2Capabilities.append(Temp)
138 if (Temp == "capability"):
139 Temp = GetToken(F) #Get '"'
140 Temp = GetToken(F) #Get 'Music'
141 Temp = Temp + GetToken(F) #Get 'Player'
142 if (Temp == "MusicPlayer"):
143 if (appName == "App1"):
144 app1Capabilities.append("capability.musicPlayer")
146 app2Capabilities.append("capability.musicPlayer")
148 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
150 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
151 "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab):
152 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
154 # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion
155 if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab):
156 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
158 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
159 "capability.switch" in app2Capab):
160 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
162 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
163 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
164 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
166 def ExtractEvents(extractedEvents):
170 global eventVarCounterMap
171 extractedEvents.write("while(true) {\n")
172 extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventList) - 1))
173 extractedEvents.write("\tswitch(eventNumber) {\n")
174 for i in range(len(eventList)):
175 extractedEvents.write("\t\tcase %d:\n" % i)
176 if eventList[i] == "lock":
177 #Write two events subsequently
178 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
179 extractedEvents.write("\t\t\tif (event == 0) {\n")
180 event = open("eventSimulator/lockLockedEvent.groovy", "r")
182 extractedEvents.write("\t\t" + line)
184 extractedEvents.write("\t\t\t} else {\n")
185 event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
187 extractedEvents.write("\t\t" + line)
189 extractedEvents.write("\t\t\t}\n")
190 elif eventList[i] == "unlock":
191 event = open("eventSimulator/unlockEvent.groovy", "r")
193 extractedEvents.write(line)
195 elif eventList[i] == "contact.open":
196 event = open("eventSimulator/contactOpenEvent.groovy", "r")
198 extractedEvents.write(line)
200 elif eventList[i] == "contact.closed":
201 event = open("eventSimulator/contactClosedEvent.groovy", "r")
203 extractedEvents.write(line)
205 elif eventList[i] == "nfcTouch":
206 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
208 extractedEvents.write(line)
210 elif eventList[i] == "app": #Case for Touched event
211 event = open("eventSimulator/appTouchEvent.groovy", "r")
213 extractedEvents.write(line)
215 elif eventList[i] == "button":
216 #Write two events subsequently
217 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
218 extractedEvents.write("\t\t\tif (event == 0) {\n")
219 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
221 extractedEvents.write("\t\t" + line)
223 extractedEvents.write("\t\t\t} else {\n")
224 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
226 extractedEvents.write("\t\t" + line)
228 extractedEvents.write("\t\t\t}\n")
229 elif eventList[i] == "water":
230 #Write two events subsequently
231 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
232 extractedEvents.write("\t\t\tif (event == 0) {\n")
233 event = open("eventSimulator/waterDryEvent.groovy", "r")
235 extractedEvents.write("\t\t" + line)
237 extractedEvents.write("\t\t\t} else {\n")
238 event = open("eventSimulator/waterWetEvent.groovy", "r")
240 extractedEvents.write("\t\t" + line)
242 extractedEvents.write("\t\t\t}\n")
243 elif eventList[i] == "presence":
244 #Check which capability
245 variable = eventVarMap[eventList[i]]
246 if eventList[i] not in eventVarCounterMap.keys():
247 eventVarCounterMap[eventList[i]] = 1
250 eventVarCount = eventVarCounterMap[eventList[i]]
251 eventVarCounterMap[eventList[i]] = eventVarCount + 1
252 capability = capabilityMap[variable[eventVarCount]]
253 #Write three events subsequently
254 if capability == "capability.presenceSensor":
255 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
256 elif capability == "capability.beacon":
257 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
258 extractedEvents.write("\t\t\tif (event == 0) {\n")
259 if capability == "capability.presenceSensor":
260 event = open("eventSimulator/presencePresentEvent.groovy", "r")
261 elif capability == "capability.beacon":
262 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
264 extractedEvents.write("\t\t" + line)
266 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
267 if capability == "capability.presenceSensor":
268 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
269 elif capability == "capability.beacon":
270 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
272 extractedEvents.write("\t\t" + line)
274 elif eventList[i] == "presence.present": #Case for Touched event
275 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
277 extractedEvents.write("\t\t" + line)
279 elif eventList[i] == "doorState":
280 #Write two events subsequently
281 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
282 extractedEvents.write("\t\t\tif (event == 0) {\n")
283 event = open("eventSimulator/doorOpenEvent.groovy", "r")
285 extractedEvents.write("\t\t" + line)
287 extractedEvents.write("\t\t\t} else {\n")
288 event = open("eventSimulator/doorClosedEvent.groovy", "r")
290 extractedEvents.write("\t\t" + line)
292 extractedEvents.write("\t\t\t}\n")
293 elif eventList[i] == "motion":
294 #Write two events subsequently
295 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
296 extractedEvents.write("\t\t\tif (event == 0) {\n")
297 event = open("eventSimulator/motionActiveEvent.groovy", "r")
299 extractedEvents.write("\t\t" + line)
301 extractedEvents.write("\t\t\t} else {\n")
302 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
304 extractedEvents.write("\t\t" + line)
306 extractedEvents.write("\t\t\t}\n")
307 elif eventList[i] == "smoke":
308 #Write three events subsequently
309 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
310 extractedEvents.write("\t\t\tif (event == 0) {\n")
311 event = open("eventSimulator/smokeClearEvent.groovy", "r")
313 extractedEvents.write("\t\t" + line)
315 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
316 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
318 extractedEvents.write("\t\t" + line)
320 extractedEvents.write("\t\t\t} else {\n")
321 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
323 extractedEvents.write("\t\t" + line)
325 extractedEvents.write("\t\t\t}\n")
326 elif eventList[i] == "carbonMonoxide":
327 #Check which capability
328 variable = eventVarMap[eventList[i]]
329 if eventList[i] not in eventVarCounterMap.keys():
330 eventVarCounterMap[eventList[i]] = 1
333 eventVarCount = eventVarCounterMap[eventList[i]]
334 eventVarCounterMap[eventList[i]] = eventVarCount + 1
335 capability = capabilityMap[variable[eventVarCount]]
336 #Write three events subsequently
337 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
338 extractedEvents.write("\t\t\tif (event == 0) {\n")
339 if capability == "capability.smokeDetector":
340 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
341 elif capability == "capability.carbonMonoxideDetector":
342 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
344 extractedEvents.write("\t\t" + line)
346 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
347 if capability == "capability.smokeDetector":
348 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
349 elif capability == "capability.carbonMonoxideDetector":
350 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
352 extractedEvents.write("\t\t" + line)
354 extractedEvents.write("\t\t\t} else {\n")
355 if capability == "capability.smokeDetector":
356 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
357 elif capability == "capability.carbonMonoxideDetector":
358 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
360 extractedEvents.write("\t\t" + line)
362 extractedEvents.write("\t\t\t}\n")
363 elif eventList[i] == "battery":
364 #Check which capability
365 variable = eventVarMap[eventList[i]]
366 if eventList[i] not in eventVarCounterMap.keys():
367 eventVarCounterMap[eventList[i]] = 1
370 eventVarCount = eventVarCounterMap[eventList[i]]
371 eventVarCounterMap[eventList[i]] = eventVarCount + 1
372 capability = capabilityMap[variable[eventVarCount]]
373 if capability == "capability.smokeDetector":
374 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
375 elif capability == "capability.battery":
376 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
378 extractedEvents.write(line)
380 elif eventList[i] == "thermostatMode":
381 #Write five events subsequently
382 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
383 extractedEvents.write("\t\t\tif (event == 0) {\n")
384 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
386 extractedEvents.write("\t\t" + line)
388 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
389 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
391 extractedEvents.write("\t\t" + line)
393 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
394 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
396 extractedEvents.write("\t\t" + line)
398 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
399 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
401 extractedEvents.write("\t\t" + line)
403 extractedEvents.write("\t\t\t} else {\n")
404 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
406 extractedEvents.write("\t\t" + line)
408 extractedEvents.write("\t\t\t}\n")
409 elif eventList[i] == "thermostatFanMode":
410 #Write five events subsequently
411 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
412 extractedEvents.write("\t\t\tif (event == 0) {\n")
413 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
415 extractedEvents.write("\t\t" + line)
417 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
418 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
420 extractedEvents.write("\t\t" + line)
422 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
423 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
425 extractedEvents.write("\t\t" + line)
427 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
428 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
430 extractedEvents.write("\t\t" + line)
432 extractedEvents.write("\t\t\t} else {\n")
433 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
435 extractedEvents.write("\t\t" + line)
437 extractedEvents.write("\t\t\t}\n")
438 elif eventList[i] == "thermostatOperatingState":
439 #Write five events subsequently
440 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
441 extractedEvents.write("\t\t\tif (event == 0) {\n")
442 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
444 extractedEvents.write("\t\t" + line)
446 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
447 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
449 extractedEvents.write("\t\t" + line)
451 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
452 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
454 extractedEvents.write("\t\t" + line)
456 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
457 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
459 extractedEvents.write("\t\t" + line)
461 extractedEvents.write("\t\t\t} else {\n")
462 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
464 extractedEvents.write("\t\t" + line)
466 extractedEvents.write("\t\t\t}\n")
467 elif eventList[i] == "switch":
468 #Check which capability
469 variable = eventVarMap[eventList[i]]
470 if eventList[i] not in eventVarCounterMap.keys():
471 eventVarCounterMap[eventList[i]] = 1
474 eventVarCount = eventVarCounterMap[eventList[i]]
475 eventVarCounterMap[eventList[i]] = eventVarCount + 1
476 capability = capabilityMap[variable[eventVarCount]]
477 #Write two events subsequently
478 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
479 extractedEvents.write("\t\t\tif (event == 0) {\n")
480 if capability == "capability.switch":
481 event = open("eventSimulator/switchOnEvent.groovy", "r")
482 elif capability == "capability.switchLevel":
483 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
484 elif capability == "capability.relaySwitch":
485 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
487 extractedEvents.write("\t\t" + line)
489 extractedEvents.write("\t\t\t} else {\n")
490 if capability == "capability.switch":
491 event = open("eventSimulator/switchOffEvent.groovy", "r")
492 elif capability == "capability.switchLevel":
493 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
494 elif capability == "capability.relaySwitch":
495 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
497 extractedEvents.write("\t\t" + line)
499 extractedEvents.write("\t\t\t}\n")
500 elif eventList[i] == "location": #Case for Location event
501 #Write three events subsequently
502 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
503 extractedEvents.write("\t\t\tif (event == 0) {\n")
504 event = open("eventSimulator/locationHomeEvent.groovy", "r")
506 extractedEvents.write("\t\t" + line)
508 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
509 event = open("eventSimulator/locationAwayEvent.groovy", "r")
511 extractedEvents.write("\t\t" + line)
513 extractedEvents.write("\t\t\t} else {\n")
514 event = open("eventSimulator/locationNightEvent.groovy", "r")
516 extractedEvents.write("\t\t" + line)
518 extractedEvents.write("\t\t\t}\n")
519 elif eventList[i] == "acceleration":
520 #Write two events subsequently
521 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
522 extractedEvents.write("\t\t\tif (event == 0) {\n")
523 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
525 extractedEvents.write("\t\t" + line)
527 extractedEvents.write("\t\t\t} else {\n")
528 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
530 extractedEvents.write("\t\t" + line)
532 extractedEvents.write("\t\t\t}\n")
533 elif eventList[i] == "sleeping":
534 #Write two events subsequently
535 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
536 extractedEvents.write("\t\t\tif (event == 0) {\n")
537 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
539 extractedEvents.write("\t\t" + line)
541 extractedEvents.write("\t\t\t} else {\n")
542 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
544 extractedEvents.write("\t\t" + line)
546 extractedEvents.write("\t\t\t}\n")
547 elif eventList[i] == "goal":
548 event = open("eventSimulator/stepGoalEvent.groovy", "r")
550 extractedEvents.write(line)
552 elif eventList[i] == "steps":
553 event = open("eventSimulator/stepStepsEvent.groovy", "r")
555 extractedEvents.write(line)
557 elif eventList[i] == "color":
558 event = open("eventSimulator/colorChangeEvent.groovy", "r")
560 extractedEvents.write(line)
562 elif eventList[i] == "hue":
563 event = open("eventSimulator/hueChangeEvent.groovy", "r")
565 extractedEvents.write(line)
567 elif eventList[i] == "saturation":
568 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
570 extractedEvents.write(line)
572 elif eventList[i] == "energy":
573 event = open("eventSimulator/energyMeterEvent.groovy", "r")
575 extractedEvents.write(line)
577 elif eventList[i] == "power":
578 event = open("eventSimulator/powerMeterEvent.groovy", "r")
580 extractedEvents.write(line)
582 elif eventList[i] == "illuminance":
583 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
585 extractedEvents.write(line)
587 elif eventList[i] == "humidity":
588 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
590 extractedEvents.write(line)
592 elif eventList[i] == "alarm":
593 #Write four events subsequently
594 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,3)\n")
595 extractedEvents.write("\t\t\tif (event == 0) {\n")
596 event = open("eventSimulator/alarmBothEvent.groovy", "r")
598 extractedEvents.write("\t\t" + line)
600 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
601 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
603 extractedEvents.write("\t\t" + line)
605 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
606 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
608 extractedEvents.write("\t\t" + line)
610 extractedEvents.write("\t\t\t} else {\n")
611 event = open("eventSimulator/alarmOffEvent.groovy", "r")
613 extractedEvents.write("\t\t" + line)
615 extractedEvents.write("\t\t\t}\n")
616 elif eventList[i] == "contact":
617 #Check which capability
618 variable = eventVarMap[eventList[i]]
619 if eventList[i] not in eventVarCounterMap.keys():
620 eventVarCounterMap[eventList[i]] = 1
623 eventVarCount = eventVarCounterMap[eventList[i]]
624 eventVarCounterMap[eventList[i]] = eventVarCount + 1
625 capability = capabilityMap[variable[eventVarCount]]
626 #Write two events subsequently
627 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
628 extractedEvents.write("\t\t\tif (event == 0) {\n")
629 if capability == "capability.contactSensor":
630 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
631 elif capability == "capability.valve":
632 event = open("eventSimulator/valveClosedEvent.groovy", "r")
634 extractedEvents.write("\t\t" + line)
636 extractedEvents.write("\t\t\t} else {\n")
637 if capability == "capability.contactSensor":
638 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
639 elif capability == "capability.valve":
640 event = open("eventSimulator/valveOpenEvent.groovy", "r")
642 extractedEvents.write("\t\t" + line)
644 extractedEvents.write("\t\t\t}\n")
645 elif eventList[i] == "status":
646 #Write three events subsequently
647 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
648 extractedEvents.write("\t\t\tif (event == 0) {\n")
649 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
651 extractedEvents.write("\t\t" + line)
653 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
654 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
656 extractedEvents.write("\t\t" + line)
658 extractedEvents.write("\t\t\t} else {\n")
659 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
661 extractedEvents.write("\t\t" + line)
663 extractedEvents.write("\t\t\t}\n")
664 elif eventList[i] == "level":
665 #Check which capability
666 variable = eventVarMap[eventList[i]]
667 if eventList[i] not in eventVarCounterMap.keys():
668 eventVarCounterMap[eventList[i]] = 1
671 eventVarCount = eventVarCounterMap[eventList[i]]
672 eventVarCounterMap[eventList[i]] = eventVarCount + 1
673 capability = capabilityMap[variable[eventVarCount]]
674 if capability == "capability.musicPlayer":
675 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
676 elif capability == "capability.switchLevel":
677 event = open("eventSimulator/switchLevelEvent.groovy", "r")
679 extractedEvents.write(line)
681 elif eventList[i] == "trackDescription":
682 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
684 extractedEvents.write(line)
686 elif eventList[i] == "trackData":
687 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
689 extractedEvents.write(line)
691 elif eventList[i] == "mute":
692 #Write two events subsequently
693 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
694 extractedEvents.write("\t\t\tif (event == 0) {\n")
695 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
697 extractedEvents.write("\t\t" + line)
699 extractedEvents.write("\t\t\t} else {\n")
700 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
702 extractedEvents.write("\t\t" + line)
704 extractedEvents.write("\t\t\t}\n")
705 elif eventList[i] == "temperature":
706 #Check which capability
707 variable = eventVarMap[eventList[i]]
708 if eventList[i] not in eventVarCounterMap.keys():
709 eventVarCounterMap[eventList[i]] = 1
712 eventVarCount = eventVarCounterMap[eventList[i]]
713 eventVarCounterMap[eventList[i]] = eventVarCount + 1
714 capability = capabilityMap[variable[eventVarCount]]
715 if capability == "capability.thermostat":
716 event = open("eventSimulator/temperatureEvent.groovy", "r")
717 elif capability == "capability.temperatureMeasurement":
718 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
720 extractedEvents.write(line)
722 elif eventList[i] == "heatingSetpoint":
723 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
725 extractedEvents.write(line)
727 elif eventList[i] == "coolingSetpoint":
728 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
730 extractedEvents.write(line)
732 elif eventList[i] == "thermostatSetpoint":
733 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
735 extractedEvents.write(line)
738 ###TODO: Add more events later
739 extractedEvents.write("\t\t\tbreak\n")
740 extractedEvents.write("\t}\n")
741 extractedEvents.write("}\n")
743 def CheckIfOnlyTouchEvents():
744 #Check and throw an error if it is all touch events
745 #This is called Direct-Direct interaction and we do not model-check for this case
746 onlyTouchEvents = True
747 for item in eventList:
748 if item != "nfcTouch" and item != "app":
749 onlyTouchEvents = False
750 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
751 # Write error log file
752 extractError = open("appCreationError.log", "w+")
753 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
755 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
758 #Extract objects to call functions from App1
759 F1 = open("Extractor/App1/App1.groovy", "r")
760 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
761 ExtractFunctions(F1, "App1")
764 #Extract objects to call functions from App2
765 F2 = open("Extractor/App2/App2.groovy", "r")
766 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
767 ExtractFunctions(F2, "App2")
770 #Prepare eventSimulator file while parsing the App1 and App2 files
771 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
772 CheckIfOnlyTouchEvents()
773 ExtractEvents(extractedEvents)
774 extractedEvents.close()
776 #Save the extracted methods and app1 in a same file to extract information
777 extractorFile = open("Extractor/extractorFile.groovy", "w+")
778 Extractor = open("Extractor/Extractor.groovy", "r")
779 F1 = open("Extractor/App1/App1.groovy", "r")
781 extractorFile.write("////////////////////\n")
782 extractorFile.write("@Field App\n")
783 extractorFile.write("App = \"App1\"")
784 extractorFile.write("\n")
785 for line in Extractor:
786 extractorFile.write(line)
787 extractorFile.write("\n\n")
789 extractorFile.write(line)
790 extractorFile.close()
793 #Run the file to extract the objects
794 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
797 #Save the extracted methods and app2 in a same file to extract information
798 extractorFile = open("Extractor/extractorFile.groovy", "w+")
799 Extractor = open("Extractor/Extractor.groovy", "r")
800 F2 = open("Extractor/App2/App2.groovy", "r")
802 extractorFile.write("////////////////////\n")
803 extractorFile.write("@Field App\n")
804 extractorFile.write("App = \"App2\"")
805 extractorFile.write("\n")
806 for line in Extractor:
807 extractorFile.write(line)
808 extractorFile.write("\n\n")
810 extractorFile.write(line)
811 #Run the file to extract the objects
812 extractorFile.close()
815 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")