5 eventAppList = [] # This list maps App1 or App2 to a specific event
7 eventVarCounterMap = {}
15 # Mapping for event type and number of events
16 # e.g., switch has 2 events: on and off
17 eventTypeCounterMap = {'lock': 2,
21 'tamper.tampered' : 1,
29 'presence.present' : 1,
33 'motion.inactive' : 1,
39 'carbonMonoxide.clear' : 1,
40 'carbonMonoxide.detected' : 1,
41 'carbonMonoxide.tested' : 1,
44 'thermostatFanMode' : 5,
45 'thermostatOperatingState' : 5,
52 'acceleration.active' : 1,
53 'acceleration.inactive' : 1,
58 'colorTemperature' : 1,
69 'trackDescription' : 1,
73 'heatingSetpoint' : 1,
74 'coolingSetpoint' : 1,
75 'thermostatSetpoint' : 1}
80 Skip = ['\n', '\t', ' ']
81 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
107 def ExtractFunctions(F, appName):
113 while (Temp != "EOF"):
114 if (Temp == "def" or Temp == "private"):
116 if (Temp == "def" or Temp == "private"):
119 if (GetToken(F) == "("): #We have a function to create object for
120 if (appName == "App1"):
121 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
122 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
123 extractedFunctionsApp1.write("%s\n" % NameofFunc)
125 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
126 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
127 extractedFunctionsApp2.write("%s\n" % NameofFunc)
129 #Check input capability
130 if (Temp == "input"):
133 variable = GetToken(F)
134 Temp = GetToken(F) #Get '"'
135 Temp = GetToken(F) #Get ','
138 capability = GetToken(F)
139 capabilityMap[variable] = capability
141 #Check subscribed events
142 if (Temp == "subscribe"):
143 if (appName == "App1"):
151 while (Temp != "\"" and Temp != "app" and Temp != "location"):
156 #print "DEBUG: %s - %s" % (variable, Temp)
158 if Temp == "app" or Temp == "location":
159 if Temp not in eventList:
160 eventList.append(Temp)
161 if (appName == "App1"):
162 eventAppList.append("App1")
164 eventAppList.append("App2")
165 elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList):
166 # We do not repeat the same capability twice
167 capability = capabilityMap[variable]
168 capabilityList.append(capability)
169 eventList.append(Temp)
170 if (appName == "App1"):
171 eventAppList.append("App1")
173 eventAppList.append("App2")
174 if Temp in eventVarMap.keys():
175 listOfEvents = eventVarMap[Temp]
176 listOfEvents.append(variable)
178 eventVarMap[Temp] = [variable]
179 #print "DEBUG: %s - %s" % (variable, Temp)
183 #Check and analyze capabilities for physical interaction
184 AnalyzeCapabilities(Temp, appName, F)
188 #Warn if there is a potential for physical interaction
189 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
190 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
192 def AnalyzeCapabilities(Temp, appName, F):
194 if (Temp == "capability.switch" or
195 Temp == "capability.switchLevel" or
196 Temp == "capability.illuminanceMeasurement" or
197 Temp == "capability.colorControl" or
199 Temp == "capability.motionSensor" or
200 Temp == "capability.accelerationSensor" or
202 Temp == "capability.valve" or
203 Temp == "capability.waterSensor" or
205 Temp == "capability.musicPlayer" or
206 Temp == "capability.alarm" or
207 Temp == "capability.speechSynthesis" or
208 Temp == "capability.soundSensor"):
209 if (appName == "App1"):
210 app1Capabilities.append(Temp)
212 app2Capabilities.append(Temp)
213 if (Temp == "capability"):
214 Temp = GetToken(F) #Get '"'
215 Temp = GetToken(F) #Get 'Music'
216 Temp = Temp + GetToken(F) #Get 'Player'
217 if (Temp == "MusicPlayer"):
218 if (appName == "App1"):
219 app1Capabilities.append("capability.musicPlayer")
221 app2Capabilities.append("capability.musicPlayer")
223 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
225 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
226 "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab):
227 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
229 # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion
230 if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab):
231 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
233 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
234 "capability.switch" in app2Capab):
235 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
237 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
238 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
239 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
243 numOfActualEvents = 0
244 for event in eventList:
245 numOfActualEvents = numOfActualEvents + eventTypeCounterMap[event]
246 return numOfActualEvents
248 def ExtractEvents(extractedEvents):
253 global eventVarCounterMap
254 # Count the number of events
255 numOfActualEvents = CountEvents()
256 extractedEvents.write("while(true) {\n")
257 extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1))
258 extractedEvents.write("\tswitch(eventNumber) {\n")
261 indexApp2 = eventAppList.index("App2")
262 indexApp2Start = indexApp2
263 #print "DEBUG: App1: %d" % indexApp1
264 #print "DEBUG: App2: %d" % indexApp2
265 #print "DEBUG: eventList: %d" % len(eventList)
267 while counter < len(eventList):
268 # Interleave events from App1 and App2
271 indexApp1 = indexApp1 + 1
272 if indexApp2 < len(eventList):
276 indexApp2 = indexApp2 + 1
277 if indexApp1 < indexApp2Start:
279 print "DEBUG: i: %d" % i
280 extractedEvents.write("\t\tcase %d:\n" % counter)
281 if eventList[i] == "lock":
282 #Write two events subsequently
283 event = open("eventSimulator/lockLockedEvent.groovy", "r")
285 extractedEvents.write(line)
287 extractedEvents.write("\n\t\t\tbreak\n")
288 counter = counter + 1
289 extractedEvents.write("\t\tcase %d:\n" % counter)
290 event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
292 extractedEvents.write(line)
294 elif eventList[i] == "unlock":
295 #Don't do anything for this case
296 counter = counter - 1
297 elif eventList[i] == "contact.open":
298 event = open("eventSimulator/contactOpenEvent.groovy", "r")
300 extractedEvents.write(line)
302 elif eventList[i] == "contact.closed":
303 event = open("eventSimulator/contactClosedEvent.groovy", "r")
305 extractedEvents.write(line)
307 elif eventList[i] == "tamper.tampered":
308 #Write two events subsequently
309 event = open("eventSimulator/tamperTamperedOpenEvent.groovy", "r")
311 extractedEvents.write(line)
313 extractedEvents.write("\n\t\t\tbreak\n")
314 counter = counter + 1
315 extractedEvents.write("\t\tcase %d:\n" % counter)
316 event = open("eventSimulator/tamperTamperedClosedEvent.groovy", "r")
318 extractedEvents.write(line)
320 elif eventList[i] == "nfcTouch":
321 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
323 extractedEvents.write(line)
325 elif eventList[i] == "app": #Case for Touched event
326 event = open("eventSimulator/appTouchEvent.groovy", "r")
328 extractedEvents.write(line)
330 elif eventList[i] == "button":
331 #Write two events subsequently
332 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
334 extractedEvents.write(line)
336 extractedEvents.write("\n\t\t\tbreak\n")
337 counter = counter + 1
338 extractedEvents.write("\t\tcase %d:\n" % counter)
339 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
341 extractedEvents.write(line)
343 elif eventList[i] == "water":
344 #Write two events subsequently
345 event = open("eventSimulator/waterDryEvent.groovy", "r")
347 extractedEvents.write(line)
349 extractedEvents.write("\n\t\t\tbreak\n")
350 counter = counter + 1
351 extractedEvents.write("\t\tcase %d:\n" % counter)
352 event = open("eventSimulator/waterWetEvent.groovy", "r")
354 extractedEvents.write(line)
356 elif eventList[i] == "water.dry":
357 event = open("eventSimulator/waterDefaultDryEvent.groovy", "r")
359 extractedEvents.write(line)
361 elif eventList[i] == "water.wet":
362 event = open("eventSimulator/waterDefaultWetEvent.groovy", "r")
364 extractedEvents.write(line)
366 elif eventList[i] == "presence":
367 #Check which capability
368 variable = eventVarMap[eventList[i]]
369 if eventList[i] not in eventVarCounterMap.keys():
370 eventVarCounterMap[eventList[i]] = 1
373 eventVarCount = eventVarCounterMap[eventList[i]]
374 eventVarCounterMap[eventList[i]] = eventVarCount + 1
375 capability = capabilityMap[variable[eventVarCount]]
376 #Write two events subsequently
377 if capability == "capability.presenceSensor":
378 event = open("eventSimulator/presencePresentEvent.groovy", "r")
379 elif capability == "capability.beacon":
380 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
382 extractedEvents.write(line)
384 extractedEvents.write("\n\t\t\tbreak\n")
385 counter = counter + 1
386 extractedEvents.write("\t\tcase %d:\n" % counter)
387 if capability == "capability.presenceSensor":
388 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
389 elif capability == "capability.beacon":
390 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
392 extractedEvents.write(line)
394 elif eventList[i] == "presence.present": #Case for Touched event
395 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
397 extractedEvents.write(line)
399 elif eventList[i] == "doorState":
400 #Write two events subsequently
401 event = open("eventSimulator/doorOpenEvent.groovy", "r")
403 extractedEvents.write(line)
405 extractedEvents.write("\n\t\t\tbreak\n")
406 counter = counter + 1
407 extractedEvents.write("\t\tcase %d:\n" % counter)
408 event = open("eventSimulator/doorClosedEvent.groovy", "r")
410 extractedEvents.write(line)
412 elif eventList[i] == "motion":
413 #Write two events subsequently
414 event = open("eventSimulator/motionActiveEvent.groovy", "r")
416 extractedEvents.write(line)
418 extractedEvents.write("\n\t\t\tbreak\n")
419 counter = counter + 1
420 extractedEvents.write("\t\tcase %d:\n" % counter)
421 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
423 extractedEvents.write(line)
425 elif eventList[i] == "motion.active":
426 event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r")
428 extractedEvents.write(line)
430 elif eventList[i] == "motion.inactive":
431 event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r")
433 extractedEvents.write(line)
435 elif eventList[i] == "smoke":
436 #Write three events subsequently
437 event = open("eventSimulator/smokeClearEvent.groovy", "r")
439 extractedEvents.write(line)
441 extractedEvents.write("\n\t\t\tbreak\n")
442 counter = counter + 1
443 extractedEvents.write("\t\tcase %d:\n" % counter)
444 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
446 extractedEvents.write(line)
448 extractedEvents.write("\n\t\t\tbreak\n")
449 counter = counter + 1
450 extractedEvents.write("\t\tcase %d:\n" % counter)
451 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
453 extractedEvents.write(line)
455 elif eventList[i] == "smoke.clear":
456 event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r")
458 extractedEvents.write(line)
460 elif eventList[i] == "smoke.detected":
461 event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r")
463 extractedEvents.write(line)
465 elif eventList[i] == "smoke.tested":
466 event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r")
468 extractedEvents.write(line)
470 elif eventList[i] == "carbonMonoxide":
471 #Check which capability
472 variable = eventVarMap[eventList[i]]
473 if eventList[i] not in eventVarCounterMap.keys():
474 eventVarCounterMap[eventList[i]] = 1
477 eventVarCount = eventVarCounterMap[eventList[i]]
478 eventVarCounterMap[eventList[i]] = eventVarCount + 1
479 capability = capabilityMap[variable[eventVarCount]]
480 #Write three events subsequently
481 if capability == "capability.smokeDetector":
482 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
483 elif capability == "capability.carbonMonoxideDetector":
484 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
486 extractedEvents.write(line)
488 extractedEvents.write("\n\t\t\tbreak\n")
489 counter = counter + 1
490 extractedEvents.write("\t\tcase %d:\n" % counter)
491 if capability == "capability.smokeDetector":
492 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
493 elif capability == "capability.carbonMonoxideDetector":
494 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
496 extractedEvents.write(line)
498 extractedEvents.write("\n\t\t\tbreak\n")
499 counter = counter + 1
500 extractedEvents.write("\t\tcase %d:\n" % counter)
501 if capability == "capability.smokeDetector":
502 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
503 elif capability == "capability.carbonMonoxideDetector":
504 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
506 extractedEvents.write(line)
508 elif eventList[i] == "carbonMonoxide.clear":
509 #Check which capability
510 variable = eventVarMap[eventList[i]]
511 if eventList[i] not in eventVarCounterMap.keys():
512 eventVarCounterMap[eventList[i]] = 1
515 eventVarCount = eventVarCounterMap[eventList[i]]
516 eventVarCounterMap[eventList[i]] = eventVarCount + 1
517 capability = capabilityMap[variable[eventVarCount]]
518 if capability == "capability.smokeDetector":
519 event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r")
520 elif capability == "capability.carbonMonoxideDetector":
521 event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r")
523 extractedEvents.write(line)
525 elif eventList[i] == "carbonMonoxide.detected":
526 #Check which capability
527 variable = eventVarMap[eventList[i]]
528 if eventList[i] not in eventVarCounterMap.keys():
529 eventVarCounterMap[eventList[i]] = 1
532 eventVarCount = eventVarCounterMap[eventList[i]]
533 eventVarCounterMap[eventList[i]] = eventVarCount + 1
534 capability = capabilityMap[variable[eventVarCount]]
535 if capability == "capability.smokeDetector":
536 event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r")
537 elif capability == "capability.carbonMonoxideDetector":
538 event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r")
540 extractedEvents.write(line)
542 elif eventList[i] == "carbonMonoxide.tested":
543 #Check which capability
544 variable = eventVarMap[eventList[i]]
545 if eventList[i] not in eventVarCounterMap.keys():
546 eventVarCounterMap[eventList[i]] = 1
549 eventVarCount = eventVarCounterMap[eventList[i]]
550 eventVarCounterMap[eventList[i]] = eventVarCount + 1
551 capability = capabilityMap[variable[eventVarCount]]
552 if capability == "capability.smokeDetector":
553 event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r")
554 elif capability == "capability.carbonMonoxideDetector":
555 event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r")
557 extractedEvents.write(line)
559 elif eventList[i] == "battery":
560 #Check which capability
561 variable = eventVarMap[eventList[i]]
562 if eventList[i] not in eventVarCounterMap.keys():
563 eventVarCounterMap[eventList[i]] = 1
566 eventVarCount = eventVarCounterMap[eventList[i]]
567 eventVarCounterMap[eventList[i]] = eventVarCount + 1
568 capability = capabilityMap[variable[eventVarCount]]
569 if capability == "capability.smokeDetector":
570 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
571 elif capability == "capability.battery":
572 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
574 extractedEvents.write(line)
576 elif eventList[i] == "thermostatMode":
577 #Write five events subsequently
578 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
580 extractedEvents.write(line)
582 extractedEvents.write("\n\t\t\tbreak\n")
583 counter = counter + 1
584 extractedEvents.write("\t\tcase %d:\n" % counter)
585 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
587 extractedEvents.write(line)
589 extractedEvents.write("\n\t\t\tbreak\n")
590 counter = counter + 1
591 extractedEvents.write("\t\tcase %d:\n" % counter)
592 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
594 extractedEvents.write(line)
596 extractedEvents.write("\n\t\t\tbreak\n")
597 counter = counter + 1
598 extractedEvents.write("\t\tcase %d:\n" % counter)
599 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
601 extractedEvents.write(line)
603 extractedEvents.write("\n\t\t\tbreak\n")
604 counter = counter + 1
605 extractedEvents.write("\t\tcase %d:\n" % counter)
606 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
608 extractedEvents.write(line)
610 elif eventList[i] == "thermostatFanMode":
611 #Write five events subsequently
612 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
614 extractedEvents.write(line)
616 extractedEvents.write("\n\t\t\tbreak\n")
617 counter = counter + 1
618 extractedEvents.write("\t\tcase %d:\n" % counter)
619 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
621 extractedEvents.write(line)
623 extractedEvents.write("\n\t\t\tbreak\n")
624 counter = counter + 1
625 extractedEvents.write("\t\tcase %d:\n" % counter)
626 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
628 extractedEvents.write(line)
630 extractedEvents.write("\n\t\t\tbreak\n")
631 counter = counter + 1
632 extractedEvents.write("\t\tcase %d:\n" % counter)
633 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
635 extractedEvents.write(line)
637 extractedEvents.write("\n\t\t\tbreak\n")
638 counter = counter + 1
639 extractedEvents.write("\t\tcase %d:\n" % counter)
640 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
642 extractedEvents.write(line)
644 elif eventList[i] == "thermostatOperatingState":
645 #Write five events subsequently
646 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
648 extractedEvents.write(line)
650 extractedEvents.write("\n\t\t\tbreak\n")
651 counter = counter + 1
652 extractedEvents.write("\t\tcase %d:\n" % counter)
653 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
655 extractedEvents.write(line)
657 extractedEvents.write("\n\t\t\tbreak\n")
658 counter = counter + 1
659 extractedEvents.write("\t\tcase %d:\n" % counter)
660 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
662 extractedEvents.write(line)
664 extractedEvents.write("\n\t\t\tbreak\n")
665 counter = counter + 1
666 extractedEvents.write("\t\tcase %d:\n" % counter)
667 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
669 extractedEvents.write(line)
671 extractedEvents.write("\n\t\t\tbreak\n")
672 counter = counter + 1
673 extractedEvents.write("\t\tcase %d:\n" % counter)
674 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
676 extractedEvents.write(line)
678 elif eventList[i] == "switch":
679 #Check which capability
680 variable = eventVarMap[eventList[i]]
681 if eventList[i] not in eventVarCounterMap.keys():
682 eventVarCounterMap[eventList[i]] = 1
685 eventVarCount = eventVarCounterMap[eventList[i]]
686 eventVarCounterMap[eventList[i]] = eventVarCount + 1
687 capability = capabilityMap[variable[eventVarCount]]
688 #Write two events subsequently
689 if capability == "capability.switch":
690 event = open("eventSimulator/switchOnEvent.groovy", "r")
691 elif capability == "capability.switchLevel":
692 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
693 elif capability == "capability.relaySwitch":
694 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
695 elif capability == "capability.colorControl":
696 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
697 elif capability == "capability.colorTemperature":
698 event = open("eventSimulator/colorTemperatureSwitchOnEvent.groovy", "r")
700 extractedEvents.write(line)
702 extractedEvents.write("\n\t\t\tbreak\n")
703 counter = counter + 1
704 extractedEvents.write("\t\tcase %d:\n" % counter)
705 if capability == "capability.switch":
706 event = open("eventSimulator/switchOffEvent.groovy", "r")
707 elif capability == "capability.switchLevel":
708 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
709 elif capability == "capability.relaySwitch":
710 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
711 elif capability == "capability.colorControl":
712 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
713 elif capability == "capability.colorTemperature":
714 event = open("eventSimulator/colorTemperatureSwitchOffEvent.groovy", "r")
716 extractedEvents.write(line)
718 elif eventList[i] == "switch.on":
719 #Check which capability
720 variable = eventVarMap[eventList[i]]
721 if eventList[i] not in eventVarCounterMap.keys():
722 eventVarCounterMap[eventList[i]] = 1
725 eventVarCount = eventVarCounterMap[eventList[i]]
726 eventVarCounterMap[eventList[i]] = eventVarCount + 1
727 capability = capabilityMap[variable[eventVarCount]]
728 #Write two events subsequently
729 if capability == "capability.switch":
730 event = open("eventSimulator/switchOnDefaultEvent.groovy", "r")
731 elif capability == "capability.switchLevel":
732 event = open("eventSimulator/switchLevelOnDefaultEvent.groovy", "r")
733 elif capability == "capability.relaySwitch":
734 event = open("eventSimulator/relaySwitchOnDefaultEvent.groovy", "r")
735 elif capability == "capability.colorControl":
736 event = open("eventSimulator/colorControlSwitchOnDefaultEvent.groovy", "r")
737 elif capability == "capability.colorTemperature":
738 event = open("eventSimulator/colorTemperatureSwitchOnDefaultEvent.groovy", "r")
740 extractedEvents.write(line)
742 elif eventList[i] == "switch.off":
743 #Check which capability
744 variable = eventVarMap[eventList[i]]
745 if eventList[i] not in eventVarCounterMap.keys():
746 eventVarCounterMap[eventList[i]] = 1
749 eventVarCount = eventVarCounterMap[eventList[i]]
750 eventVarCounterMap[eventList[i]] = eventVarCount + 1
751 capability = capabilityMap[variable[eventVarCount]]
752 #Write two events subsequently
753 if capability == "capability.switch":
754 event = open("eventSimulator/switchOffDefaultEvent.groovy", "r")
755 elif capability == "capability.switchLevel":
756 event = open("eventSimulator/switchLevelOffDefaultEvent.groovy", "r")
757 elif capability == "capability.relaySwitch":
758 event = open("eventSimulator/relaySwitchOffDefaultEvent.groovy", "r")
759 elif capability == "capability.colorControl":
760 event = open("eventSimulator/colorControlSwitchOffDefaultEvent.groovy", "r")
761 elif capability == "capability.colorTemperature":
762 event = open("eventSimulator/colorTemperatureSwitchOffDefaultEvent.groovy", "r")
764 extractedEvents.write(line)
766 elif eventList[i] == "location": #Case for Location event
767 #Write three events subsequently
768 event = open("eventSimulator/locationHomeEvent.groovy", "r")
770 extractedEvents.write(line)
772 extractedEvents.write("\n\t\t\tbreak\n")
773 counter = counter + 1
774 extractedEvents.write("\t\tcase %d:\n" % counter)
775 event = open("eventSimulator/locationAwayEvent.groovy", "r")
777 extractedEvents.write(line)
779 extractedEvents.write("\n\t\t\tbreak\n")
780 counter = counter + 1
781 extractedEvents.write("\t\tcase %d:\n" % counter)
782 event = open("eventSimulator/locationNightEvent.groovy", "r")
784 extractedEvents.write(line)
786 elif eventList[i] == "mode":
787 #Write three events subsequently
788 event = open("eventSimulator/modeHomeEvent.groovy", "r")
790 extractedEvents.write(line)
792 extractedEvents.write("\n\t\t\tbreak\n")
793 counter = counter + 1
794 extractedEvents.write("\t\tcase %d:\n" % counter)
795 event = open("eventSimulator/modeAwayEvent.groovy", "r")
797 extractedEvents.write(line)
799 extractedEvents.write("\n\t\t\tbreak\n")
800 counter = counter + 1
801 extractedEvents.write("\t\tcase %d:\n" % counter)
802 event = open("eventSimulator/modeNightEvent.groovy", "r")
804 extractedEvents.write(line)
806 elif eventList[i] == "acceleration":
807 #Write two events subsequently
808 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
810 extractedEvents.write(line)
812 extractedEvents.write("\n\t\t\tbreak\n")
813 counter = counter + 1
814 extractedEvents.write("\t\tcase %d:\n" % counter)
815 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
817 extractedEvents.write(line)
819 elif eventList[i] == "acceleration.active":
820 event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r")
822 extractedEvents.write(line)
824 elif eventList[i] == "acceleration.inactive":
825 event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r")
827 extractedEvents.write(line)
829 elif eventList[i] == "sleeping":
830 #Write two events subsequently
831 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
833 extractedEvents.write(line)
835 extractedEvents.write("\n\t\t\tbreak\n")
836 counter = counter + 1
837 extractedEvents.write("\t\tcase %d:\n" % counter)
838 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
840 extractedEvents.write(line)
842 elif eventList[i] == "goal":
843 event = open("eventSimulator/stepGoalEvent.groovy", "r")
845 extractedEvents.write(line)
847 elif eventList[i] == "steps":
848 event = open("eventSimulator/stepStepsEvent.groovy", "r")
850 extractedEvents.write(line)
852 elif eventList[i] == "color":
853 event = open("eventSimulator/colorChangeEvent.groovy", "r")
855 extractedEvents.write(line)
857 elif eventList[i] == "colorTemperature":
858 event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
860 extractedEvents.write(line)
862 elif eventList[i] == "hue":
863 event = open("eventSimulator/hueChangeEvent.groovy", "r")
865 extractedEvents.write(line)
867 elif eventList[i] == "saturation":
868 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
870 extractedEvents.write(line)
872 elif eventList[i] == "energy":
873 event = open("eventSimulator/energyMeterEvent.groovy", "r")
875 extractedEvents.write(line)
877 elif eventList[i] == "power":
878 event = open("eventSimulator/powerMeterEvent.groovy", "r")
880 extractedEvents.write(line)
882 elif eventList[i] == "illuminance":
883 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
885 extractedEvents.write(line)
887 elif eventList[i] == "humidity":
888 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
890 extractedEvents.write(line)
892 elif eventList[i] == "alarm":
893 #Write four events subsequently
894 event = open("eventSimulator/alarmBothEvent.groovy", "r")
896 extractedEvents.write(line)
898 extractedEvents.write("\n\t\t\tbreak\n")
899 counter = counter + 1
900 extractedEvents.write("\t\tcase %d:\n" % counter)
901 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
903 extractedEvents.write(line)
905 extractedEvents.write("\n\t\t\tbreak\n")
906 counter = counter + 1
907 extractedEvents.write("\t\tcase %d:\n" % counter)
908 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
910 extractedEvents.write(line)
912 extractedEvents.write("\n\t\t\tbreak\n")
913 counter = counter + 1
914 extractedEvents.write("\t\tcase %d:\n" % counter)
915 event = open("eventSimulator/alarmOffEvent.groovy", "r")
917 extractedEvents.write(line)
919 elif eventList[i] == "contact":
920 #Check which capability
921 variable = eventVarMap[eventList[i]]
922 if eventList[i] not in eventVarCounterMap.keys():
923 eventVarCounterMap[eventList[i]] = 1
926 eventVarCount = eventVarCounterMap[eventList[i]]
927 eventVarCounterMap[eventList[i]] = eventVarCount + 1
928 capability = capabilityMap[variable[eventVarCount]]
929 #Write two events subsequently
930 if capability == "capability.contactSensor":
931 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
932 elif capability == "capability.valve":
933 event = open("eventSimulator/valveClosedEvent.groovy", "r")
935 extractedEvents.write(line)
937 extractedEvents.write("\n\t\t\tbreak\n")
938 counter = counter + 1
939 extractedEvents.write("\t\tcase %d:\n" % counter)
940 if capability == "capability.contactSensor":
941 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
942 elif capability == "capability.valve":
943 event = open("eventSimulator/valveOpenEvent.groovy", "r")
945 extractedEvents.write(line)
947 elif eventList[i] == "status":
948 #Write three events subsequently
949 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
951 extractedEvents.write(line)
953 extractedEvents.write("\n\t\t\tbreak\n")
954 counter = counter + 1
955 extractedEvents.write("\t\tcase %d:\n" % counter)
956 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
958 extractedEvents.write(line)
960 extractedEvents.write("\n\t\t\tbreak\n")
961 counter = counter + 1
962 extractedEvents.write("\t\tcase %d:\n" % counter)
963 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
965 extractedEvents.write(line)
967 elif eventList[i] == "level":
968 #Check which capability
969 variable = eventVarMap[eventList[i]]
970 if eventList[i] not in eventVarCounterMap.keys():
971 eventVarCounterMap[eventList[i]] = 1
974 eventVarCount = eventVarCounterMap[eventList[i]]
975 eventVarCounterMap[eventList[i]] = eventVarCount + 1
976 capability = capabilityMap[variable[eventVarCount]]
977 if capability == "capability.musicPlayer":
978 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
979 elif capability == "capability.switchLevel":
980 event = open("eventSimulator/switchLevelEvent.groovy", "r")
981 elif capability == "capability.colorControl":
982 event = open("eventSimulator/colorLevelChangeEvent.groovy", "r")
984 extractedEvents.write(line)
986 elif eventList[i] == "trackDescription":
987 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
989 extractedEvents.write(line)
991 elif eventList[i] == "trackData":
992 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
994 extractedEvents.write(line)
996 elif eventList[i] == "mute":
997 #Write two events subsequently
998 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
1000 extractedEvents.write(line)
1002 extractedEvents.write("\n\t\t\tbreak\n")
1003 counter = counter + 1
1004 extractedEvents.write("\t\tcase %d:\n" % counter)
1005 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
1007 extractedEvents.write(line)
1009 elif eventList[i] == "temperature":
1010 #Check which capability
1011 variable = eventVarMap[eventList[i]]
1012 if eventList[i] not in eventVarCounterMap.keys():
1013 eventVarCounterMap[eventList[i]] = 1
1016 eventVarCount = eventVarCounterMap[eventList[i]]
1017 eventVarCounterMap[eventList[i]] = eventVarCount + 1
1018 capability = capabilityMap[variable[eventVarCount]]
1019 if capability == "capability.thermostat":
1020 event = open("eventSimulator/temperatureEvent.groovy", "r")
1021 elif capability == "capability.temperatureMeasurement":
1022 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
1024 extractedEvents.write(line)
1026 elif eventList[i] == "heatingSetpoint":
1027 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
1029 extractedEvents.write(line)
1031 elif eventList[i] == "coolingSetpoint":
1032 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
1034 extractedEvents.write(line)
1036 elif eventList[i] == "thermostatSetpoint":
1037 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
1039 extractedEvents.write(line)
1042 ###TODO: Add more events later
1043 extractedEvents.write("\n\t\t\tbreak\n")
1044 counter = counter + 1
1045 extractedEvents.write("\t}\n")
1046 extractedEvents.write("}\n")
1048 def CheckIfOnlyTouchEvents():
1049 #Check and throw an error if it is all touch events
1050 #This is called Direct-Direct interaction and we do not model-check for this case
1051 onlyTouchEvents = True
1052 for item in eventList:
1053 if item != "nfcTouch" and item != "app":
1054 onlyTouchEvents = False
1055 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
1056 # Write error log file
1057 extractError = open("appCreationError.log", "w+")
1058 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
1059 extractError.close()
1060 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
1063 #Extract objects to call functions from App1
1064 F1 = open("Extractor/App1/App1.groovy", "r")
1065 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
1066 ExtractFunctions(F1, "App1")
1069 #Extract objects to call functions from App2
1070 F2 = open("Extractor/App2/App2.groovy", "r")
1071 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
1072 ExtractFunctions(F2, "App2")
1075 #Prepare eventSimulator file while parsing the App1 and App2 files
1076 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
1077 CheckIfOnlyTouchEvents()
1078 ExtractEvents(extractedEvents)
1079 extractedEvents.close()
1081 #Save the extracted methods and app1 in a same file to extract information
1082 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1083 Extractor = open("Extractor/Extractor.groovy", "r")
1084 F1 = open("Extractor/App1/App1.groovy", "r")
1086 extractorFile.write("////////////////////\n")
1087 extractorFile.write("@Field App\n")
1088 extractorFile.write("App = \"App1\"")
1089 extractorFile.write("\n")
1090 for line in Extractor:
1091 extractorFile.write(line)
1092 extractorFile.write("\n\n")
1094 extractorFile.write(line)
1095 extractorFile.close()
1098 #Run the file to extract the objects
1099 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
1102 #Save the extracted methods and app2 in a same file to extract information
1103 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1104 Extractor = open("Extractor/Extractor.groovy", "r")
1105 F2 = open("Extractor/App2/App2.groovy", "r")
1107 extractorFile.write("////////////////////\n")
1108 extractorFile.write("@Field App\n")
1109 extractorFile.write("App = \"App2\"")
1110 extractorFile.write("\n")
1111 for line in Extractor:
1112 extractorFile.write(line)
1113 extractorFile.write("\n\n")
1115 extractorFile.write(line)
1116 #Run the file to extract the objects
1117 extractorFile.close()
1120 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")