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 #Don't do anything for this case
294 counter = counter - 1
295 elif eventList[i] == "contact.open":
296 event = open("eventSimulator/contactOpenEvent.groovy", "r")
298 extractedEvents.write(line)
300 elif eventList[i] == "contact.closed":
301 event = open("eventSimulator/contactClosedEvent.groovy", "r")
303 extractedEvents.write(line)
305 elif eventList[i] == "tamper.tampered":
306 #Write two events subsequently
307 event = open("eventSimulator/tamperTamperedOpenEvent.groovy", "r")
309 extractedEvents.write(line)
311 extractedEvents.write("\n\t\t\tbreak\n")
312 counter = counter + 1
313 extractedEvents.write("\t\tcase %d:\n" % counter)
314 event = open("eventSimulator/tamperTamperedClosedEvent.groovy", "r")
316 extractedEvents.write(line)
318 elif eventList[i] == "nfcTouch":
319 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
321 extractedEvents.write(line)
323 elif eventList[i] == "app": #Case for Touched event
324 event = open("eventSimulator/appTouchEvent.groovy", "r")
326 extractedEvents.write(line)
328 elif eventList[i] == "button":
329 #Write two events subsequently
330 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
332 extractedEvents.write(line)
334 extractedEvents.write("\n\t\t\tbreak\n")
335 counter = counter + 1
336 extractedEvents.write("\t\tcase %d:\n" % counter)
337 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
339 extractedEvents.write(line)
341 elif eventList[i] == "water":
342 #Write two events subsequently
343 event = open("eventSimulator/waterDryEvent.groovy", "r")
345 extractedEvents.write(line)
347 extractedEvents.write("\n\t\t\tbreak\n")
348 counter = counter + 1
349 extractedEvents.write("\t\tcase %d:\n" % counter)
350 event = open("eventSimulator/waterWetEvent.groovy", "r")
352 extractedEvents.write(line)
354 elif eventList[i] == "water.dry":
355 event = open("eventSimulator/waterDefaultDryEvent.groovy", "r")
357 extractedEvents.write(line)
359 elif eventList[i] == "water.wet":
360 event = open("eventSimulator/waterDefaultWetEvent.groovy", "r")
362 extractedEvents.write(line)
364 elif eventList[i] == "presence":
365 #Check which capability
366 variable = eventVarMap[eventList[i]]
367 if eventList[i] not in eventVarCounterMap.keys():
368 eventVarCounterMap[eventList[i]] = 1
371 eventVarCount = eventVarCounterMap[eventList[i]]
372 eventVarCounterMap[eventList[i]] = eventVarCount + 1
373 capability = capabilityMap[variable[eventVarCount]]
374 #Write two events subsequently
375 if capability == "capability.presenceSensor":
376 event = open("eventSimulator/presencePresentEvent.groovy", "r")
377 elif capability == "capability.beacon":
378 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
380 extractedEvents.write(line)
382 extractedEvents.write("\n\t\t\tbreak\n")
383 counter = counter + 1
384 extractedEvents.write("\t\tcase %d:\n" % counter)
385 if capability == "capability.presenceSensor":
386 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
387 elif capability == "capability.beacon":
388 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
390 extractedEvents.write(line)
392 elif eventList[i] == "presence.present": #Case for Touched event
393 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
395 extractedEvents.write(line)
397 elif eventList[i] == "doorState":
398 #Write two events subsequently
399 event = open("eventSimulator/doorOpenEvent.groovy", "r")
401 extractedEvents.write(line)
403 extractedEvents.write("\n\t\t\tbreak\n")
404 counter = counter + 1
405 extractedEvents.write("\t\tcase %d:\n" % counter)
406 event = open("eventSimulator/doorClosedEvent.groovy", "r")
408 extractedEvents.write(line)
410 elif eventList[i] == "motion":
411 #Write two events subsequently
412 event = open("eventSimulator/motionActiveEvent.groovy", "r")
414 extractedEvents.write(line)
416 extractedEvents.write("\n\t\t\tbreak\n")
417 counter = counter + 1
418 extractedEvents.write("\t\tcase %d:\n" % counter)
419 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
421 extractedEvents.write(line)
423 elif eventList[i] == "motion.active":
424 event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r")
426 extractedEvents.write(line)
428 elif eventList[i] == "motion.inactive":
429 event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r")
431 extractedEvents.write(line)
433 elif eventList[i] == "smoke":
434 #Write three events subsequently
435 event = open("eventSimulator/smokeClearEvent.groovy", "r")
437 extractedEvents.write(line)
439 extractedEvents.write("\n\t\t\tbreak\n")
440 counter = counter + 1
441 extractedEvents.write("\t\tcase %d:\n" % counter)
442 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
444 extractedEvents.write(line)
446 extractedEvents.write("\n\t\t\tbreak\n")
447 counter = counter + 1
448 extractedEvents.write("\t\tcase %d:\n" % counter)
449 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
451 extractedEvents.write(line)
453 elif eventList[i] == "smoke.clear":
454 event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r")
456 extractedEvents.write(line)
458 elif eventList[i] == "smoke.detected":
459 event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r")
461 extractedEvents.write(line)
463 elif eventList[i] == "smoke.tested":
464 event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r")
466 extractedEvents.write(line)
468 elif eventList[i] == "carbonMonoxide":
469 #Check which capability
470 variable = eventVarMap[eventList[i]]
471 if eventList[i] not in eventVarCounterMap.keys():
472 eventVarCounterMap[eventList[i]] = 1
475 eventVarCount = eventVarCounterMap[eventList[i]]
476 eventVarCounterMap[eventList[i]] = eventVarCount + 1
477 capability = capabilityMap[variable[eventVarCount]]
478 #Write three events subsequently
479 if capability == "capability.smokeDetector":
480 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
481 elif capability == "capability.carbonMonoxideDetector":
482 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
484 extractedEvents.write(line)
486 extractedEvents.write("\n\t\t\tbreak\n")
487 counter = counter + 1
488 extractedEvents.write("\t\tcase %d:\n" % counter)
489 if capability == "capability.smokeDetector":
490 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
491 elif capability == "capability.carbonMonoxideDetector":
492 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
494 extractedEvents.write(line)
496 extractedEvents.write("\n\t\t\tbreak\n")
497 counter = counter + 1
498 extractedEvents.write("\t\tcase %d:\n" % counter)
499 if capability == "capability.smokeDetector":
500 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
501 elif capability == "capability.carbonMonoxideDetector":
502 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
504 extractedEvents.write(line)
506 elif eventList[i] == "carbonMonoxide.clear":
507 #Check which capability
508 variable = eventVarMap[eventList[i]]
509 if eventList[i] not in eventVarCounterMap.keys():
510 eventVarCounterMap[eventList[i]] = 1
513 eventVarCount = eventVarCounterMap[eventList[i]]
514 eventVarCounterMap[eventList[i]] = eventVarCount + 1
515 capability = capabilityMap[variable[eventVarCount]]
516 if capability == "capability.smokeDetector":
517 event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r")
518 elif capability == "capability.carbonMonoxideDetector":
519 event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r")
521 extractedEvents.write(line)
523 elif eventList[i] == "carbonMonoxide.detected":
524 #Check which capability
525 variable = eventVarMap[eventList[i]]
526 if eventList[i] not in eventVarCounterMap.keys():
527 eventVarCounterMap[eventList[i]] = 1
530 eventVarCount = eventVarCounterMap[eventList[i]]
531 eventVarCounterMap[eventList[i]] = eventVarCount + 1
532 capability = capabilityMap[variable[eventVarCount]]
533 if capability == "capability.smokeDetector":
534 event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r")
535 elif capability == "capability.carbonMonoxideDetector":
536 event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r")
538 extractedEvents.write(line)
540 elif eventList[i] == "carbonMonoxide.tested":
541 #Check which capability
542 variable = eventVarMap[eventList[i]]
543 if eventList[i] not in eventVarCounterMap.keys():
544 eventVarCounterMap[eventList[i]] = 1
547 eventVarCount = eventVarCounterMap[eventList[i]]
548 eventVarCounterMap[eventList[i]] = eventVarCount + 1
549 capability = capabilityMap[variable[eventVarCount]]
550 if capability == "capability.smokeDetector":
551 event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r")
552 elif capability == "capability.carbonMonoxideDetector":
553 event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r")
555 extractedEvents.write(line)
557 elif eventList[i] == "battery":
558 #Check which capability
559 variable = eventVarMap[eventList[i]]
560 if eventList[i] not in eventVarCounterMap.keys():
561 eventVarCounterMap[eventList[i]] = 1
564 eventVarCount = eventVarCounterMap[eventList[i]]
565 eventVarCounterMap[eventList[i]] = eventVarCount + 1
566 capability = capabilityMap[variable[eventVarCount]]
567 if capability == "capability.smokeDetector":
568 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
569 elif capability == "capability.battery":
570 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
572 extractedEvents.write(line)
574 elif eventList[i] == "thermostatMode":
575 #Write five events subsequently
576 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
578 extractedEvents.write(line)
580 extractedEvents.write("\n\t\t\tbreak\n")
581 counter = counter + 1
582 extractedEvents.write("\t\tcase %d:\n" % counter)
583 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
585 extractedEvents.write(line)
587 extractedEvents.write("\n\t\t\tbreak\n")
588 counter = counter + 1
589 extractedEvents.write("\t\tcase %d:\n" % counter)
590 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
592 extractedEvents.write(line)
594 extractedEvents.write("\n\t\t\tbreak\n")
595 counter = counter + 1
596 extractedEvents.write("\t\tcase %d:\n" % counter)
597 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
599 extractedEvents.write(line)
601 extractedEvents.write("\n\t\t\tbreak\n")
602 counter = counter + 1
603 extractedEvents.write("\t\tcase %d:\n" % counter)
604 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
606 extractedEvents.write(line)
608 elif eventList[i] == "thermostatFanMode":
609 #Write five events subsequently
610 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
612 extractedEvents.write(line)
614 extractedEvents.write("\n\t\t\tbreak\n")
615 counter = counter + 1
616 extractedEvents.write("\t\tcase %d:\n" % counter)
617 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
619 extractedEvents.write(line)
621 extractedEvents.write("\n\t\t\tbreak\n")
622 counter = counter + 1
623 extractedEvents.write("\t\tcase %d:\n" % counter)
624 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
626 extractedEvents.write(line)
628 extractedEvents.write("\n\t\t\tbreak\n")
629 counter = counter + 1
630 extractedEvents.write("\t\tcase %d:\n" % counter)
631 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
633 extractedEvents.write(line)
635 extractedEvents.write("\n\t\t\tbreak\n")
636 counter = counter + 1
637 extractedEvents.write("\t\tcase %d:\n" % counter)
638 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
640 extractedEvents.write(line)
642 elif eventList[i] == "thermostatOperatingState":
643 #Write five events subsequently
644 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
646 extractedEvents.write(line)
648 extractedEvents.write("\n\t\t\tbreak\n")
649 counter = counter + 1
650 extractedEvents.write("\t\tcase %d:\n" % counter)
651 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
653 extractedEvents.write(line)
655 extractedEvents.write("\n\t\t\tbreak\n")
656 counter = counter + 1
657 extractedEvents.write("\t\tcase %d:\n" % counter)
658 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
660 extractedEvents.write(line)
662 extractedEvents.write("\n\t\t\tbreak\n")
663 counter = counter + 1
664 extractedEvents.write("\t\tcase %d:\n" % counter)
665 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
667 extractedEvents.write(line)
669 extractedEvents.write("\n\t\t\tbreak\n")
670 counter = counter + 1
671 extractedEvents.write("\t\tcase %d:\n" % counter)
672 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
674 extractedEvents.write(line)
676 elif eventList[i] == "switch":
677 #Check which capability
678 variable = eventVarMap[eventList[i]]
679 if eventList[i] not in eventVarCounterMap.keys():
680 eventVarCounterMap[eventList[i]] = 1
683 eventVarCount = eventVarCounterMap[eventList[i]]
684 eventVarCounterMap[eventList[i]] = eventVarCount + 1
685 capability = capabilityMap[variable[eventVarCount]]
686 #Write two events subsequently
687 if capability == "capability.switch":
688 event = open("eventSimulator/switchOnEvent.groovy", "r")
689 elif capability == "capability.switchLevel":
690 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
691 elif capability == "capability.relaySwitch":
692 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
693 elif capability == "capability.colorControl":
694 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
696 extractedEvents.write(line)
698 extractedEvents.write("\n\t\t\tbreak\n")
699 counter = counter + 1
700 extractedEvents.write("\t\tcase %d:\n" % counter)
701 if capability == "capability.switch":
702 event = open("eventSimulator/switchOffEvent.groovy", "r")
703 elif capability == "capability.switchLevel":
704 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
705 elif capability == "capability.relaySwitch":
706 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
707 elif capability == "capability.colorControl":
708 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
710 extractedEvents.write(line)
712 elif eventList[i] == "location": #Case for Location event
713 #Write three events subsequently
714 event = open("eventSimulator/locationHomeEvent.groovy", "r")
716 extractedEvents.write(line)
718 extractedEvents.write("\n\t\t\tbreak\n")
719 counter = counter + 1
720 extractedEvents.write("\t\tcase %d:\n" % counter)
721 event = open("eventSimulator/locationAwayEvent.groovy", "r")
723 extractedEvents.write(line)
725 extractedEvents.write("\n\t\t\tbreak\n")
726 counter = counter + 1
727 extractedEvents.write("\t\tcase %d:\n" % counter)
728 event = open("eventSimulator/locationNightEvent.groovy", "r")
730 extractedEvents.write(line)
732 elif eventList[i] == "mode":
733 #Write three events subsequently
734 event = open("eventSimulator/modeHomeEvent.groovy", "r")
736 extractedEvents.write(line)
738 extractedEvents.write("\n\t\t\tbreak\n")
739 counter = counter + 1
740 extractedEvents.write("\t\tcase %d:\n" % counter)
741 event = open("eventSimulator/modeAwayEvent.groovy", "r")
743 extractedEvents.write(line)
745 extractedEvents.write("\n\t\t\tbreak\n")
746 counter = counter + 1
747 extractedEvents.write("\t\tcase %d:\n" % counter)
748 event = open("eventSimulator/modeNightEvent.groovy", "r")
750 extractedEvents.write(line)
752 elif eventList[i] == "acceleration":
753 #Write two events subsequently
754 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
756 extractedEvents.write(line)
758 extractedEvents.write("\n\t\t\tbreak\n")
759 counter = counter + 1
760 extractedEvents.write("\t\tcase %d:\n" % counter)
761 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
763 extractedEvents.write(line)
765 elif eventList[i] == "acceleration.active":
766 event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r")
768 extractedEvents.write(line)
770 elif eventList[i] == "acceleration.inactive":
771 event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r")
773 extractedEvents.write(line)
775 elif eventList[i] == "sleeping":
776 #Write two events subsequently
777 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
779 extractedEvents.write(line)
781 extractedEvents.write("\n\t\t\tbreak\n")
782 counter = counter + 1
783 extractedEvents.write("\t\tcase %d:\n" % counter)
784 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
786 extractedEvents.write(line)
788 elif eventList[i] == "goal":
789 event = open("eventSimulator/stepGoalEvent.groovy", "r")
791 extractedEvents.write(line)
793 elif eventList[i] == "steps":
794 event = open("eventSimulator/stepStepsEvent.groovy", "r")
796 extractedEvents.write(line)
798 elif eventList[i] == "color":
799 event = open("eventSimulator/colorChangeEvent.groovy", "r")
801 extractedEvents.write(line)
803 elif eventList[i] == "colorTemperature":
804 event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
806 extractedEvents.write(line)
808 elif eventList[i] == "hue":
809 event = open("eventSimulator/hueChangeEvent.groovy", "r")
811 extractedEvents.write(line)
813 elif eventList[i] == "saturation":
814 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
816 extractedEvents.write(line)
818 elif eventList[i] == "energy":
819 event = open("eventSimulator/energyMeterEvent.groovy", "r")
821 extractedEvents.write(line)
823 elif eventList[i] == "power":
824 event = open("eventSimulator/powerMeterEvent.groovy", "r")
826 extractedEvents.write(line)
828 elif eventList[i] == "illuminance":
829 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
831 extractedEvents.write(line)
833 elif eventList[i] == "humidity":
834 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
836 extractedEvents.write(line)
838 elif eventList[i] == "alarm":
839 #Write four events subsequently
840 event = open("eventSimulator/alarmBothEvent.groovy", "r")
842 extractedEvents.write(line)
844 extractedEvents.write("\n\t\t\tbreak\n")
845 counter = counter + 1
846 extractedEvents.write("\t\tcase %d:\n" % counter)
847 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
849 extractedEvents.write(line)
851 extractedEvents.write("\n\t\t\tbreak\n")
852 counter = counter + 1
853 extractedEvents.write("\t\tcase %d:\n" % counter)
854 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
856 extractedEvents.write(line)
858 extractedEvents.write("\n\t\t\tbreak\n")
859 counter = counter + 1
860 extractedEvents.write("\t\tcase %d:\n" % counter)
861 event = open("eventSimulator/alarmOffEvent.groovy", "r")
863 extractedEvents.write(line)
865 elif eventList[i] == "contact":
866 #Check which capability
867 variable = eventVarMap[eventList[i]]
868 if eventList[i] not in eventVarCounterMap.keys():
869 eventVarCounterMap[eventList[i]] = 1
872 eventVarCount = eventVarCounterMap[eventList[i]]
873 eventVarCounterMap[eventList[i]] = eventVarCount + 1
874 capability = capabilityMap[variable[eventVarCount]]
875 #Write two events subsequently
876 if capability == "capability.contactSensor":
877 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
878 elif capability == "capability.valve":
879 event = open("eventSimulator/valveClosedEvent.groovy", "r")
881 extractedEvents.write(line)
883 extractedEvents.write("\n\t\t\tbreak\n")
884 counter = counter + 1
885 extractedEvents.write("\t\tcase %d:\n" % counter)
886 if capability == "capability.contactSensor":
887 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
888 elif capability == "capability.valve":
889 event = open("eventSimulator/valveOpenEvent.groovy", "r")
891 extractedEvents.write(line)
893 elif eventList[i] == "status":
894 #Write three events subsequently
895 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
897 extractedEvents.write(line)
899 extractedEvents.write("\n\t\t\tbreak\n")
900 counter = counter + 1
901 extractedEvents.write("\t\tcase %d:\n" % counter)
902 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
904 extractedEvents.write(line)
906 extractedEvents.write("\n\t\t\tbreak\n")
907 counter = counter + 1
908 extractedEvents.write("\t\tcase %d:\n" % counter)
909 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
911 extractedEvents.write(line)
913 elif eventList[i] == "level":
914 #Check which capability
915 variable = eventVarMap[eventList[i]]
916 if eventList[i] not in eventVarCounterMap.keys():
917 eventVarCounterMap[eventList[i]] = 1
920 eventVarCount = eventVarCounterMap[eventList[i]]
921 eventVarCounterMap[eventList[i]] = eventVarCount + 1
922 capability = capabilityMap[variable[eventVarCount]]
923 if capability == "capability.musicPlayer":
924 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
925 elif capability == "capability.switchLevel":
926 event = open("eventSimulator/switchLevelEvent.groovy", "r")
928 extractedEvents.write(line)
930 elif eventList[i] == "trackDescription":
931 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
933 extractedEvents.write(line)
935 elif eventList[i] == "trackData":
936 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
938 extractedEvents.write(line)
940 elif eventList[i] == "mute":
941 #Write two events subsequently
942 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
944 extractedEvents.write(line)
946 extractedEvents.write("\n\t\t\tbreak\n")
947 counter = counter + 1
948 extractedEvents.write("\t\tcase %d:\n" % counter)
949 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
951 extractedEvents.write(line)
953 elif eventList[i] == "temperature":
954 #Check which capability
955 variable = eventVarMap[eventList[i]]
956 if eventList[i] not in eventVarCounterMap.keys():
957 eventVarCounterMap[eventList[i]] = 1
960 eventVarCount = eventVarCounterMap[eventList[i]]
961 eventVarCounterMap[eventList[i]] = eventVarCount + 1
962 capability = capabilityMap[variable[eventVarCount]]
963 if capability == "capability.thermostat":
964 event = open("eventSimulator/temperatureEvent.groovy", "r")
965 elif capability == "capability.temperatureMeasurement":
966 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
968 extractedEvents.write(line)
970 elif eventList[i] == "heatingSetpoint":
971 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
973 extractedEvents.write(line)
975 elif eventList[i] == "coolingSetpoint":
976 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
978 extractedEvents.write(line)
980 elif eventList[i] == "thermostatSetpoint":
981 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
983 extractedEvents.write(line)
986 ###TODO: Add more events later
987 extractedEvents.write("\n\t\t\tbreak\n")
988 counter = counter + 1
989 extractedEvents.write("\t}\n")
990 extractedEvents.write("}\n")
992 def CheckIfOnlyTouchEvents():
993 #Check and throw an error if it is all touch events
994 #This is called Direct-Direct interaction and we do not model-check for this case
995 onlyTouchEvents = True
996 for item in eventList:
997 if item != "nfcTouch" and item != "app":
998 onlyTouchEvents = False
999 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
1000 # Write error log file
1001 extractError = open("appCreationError.log", "w+")
1002 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
1003 extractError.close()
1004 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
1007 #Extract objects to call functions from App1
1008 F1 = open("Extractor/App1/App1.groovy", "r")
1009 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
1010 ExtractFunctions(F1, "App1")
1013 #Extract objects to call functions from App2
1014 F2 = open("Extractor/App2/App2.groovy", "r")
1015 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
1016 ExtractFunctions(F2, "App2")
1019 #Prepare eventSimulator file while parsing the App1 and App2 files
1020 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
1021 CheckIfOnlyTouchEvents()
1022 ExtractEvents(extractedEvents)
1023 extractedEvents.close()
1025 #Save the extracted methods and app1 in a same file to extract information
1026 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1027 Extractor = open("Extractor/Extractor.groovy", "r")
1028 F1 = open("Extractor/App1/App1.groovy", "r")
1030 extractorFile.write("////////////////////\n")
1031 extractorFile.write("@Field App\n")
1032 extractorFile.write("App = \"App1\"")
1033 extractorFile.write("\n")
1034 for line in Extractor:
1035 extractorFile.write(line)
1036 extractorFile.write("\n\n")
1038 extractorFile.write(line)
1039 extractorFile.close()
1042 #Run the file to extract the objects
1043 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
1046 #Save the extracted methods and app2 in a same file to extract information
1047 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1048 Extractor = open("Extractor/Extractor.groovy", "r")
1049 F2 = open("Extractor/App2/App2.groovy", "r")
1051 extractorFile.write("////////////////////\n")
1052 extractorFile.write("@Field App\n")
1053 extractorFile.write("App = \"App2\"")
1054 extractorFile.write("\n")
1055 for line in Extractor:
1056 extractorFile.write(line)
1057 extractorFile.write("\n\n")
1059 extractorFile.write(line)
1060 #Run the file to extract the objects
1061 extractorFile.close()
1064 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")