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,
50 'acceleration.active' : 1,
51 'acceleration.inactive' : 1,
56 'colorTemperature' : 1,
67 'trackDescription' : 1,
71 'heatingSetpoint' : 1,
72 'coolingSetpoint' : 1,
73 'thermostatSetpoint' : 1}
78 Skip = ['\n', '\t', ' ']
79 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
105 def ExtractFunctions(F, appName):
111 while (Temp != "EOF"):
112 if (Temp == "def" or Temp == "private"):
114 if (Temp == "def" or Temp == "private"):
117 if (GetToken(F) == "("): #We have a function to create object for
118 if (appName == "App1"):
119 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
120 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
121 extractedFunctionsApp1.write("%s\n" % NameofFunc)
123 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
124 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
125 extractedFunctionsApp2.write("%s\n" % NameofFunc)
127 #Check input capability
128 if (Temp == "input"):
131 variable = GetToken(F)
132 Temp = GetToken(F) #Get '"'
133 Temp = GetToken(F) #Get ','
136 capability = GetToken(F)
137 capabilityMap[variable] = capability
139 #Check subscribed events
140 if (Temp == "subscribe"):
141 if (appName == "App1"):
149 while (Temp != "\"" and Temp != "app" and Temp != "location"):
154 #print "DEBUG: %s - %s" % (variable, Temp)
156 if Temp == "app" or Temp == "location":
157 if Temp not in eventList:
158 eventList.append(Temp)
159 if (appName == "App1"):
160 eventAppList.append("App1")
162 eventAppList.append("App2")
163 elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList):
164 # We do not repeat the same capability twice
165 capability = capabilityMap[variable]
166 capabilityList.append(capability)
167 eventList.append(Temp)
168 if (appName == "App1"):
169 eventAppList.append("App1")
171 eventAppList.append("App2")
172 if Temp in eventVarMap.keys():
173 listOfEvents = eventVarMap[Temp]
174 listOfEvents.append(variable)
176 eventVarMap[Temp] = [variable]
177 #print "DEBUG: %s - %s" % (variable, Temp)
181 #Check and analyze capabilities for physical interaction
182 AnalyzeCapabilities(Temp, appName, F)
186 #Warn if there is a potential for physical interaction
187 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
188 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
190 def AnalyzeCapabilities(Temp, appName, F):
192 if (Temp == "capability.switch" or
193 Temp == "capability.switchLevel" or
194 Temp == "capability.illuminanceMeasurement" or
195 Temp == "capability.colorControl" or
197 Temp == "capability.motionSensor" or
198 Temp == "capability.accelerationSensor" or
200 Temp == "capability.valve" or
201 Temp == "capability.waterSensor" or
203 Temp == "capability.musicPlayer" or
204 Temp == "capability.alarm" or
205 Temp == "capability.speechSynthesis" or
206 Temp == "capability.soundSensor"):
207 if (appName == "App1"):
208 app1Capabilities.append(Temp)
210 app2Capabilities.append(Temp)
211 if (Temp == "capability"):
212 Temp = GetToken(F) #Get '"'
213 Temp = GetToken(F) #Get 'Music'
214 Temp = Temp + GetToken(F) #Get 'Player'
215 if (Temp == "MusicPlayer"):
216 if (appName == "App1"):
217 app1Capabilities.append("capability.musicPlayer")
219 app2Capabilities.append("capability.musicPlayer")
221 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
223 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
224 "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab):
225 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
227 # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion
228 if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab):
229 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
231 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
232 "capability.switch" in app2Capab):
233 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
235 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
236 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
237 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
241 numOfActualEvents = 0
242 for event in eventList:
243 numOfActualEvents = numOfActualEvents + eventTypeCounterMap[event]
244 return numOfActualEvents
246 def ExtractEvents(extractedEvents):
251 global eventVarCounterMap
252 # Count the number of events
253 numOfActualEvents = CountEvents()
254 extractedEvents.write("while(true) {\n")
255 extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1))
256 extractedEvents.write("\tswitch(eventNumber) {\n")
259 indexApp2 = eventAppList.index("App2")
260 indexApp2Start = indexApp2
261 #print "DEBUG: App1: %d" % indexApp1
262 #print "DEBUG: App2: %d" % indexApp2
263 #print "DEBUG: eventList: %d" % len(eventList)
265 while counter < len(eventList):
266 # Interleave events from App1 and App2
269 indexApp1 = indexApp1 + 1
270 if indexApp2 < len(eventList):
274 indexApp2 = indexApp2 + 1
275 if indexApp1 < indexApp2Start:
277 print "DEBUG: i: %d" % i
278 extractedEvents.write("\t\tcase %d:\n" % counter)
279 if eventList[i] == "lock":
280 #Write two events subsequently
281 event = open("eventSimulator/lockLockedEvent.groovy", "r")
283 extractedEvents.write(line)
285 extractedEvents.write("\n\t\t\tbreak\n")
286 counter = counter + 1
287 extractedEvents.write("\t\tcase %d:\n" % counter)
288 event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
290 extractedEvents.write(line)
292 elif eventList[i] == "unlock":
293 event = open("eventSimulator/unlockEvent.groovy", "r")
295 extractedEvents.write(line)
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")
698 extractedEvents.write(line)
700 extractedEvents.write("\n\t\t\tbreak\n")
701 counter = counter + 1
702 extractedEvents.write("\t\tcase %d:\n" % counter)
703 if capability == "capability.switch":
704 event = open("eventSimulator/switchOffEvent.groovy", "r")
705 elif capability == "capability.switchLevel":
706 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
707 elif capability == "capability.relaySwitch":
708 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
709 elif capability == "capability.colorControl":
710 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
712 extractedEvents.write(line)
714 elif eventList[i] == "location": #Case for Location event
715 #Write three events subsequently
716 event = open("eventSimulator/locationHomeEvent.groovy", "r")
718 extractedEvents.write(line)
720 extractedEvents.write("\n\t\t\tbreak\n")
721 counter = counter + 1
722 extractedEvents.write("\t\tcase %d:\n" % counter)
723 event = open("eventSimulator/locationAwayEvent.groovy", "r")
725 extractedEvents.write(line)
727 extractedEvents.write("\n\t\t\tbreak\n")
728 counter = counter + 1
729 extractedEvents.write("\t\tcase %d:\n" % counter)
730 event = open("eventSimulator/locationNightEvent.groovy", "r")
732 extractedEvents.write(line)
734 elif eventList[i] == "mode":
735 #Write three events subsequently
736 event = open("eventSimulator/modeHomeEvent.groovy", "r")
738 extractedEvents.write(line)
740 extractedEvents.write("\n\t\t\tbreak\n")
741 counter = counter + 1
742 extractedEvents.write("\t\tcase %d:\n" % counter)
743 event = open("eventSimulator/modeAwayEvent.groovy", "r")
745 extractedEvents.write(line)
747 extractedEvents.write("\n\t\t\tbreak\n")
748 counter = counter + 1
749 extractedEvents.write("\t\tcase %d:\n" % counter)
750 event = open("eventSimulator/modeNightEvent.groovy", "r")
752 extractedEvents.write(line)
754 elif eventList[i] == "acceleration":
755 #Write two events subsequently
756 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
758 extractedEvents.write(line)
760 extractedEvents.write("\n\t\t\tbreak\n")
761 counter = counter + 1
762 extractedEvents.write("\t\tcase %d:\n" % counter)
763 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
765 extractedEvents.write(line)
767 elif eventList[i] == "acceleration.active":
768 event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r")
770 extractedEvents.write(line)
772 elif eventList[i] == "acceleration.inactive":
773 event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r")
775 extractedEvents.write(line)
777 elif eventList[i] == "sleeping":
778 #Write two events subsequently
779 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
781 extractedEvents.write(line)
783 extractedEvents.write("\n\t\t\tbreak\n")
784 counter = counter + 1
785 extractedEvents.write("\t\tcase %d:\n" % counter)
786 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
788 extractedEvents.write(line)
790 elif eventList[i] == "goal":
791 event = open("eventSimulator/stepGoalEvent.groovy", "r")
793 extractedEvents.write(line)
795 elif eventList[i] == "steps":
796 event = open("eventSimulator/stepStepsEvent.groovy", "r")
798 extractedEvents.write(line)
800 elif eventList[i] == "color":
801 event = open("eventSimulator/colorChangeEvent.groovy", "r")
803 extractedEvents.write(line)
805 elif eventList[i] == "colorTemperature":
806 event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
808 extractedEvents.write(line)
810 elif eventList[i] == "hue":
811 event = open("eventSimulator/hueChangeEvent.groovy", "r")
813 extractedEvents.write(line)
815 elif eventList[i] == "saturation":
816 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
818 extractedEvents.write(line)
820 elif eventList[i] == "energy":
821 event = open("eventSimulator/energyMeterEvent.groovy", "r")
823 extractedEvents.write(line)
825 elif eventList[i] == "power":
826 event = open("eventSimulator/powerMeterEvent.groovy", "r")
828 extractedEvents.write(line)
830 elif eventList[i] == "illuminance":
831 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
833 extractedEvents.write(line)
835 elif eventList[i] == "humidity":
836 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
838 extractedEvents.write(line)
840 elif eventList[i] == "alarm":
841 #Write four events subsequently
842 event = open("eventSimulator/alarmBothEvent.groovy", "r")
844 extractedEvents.write(line)
846 extractedEvents.write("\n\t\t\tbreak\n")
847 counter = counter + 1
848 extractedEvents.write("\t\tcase %d:\n" % counter)
849 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
851 extractedEvents.write(line)
853 extractedEvents.write("\n\t\t\tbreak\n")
854 counter = counter + 1
855 extractedEvents.write("\t\tcase %d:\n" % counter)
856 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
858 extractedEvents.write(line)
860 extractedEvents.write("\n\t\t\tbreak\n")
861 counter = counter + 1
862 extractedEvents.write("\t\tcase %d:\n" % counter)
863 event = open("eventSimulator/alarmOffEvent.groovy", "r")
865 extractedEvents.write(line)
867 elif eventList[i] == "contact":
868 #Check which capability
869 variable = eventVarMap[eventList[i]]
870 if eventList[i] not in eventVarCounterMap.keys():
871 eventVarCounterMap[eventList[i]] = 1
874 eventVarCount = eventVarCounterMap[eventList[i]]
875 eventVarCounterMap[eventList[i]] = eventVarCount + 1
876 capability = capabilityMap[variable[eventVarCount]]
877 #Write two events subsequently
878 if capability == "capability.contactSensor":
879 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
880 elif capability == "capability.valve":
881 event = open("eventSimulator/valveClosedEvent.groovy", "r")
883 extractedEvents.write(line)
885 extractedEvents.write("\n\t\t\tbreak\n")
886 counter = counter + 1
887 extractedEvents.write("\t\tcase %d:\n" % counter)
888 if capability == "capability.contactSensor":
889 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
890 elif capability == "capability.valve":
891 event = open("eventSimulator/valveOpenEvent.groovy", "r")
893 extractedEvents.write(line)
895 elif eventList[i] == "status":
896 #Write three events subsequently
897 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
899 extractedEvents.write(line)
901 extractedEvents.write("\n\t\t\tbreak\n")
902 counter = counter + 1
903 extractedEvents.write("\t\tcase %d:\n" % counter)
904 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
906 extractedEvents.write(line)
908 extractedEvents.write("\n\t\t\tbreak\n")
909 counter = counter + 1
910 extractedEvents.write("\t\tcase %d:\n" % counter)
911 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
913 extractedEvents.write(line)
915 elif eventList[i] == "level":
916 #Check which capability
917 variable = eventVarMap[eventList[i]]
918 if eventList[i] not in eventVarCounterMap.keys():
919 eventVarCounterMap[eventList[i]] = 1
922 eventVarCount = eventVarCounterMap[eventList[i]]
923 eventVarCounterMap[eventList[i]] = eventVarCount + 1
924 capability = capabilityMap[variable[eventVarCount]]
925 if capability == "capability.musicPlayer":
926 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
927 elif capability == "capability.switchLevel":
928 event = open("eventSimulator/switchLevelEvent.groovy", "r")
930 extractedEvents.write(line)
932 elif eventList[i] == "trackDescription":
933 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
935 extractedEvents.write(line)
937 elif eventList[i] == "trackData":
938 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
940 extractedEvents.write(line)
942 elif eventList[i] == "mute":
943 #Write two events subsequently
944 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
946 extractedEvents.write(line)
948 extractedEvents.write("\n\t\t\tbreak\n")
949 counter = counter + 1
950 extractedEvents.write("\t\tcase %d:\n" % counter)
951 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
953 extractedEvents.write(line)
955 elif eventList[i] == "temperature":
956 #Check which capability
957 variable = eventVarMap[eventList[i]]
958 if eventList[i] not in eventVarCounterMap.keys():
959 eventVarCounterMap[eventList[i]] = 1
962 eventVarCount = eventVarCounterMap[eventList[i]]
963 eventVarCounterMap[eventList[i]] = eventVarCount + 1
964 capability = capabilityMap[variable[eventVarCount]]
965 if capability == "capability.thermostat":
966 event = open("eventSimulator/temperatureEvent.groovy", "r")
967 elif capability == "capability.temperatureMeasurement":
968 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
970 extractedEvents.write(line)
972 elif eventList[i] == "heatingSetpoint":
973 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
975 extractedEvents.write(line)
977 elif eventList[i] == "coolingSetpoint":
978 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
980 extractedEvents.write(line)
982 elif eventList[i] == "thermostatSetpoint":
983 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
985 extractedEvents.write(line)
988 ###TODO: Add more events later
989 extractedEvents.write("\n\t\t\tbreak\n")
990 counter = counter + 1
991 extractedEvents.write("\t}\n")
992 extractedEvents.write("}\n")
994 def CheckIfOnlyTouchEvents():
995 #Check and throw an error if it is all touch events
996 #This is called Direct-Direct interaction and we do not model-check for this case
997 onlyTouchEvents = True
998 for item in eventList:
999 if item != "nfcTouch" and item != "app":
1000 onlyTouchEvents = False
1001 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
1002 # Write error log file
1003 extractError = open("appCreationError.log", "w+")
1004 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
1005 extractError.close()
1006 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
1009 #Extract objects to call functions from App1
1010 F1 = open("Extractor/App1/App1.groovy", "r")
1011 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
1012 ExtractFunctions(F1, "App1")
1015 #Extract objects to call functions from App2
1016 F2 = open("Extractor/App2/App2.groovy", "r")
1017 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
1018 ExtractFunctions(F2, "App2")
1021 #Prepare eventSimulator file while parsing the App1 and App2 files
1022 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
1023 CheckIfOnlyTouchEvents()
1024 ExtractEvents(extractedEvents)
1025 extractedEvents.close()
1027 #Save the extracted methods and app1 in a same file to extract information
1028 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1029 Extractor = open("Extractor/Extractor.groovy", "r")
1030 F1 = open("Extractor/App1/App1.groovy", "r")
1032 extractorFile.write("////////////////////\n")
1033 extractorFile.write("@Field App\n")
1034 extractorFile.write("App = \"App1\"")
1035 extractorFile.write("\n")
1036 for line in Extractor:
1037 extractorFile.write(line)
1038 extractorFile.write("\n\n")
1040 extractorFile.write(line)
1041 extractorFile.close()
1044 #Run the file to extract the objects
1045 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
1048 #Save the extracted methods and app2 in a same file to extract information
1049 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1050 Extractor = open("Extractor/Extractor.groovy", "r")
1051 F2 = open("Extractor/App2/App2.groovy", "r")
1053 extractorFile.write("////////////////////\n")
1054 extractorFile.write("@Field App\n")
1055 extractorFile.write("App = \"App2\"")
1056 extractorFile.write("\n")
1057 for line in Extractor:
1058 extractorFile.write(line)
1059 extractorFile.write("\n\n")
1061 extractorFile.write(line)
1062 #Run the file to extract the objects
1063 extractorFile.close()
1066 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")