6 eventVarCounterMap = {}
17 Skip = ['\n', '\t', ' ']
18 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
44 def ExtractFunctions(F, appName):
49 while (Temp != "EOF"):
50 if (Temp == "def" or Temp == "private"):
52 if (Temp == "def" or Temp == "private"):
55 if (GetToken(F) == "("): #We have a function to create object for
56 if (appName == "App1"):
57 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
58 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
59 extractedFunctionsApp1.write("%s\n" % NameofFunc)
61 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
62 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
63 extractedFunctionsApp2.write("%s\n" % NameofFunc)
65 #Check input capability
69 variable = GetToken(F)
70 Temp = GetToken(F) #Get '"'
71 Temp = GetToken(F) #Get ','
74 capability = GetToken(F)
75 capabilityMap[variable] = capability
77 #Check subscribed events
78 if (Temp == "subscribe"):
79 if (appName == "App1"):
87 while (Temp != "\"" and Temp != "app" and Temp != "location"):
92 print "DEBUG: %s - %s" % (variable, Temp)
94 if Temp == "app" or Temp == "location":
95 if Temp not in eventList:
96 eventList.append(Temp)
97 elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList):
98 # We do not repeat the same capability twice
99 capability = capabilityMap[variable]
100 capabilityList.append(capability)
101 eventList.append(Temp)
102 if Temp in eventVarMap.keys():
103 listOfEvents = eventVarMap[Temp]
104 listOfEvents.append(variable)
106 eventVarMap[Temp] = [variable]
107 #print "DEBUG: %s - %s" % (variable, Temp)
111 #Check and analyze capabilities for physical interaction
112 AnalyzeCapabilities(Temp, appName, F)
116 #Warn if there is a potential for physical interaction
117 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
118 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
120 def AnalyzeCapabilities(Temp, appName, F):
122 if (Temp == "capability.switch" or
123 Temp == "capability.switchLevel" or
124 Temp == "capability.illuminanceMeasurement" or
125 Temp == "capability.colorControl" or
127 Temp == "capability.motionSensor" or
128 Temp == "capability.accelerationSensor" or
130 Temp == "capability.valve" or
131 Temp == "capability.waterSensor" or
133 Temp == "capability.musicPlayer" or
134 Temp == "capability.alarm" or
135 Temp == "capability.speechSynthesis" or
136 Temp == "capability.soundSensor"):
137 if (appName == "App1"):
138 app1Capabilities.append(Temp)
140 app2Capabilities.append(Temp)
141 if (Temp == "capability"):
142 Temp = GetToken(F) #Get '"'
143 Temp = GetToken(F) #Get 'Music'
144 Temp = Temp + GetToken(F) #Get 'Player'
145 if (Temp == "MusicPlayer"):
146 if (appName == "App1"):
147 app1Capabilities.append("capability.musicPlayer")
149 app2Capabilities.append("capability.musicPlayer")
151 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
153 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
154 "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab):
155 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
157 # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion
158 if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab):
159 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
161 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
162 "capability.switch" in app2Capab):
163 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
165 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
166 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
167 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
169 def ExtractEvents(extractedEvents):
173 global eventVarCounterMap
174 extractedEvents.write("while(true) {\n")
175 extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventList) - 1))
176 extractedEvents.write("\tswitch(eventNumber) {\n")
177 for i in range(len(eventList)):
178 extractedEvents.write("\t\tcase %d:\n" % i)
179 if eventList[i] == "lock":
180 #Write two events subsequently
181 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
182 extractedEvents.write("\t\t\tif (event == 0) {\n")
183 event = open("eventSimulator/lockLockedEvent.groovy", "r")
185 extractedEvents.write("\t\t" + line)
187 extractedEvents.write("\t\t\t} else {\n")
188 event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
190 extractedEvents.write("\t\t" + line)
192 extractedEvents.write("\t\t\t}\n")
193 elif eventList[i] == "unlock":
194 event = open("eventSimulator/unlockEvent.groovy", "r")
196 extractedEvents.write(line)
198 elif eventList[i] == "contact.open":
199 event = open("eventSimulator/contactOpenEvent.groovy", "r")
201 extractedEvents.write(line)
203 elif eventList[i] == "contact.closed":
204 event = open("eventSimulator/contactClosedEvent.groovy", "r")
206 extractedEvents.write(line)
208 elif eventList[i] == "tamper.tampered":
209 #Write two events subsequently
210 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
211 extractedEvents.write("\t\t\tif (event == 0) {\n")
212 event = open("eventSimulator/tamperTamperedOpenEvent.groovy", "r")
214 extractedEvents.write("\t\t" + line)
216 extractedEvents.write("\t\t\t} else {\n")
217 event = open("eventSimulator/tamperTamperedClosedEvent.groovy", "r")
219 extractedEvents.write("\t\t" + line)
221 extractedEvents.write("\t\t\t}\n")
222 elif eventList[i] == "nfcTouch":
223 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
225 extractedEvents.write(line)
227 elif eventList[i] == "app": #Case for Touched event
228 event = open("eventSimulator/appTouchEvent.groovy", "r")
230 extractedEvents.write(line)
232 elif eventList[i] == "button":
233 #Write two events subsequently
234 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
235 extractedEvents.write("\t\t\tif (event == 0) {\n")
236 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
238 extractedEvents.write("\t\t" + line)
240 extractedEvents.write("\t\t\t} else {\n")
241 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
243 extractedEvents.write("\t\t" + line)
245 extractedEvents.write("\t\t\t}\n")
246 elif eventList[i] == "water":
247 #Write two events subsequently
248 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
249 extractedEvents.write("\t\t\tif (event == 0) {\n")
250 event = open("eventSimulator/waterDryEvent.groovy", "r")
252 extractedEvents.write("\t\t" + line)
254 extractedEvents.write("\t\t\t} else {\n")
255 event = open("eventSimulator/waterWetEvent.groovy", "r")
257 extractedEvents.write("\t\t" + line)
259 extractedEvents.write("\t\t\t}\n")
260 elif eventList[i] == "water.dry":
261 event = open("eventSimulator/waterDefaultDryEvent.groovy", "r")
263 extractedEvents.write(line)
265 elif eventList[i] == "water.wet":
266 event = open("eventSimulator/waterDefaultWetEvent.groovy", "r")
268 extractedEvents.write(line)
270 elif eventList[i] == "presence":
271 #Check which capability
272 variable = eventVarMap[eventList[i]]
273 if eventList[i] not in eventVarCounterMap.keys():
274 eventVarCounterMap[eventList[i]] = 1
277 eventVarCount = eventVarCounterMap[eventList[i]]
278 eventVarCounterMap[eventList[i]] = eventVarCount + 1
279 capability = capabilityMap[variable[eventVarCount]]
280 #Write three events subsequently
281 if capability == "capability.presenceSensor":
282 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
283 elif capability == "capability.beacon":
284 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
285 extractedEvents.write("\t\t\tif (event == 0) {\n")
286 if capability == "capability.presenceSensor":
287 event = open("eventSimulator/presencePresentEvent.groovy", "r")
288 elif capability == "capability.beacon":
289 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
291 extractedEvents.write("\t\t" + line)
293 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
294 if capability == "capability.presenceSensor":
295 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
296 elif capability == "capability.beacon":
297 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
299 extractedEvents.write("\t\t" + line)
301 extractedEvents.write("\t\t\t}\n")
303 elif eventList[i] == "presence.present": #Case for Touched event
304 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
306 extractedEvents.write("\t\t" + line)
308 elif eventList[i] == "doorState":
309 #Write two events subsequently
310 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
311 extractedEvents.write("\t\t\tif (event == 0) {\n")
312 event = open("eventSimulator/doorOpenEvent.groovy", "r")
314 extractedEvents.write("\t\t" + line)
316 extractedEvents.write("\t\t\t} else {\n")
317 event = open("eventSimulator/doorClosedEvent.groovy", "r")
319 extractedEvents.write("\t\t" + line)
321 extractedEvents.write("\t\t\t}\n")
322 elif eventList[i] == "motion":
323 #Write two events subsequently
324 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
325 extractedEvents.write("\t\t\tif (event == 0) {\n")
326 event = open("eventSimulator/motionActiveEvent.groovy", "r")
328 extractedEvents.write("\t\t" + line)
330 extractedEvents.write("\t\t\t} else {\n")
331 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
333 extractedEvents.write("\t\t" + line)
335 extractedEvents.write("\t\t\t}\n")
336 elif eventList[i] == "motion.active":
337 event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r")
339 extractedEvents.write("\t\t" + line)
341 elif eventList[i] == "motion.inactive":
342 event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r")
344 extractedEvents.write("\t\t" + line)
346 elif eventList[i] == "smoke":
347 #Write three events subsequently
348 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
349 extractedEvents.write("\t\t\tif (event == 0) {\n")
350 event = open("eventSimulator/smokeClearEvent.groovy", "r")
352 extractedEvents.write("\t\t" + line)
354 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
355 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
357 extractedEvents.write("\t\t" + line)
359 extractedEvents.write("\t\t\t} else {\n")
360 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
362 extractedEvents.write("\t\t" + line)
364 extractedEvents.write("\t\t\t}\n")
365 elif eventList[i] == "smoke.clear":
366 event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r")
368 extractedEvents.write("\t\t" + line)
370 elif eventList[i] == "smoke.detected":
371 event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r")
373 extractedEvents.write("\t\t" + line)
375 elif eventList[i] == "smoke.tested":
376 event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r")
378 extractedEvents.write("\t\t" + line)
380 elif eventList[i] == "carbonMonoxide":
381 #Check which capability
382 variable = eventVarMap[eventList[i]]
383 if eventList[i] not in eventVarCounterMap.keys():
384 eventVarCounterMap[eventList[i]] = 1
387 eventVarCount = eventVarCounterMap[eventList[i]]
388 eventVarCounterMap[eventList[i]] = eventVarCount + 1
389 capability = capabilityMap[variable[eventVarCount]]
390 #Write three events subsequently
391 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
392 extractedEvents.write("\t\t\tif (event == 0) {\n")
393 if capability == "capability.smokeDetector":
394 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
395 elif capability == "capability.carbonMonoxideDetector":
396 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
398 extractedEvents.write("\t\t" + line)
400 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
401 if capability == "capability.smokeDetector":
402 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
403 elif capability == "capability.carbonMonoxideDetector":
404 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
406 extractedEvents.write("\t\t" + line)
408 extractedEvents.write("\t\t\t} else {\n")
409 if capability == "capability.smokeDetector":
410 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
411 elif capability == "capability.carbonMonoxideDetector":
412 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
414 extractedEvents.write("\t\t" + line)
416 extractedEvents.write("\t\t\t}\n")
417 elif eventList[i] == "carbonMonoxide.clear":
418 if capability == "capability.smokeDetector":
419 event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r")
420 elif capability == "capability.carbonMonoxideDetector":
421 event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r")
423 extractedEvents.write("\t\t" + line)
425 elif eventList[i] == "carbonMonoxide.detected":
426 if capability == "capability.smokeDetector":
427 event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r")
428 elif capability == "capability.carbonMonoxideDetector":
429 event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r")
431 extractedEvents.write("\t\t" + line)
433 elif eventList[i] == "carbonMonoxide.tested":
434 if capability == "capability.smokeDetector":
435 event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r")
436 elif capability == "capability.carbonMonoxideDetector":
437 event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r")
439 extractedEvents.write("\t\t" + line)
441 elif eventList[i] == "battery":
442 #Check which capability
443 variable = eventVarMap[eventList[i]]
444 if eventList[i] not in eventVarCounterMap.keys():
445 eventVarCounterMap[eventList[i]] = 1
448 eventVarCount = eventVarCounterMap[eventList[i]]
449 eventVarCounterMap[eventList[i]] = eventVarCount + 1
450 capability = capabilityMap[variable[eventVarCount]]
451 if capability == "capability.smokeDetector":
452 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
453 elif capability == "capability.battery":
454 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
456 extractedEvents.write(line)
458 elif eventList[i] == "thermostatMode":
459 #Write five events subsequently
460 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
461 extractedEvents.write("\t\t\tif (event == 0) {\n")
462 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
464 extractedEvents.write("\t\t" + line)
466 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
467 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
469 extractedEvents.write("\t\t" + line)
471 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
472 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
474 extractedEvents.write("\t\t" + line)
476 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
477 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
479 extractedEvents.write("\t\t" + line)
481 extractedEvents.write("\t\t\t} else {\n")
482 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
484 extractedEvents.write("\t\t" + line)
486 extractedEvents.write("\t\t\t}\n")
487 elif eventList[i] == "thermostatFanMode":
488 #Write five events subsequently
489 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
490 extractedEvents.write("\t\t\tif (event == 0) {\n")
491 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
493 extractedEvents.write("\t\t" + line)
495 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
496 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
498 extractedEvents.write("\t\t" + line)
500 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
501 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
503 extractedEvents.write("\t\t" + line)
505 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
506 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
508 extractedEvents.write("\t\t" + line)
510 extractedEvents.write("\t\t\t} else {\n")
511 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
513 extractedEvents.write("\t\t" + line)
515 extractedEvents.write("\t\t\t}\n")
516 elif eventList[i] == "thermostatOperatingState":
517 #Write five events subsequently
518 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
519 extractedEvents.write("\t\t\tif (event == 0) {\n")
520 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
522 extractedEvents.write("\t\t" + line)
524 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
525 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
527 extractedEvents.write("\t\t" + line)
529 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
530 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
532 extractedEvents.write("\t\t" + line)
534 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
535 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
537 extractedEvents.write("\t\t" + line)
539 extractedEvents.write("\t\t\t} else {\n")
540 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
542 extractedEvents.write("\t\t" + line)
544 extractedEvents.write("\t\t\t}\n")
545 elif eventList[i] == "switch":
546 #Check which capability
547 variable = eventVarMap[eventList[i]]
548 if eventList[i] not in eventVarCounterMap.keys():
549 eventVarCounterMap[eventList[i]] = 1
552 eventVarCount = eventVarCounterMap[eventList[i]]
553 eventVarCounterMap[eventList[i]] = eventVarCount + 1
554 capability = capabilityMap[variable[eventVarCount]]
555 #Write two events subsequently
556 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
557 extractedEvents.write("\t\t\tif (event == 0) {\n")
558 if capability == "capability.switch":
559 event = open("eventSimulator/switchOnEvent.groovy", "r")
560 elif capability == "capability.switchLevel":
561 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
562 elif capability == "capability.relaySwitch":
563 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
564 elif capability == "capability.colorControl":
565 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
567 extractedEvents.write("\t\t" + line)
569 extractedEvents.write("\t\t\t} else {\n")
570 if capability == "capability.switch":
571 event = open("eventSimulator/switchOffEvent.groovy", "r")
572 elif capability == "capability.switchLevel":
573 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
574 elif capability == "capability.relaySwitch":
575 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
576 elif capability == "capability.colorControl":
577 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
579 extractedEvents.write("\t\t" + line)
581 extractedEvents.write("\t\t\t}\n")
582 elif eventList[i] == "location": #Case for Location event
583 #Write three events subsequently
584 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
585 extractedEvents.write("\t\t\tif (event == 0) {\n")
586 event = open("eventSimulator/locationHomeEvent.groovy", "r")
588 extractedEvents.write("\t\t" + line)
590 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
591 event = open("eventSimulator/locationAwayEvent.groovy", "r")
593 extractedEvents.write("\t\t" + line)
595 extractedEvents.write("\t\t\t} else {\n")
596 event = open("eventSimulator/locationNightEvent.groovy", "r")
598 extractedEvents.write("\t\t" + line)
600 extractedEvents.write("\t\t\t}\n")
601 elif eventList[i] == "mode":
602 #Write three events subsequently
603 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
604 extractedEvents.write("\t\t\tif (event == 0) {\n")
605 event = open("eventSimulator/modeHomeEvent.groovy", "r")
607 extractedEvents.write("\t\t" + line)
609 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
610 event = open("eventSimulator/modeAwayEvent.groovy", "r")
612 extractedEvents.write("\t\t" + line)
614 extractedEvents.write("\t\t\t} else {\n")
615 event = open("eventSimulator/modeNightEvent.groovy", "r")
617 extractedEvents.write("\t\t" + line)
619 extractedEvents.write("\t\t\t}\n")
620 elif eventList[i] == "acceleration":
621 #Write two events subsequently
622 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
623 extractedEvents.write("\t\t\tif (event == 0) {\n")
624 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
626 extractedEvents.write("\t\t" + line)
628 extractedEvents.write("\t\t\t} else {\n")
629 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
631 extractedEvents.write("\t\t" + line)
633 extractedEvents.write("\t\t\t}\n")
634 elif eventList[i] == "acceleration.active":
635 event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r")
637 extractedEvents.write("\t\t" + line)
639 elif eventList[i] == "acceleration.inactive":
640 event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r")
642 extractedEvents.write("\t\t" + line)
644 elif eventList[i] == "sleeping":
645 #Write two events subsequently
646 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
647 extractedEvents.write("\t\t\tif (event == 0) {\n")
648 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
650 extractedEvents.write("\t\t" + line)
652 extractedEvents.write("\t\t\t} else {\n")
653 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
655 extractedEvents.write("\t\t" + line)
657 extractedEvents.write("\t\t\t}\n")
658 elif eventList[i] == "goal":
659 event = open("eventSimulator/stepGoalEvent.groovy", "r")
661 extractedEvents.write(line)
663 elif eventList[i] == "steps":
664 event = open("eventSimulator/stepStepsEvent.groovy", "r")
666 extractedEvents.write(line)
668 elif eventList[i] == "color":
669 event = open("eventSimulator/colorChangeEvent.groovy", "r")
671 extractedEvents.write(line)
673 elif eventList[i] == "colorTemperature":
674 event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
676 extractedEvents.write(line)
678 elif eventList[i] == "hue":
679 event = open("eventSimulator/hueChangeEvent.groovy", "r")
681 extractedEvents.write(line)
683 elif eventList[i] == "saturation":
684 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
686 extractedEvents.write(line)
688 elif eventList[i] == "energy":
689 event = open("eventSimulator/energyMeterEvent.groovy", "r")
691 extractedEvents.write(line)
693 elif eventList[i] == "power":
694 event = open("eventSimulator/powerMeterEvent.groovy", "r")
696 extractedEvents.write(line)
698 elif eventList[i] == "illuminance":
699 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
701 extractedEvents.write(line)
703 elif eventList[i] == "humidity":
704 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
706 extractedEvents.write(line)
708 elif eventList[i] == "alarm":
709 #Write four events subsequently
710 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,3)\n")
711 extractedEvents.write("\t\t\tif (event == 0) {\n")
712 event = open("eventSimulator/alarmBothEvent.groovy", "r")
714 extractedEvents.write("\t\t" + line)
716 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
717 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
719 extractedEvents.write("\t\t" + line)
721 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
722 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
724 extractedEvents.write("\t\t" + line)
726 extractedEvents.write("\t\t\t} else {\n")
727 event = open("eventSimulator/alarmOffEvent.groovy", "r")
729 extractedEvents.write("\t\t" + line)
731 extractedEvents.write("\t\t\t}\n")
732 elif eventList[i] == "contact":
733 #Check which capability
734 variable = eventVarMap[eventList[i]]
735 if eventList[i] not in eventVarCounterMap.keys():
736 eventVarCounterMap[eventList[i]] = 1
739 eventVarCount = eventVarCounterMap[eventList[i]]
740 eventVarCounterMap[eventList[i]] = eventVarCount + 1
741 capability = capabilityMap[variable[eventVarCount]]
742 #Write two events subsequently
743 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
744 extractedEvents.write("\t\t\tif (event == 0) {\n")
745 if capability == "capability.contactSensor":
746 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
747 elif capability == "capability.valve":
748 event = open("eventSimulator/valveClosedEvent.groovy", "r")
750 extractedEvents.write("\t\t" + line)
752 extractedEvents.write("\t\t\t} else {\n")
753 if capability == "capability.contactSensor":
754 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
755 elif capability == "capability.valve":
756 event = open("eventSimulator/valveOpenEvent.groovy", "r")
758 extractedEvents.write("\t\t" + line)
760 extractedEvents.write("\t\t\t}\n")
761 elif eventList[i] == "status":
762 #Write three events subsequently
763 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
764 extractedEvents.write("\t\t\tif (event == 0) {\n")
765 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
767 extractedEvents.write("\t\t" + line)
769 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
770 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
772 extractedEvents.write("\t\t" + line)
774 extractedEvents.write("\t\t\t} else {\n")
775 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
777 extractedEvents.write("\t\t" + line)
779 extractedEvents.write("\t\t\t}\n")
780 elif eventList[i] == "level":
781 #Check which capability
782 variable = eventVarMap[eventList[i]]
783 if eventList[i] not in eventVarCounterMap.keys():
784 eventVarCounterMap[eventList[i]] = 1
787 eventVarCount = eventVarCounterMap[eventList[i]]
788 eventVarCounterMap[eventList[i]] = eventVarCount + 1
789 capability = capabilityMap[variable[eventVarCount]]
790 if capability == "capability.musicPlayer":
791 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
792 elif capability == "capability.switchLevel":
793 event = open("eventSimulator/switchLevelEvent.groovy", "r")
795 extractedEvents.write(line)
797 elif eventList[i] == "trackDescription":
798 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
800 extractedEvents.write(line)
802 elif eventList[i] == "trackData":
803 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
805 extractedEvents.write(line)
807 elif eventList[i] == "mute":
808 #Write two events subsequently
809 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
810 extractedEvents.write("\t\t\tif (event == 0) {\n")
811 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
813 extractedEvents.write("\t\t" + line)
815 extractedEvents.write("\t\t\t} else {\n")
816 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
818 extractedEvents.write("\t\t" + line)
820 extractedEvents.write("\t\t\t}\n")
821 elif eventList[i] == "temperature":
822 #Check which capability
823 variable = eventVarMap[eventList[i]]
824 if eventList[i] not in eventVarCounterMap.keys():
825 eventVarCounterMap[eventList[i]] = 1
828 eventVarCount = eventVarCounterMap[eventList[i]]
829 eventVarCounterMap[eventList[i]] = eventVarCount + 1
830 capability = capabilityMap[variable[eventVarCount]]
831 if capability == "capability.thermostat":
832 event = open("eventSimulator/temperatureEvent.groovy", "r")
833 elif capability == "capability.temperatureMeasurement":
834 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
836 extractedEvents.write(line)
838 elif eventList[i] == "heatingSetpoint":
839 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
841 extractedEvents.write(line)
843 elif eventList[i] == "coolingSetpoint":
844 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
846 extractedEvents.write(line)
848 elif eventList[i] == "thermostatSetpoint":
849 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
851 extractedEvents.write(line)
854 ###TODO: Add more events later
855 extractedEvents.write("\t\t\tbreak\n")
856 extractedEvents.write("\t}\n")
857 extractedEvents.write("}\n")
859 def CheckIfOnlyTouchEvents():
860 #Check and throw an error if it is all touch events
861 #This is called Direct-Direct interaction and we do not model-check for this case
862 onlyTouchEvents = True
863 for item in eventList:
864 if item != "nfcTouch" and item != "app":
865 onlyTouchEvents = False
866 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
867 # Write error log file
868 extractError = open("appCreationError.log", "w+")
869 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
871 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
874 #Extract objects to call functions from App1
875 F1 = open("Extractor/App1/App1.groovy", "r")
876 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
877 ExtractFunctions(F1, "App1")
880 #Extract objects to call functions from App2
881 F2 = open("Extractor/App2/App2.groovy", "r")
882 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
883 ExtractFunctions(F2, "App2")
886 #Prepare eventSimulator file while parsing the App1 and App2 files
887 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
888 CheckIfOnlyTouchEvents()
889 ExtractEvents(extractedEvents)
890 extractedEvents.close()
892 #Save the extracted methods and app1 in a same file to extract information
893 extractorFile = open("Extractor/extractorFile.groovy", "w+")
894 Extractor = open("Extractor/Extractor.groovy", "r")
895 F1 = open("Extractor/App1/App1.groovy", "r")
897 extractorFile.write("////////////////////\n")
898 extractorFile.write("@Field App\n")
899 extractorFile.write("App = \"App1\"")
900 extractorFile.write("\n")
901 for line in Extractor:
902 extractorFile.write(line)
903 extractorFile.write("\n\n")
905 extractorFile.write(line)
906 extractorFile.close()
909 #Run the file to extract the objects
910 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
913 #Save the extracted methods and app2 in a same file to extract information
914 extractorFile = open("Extractor/extractorFile.groovy", "w+")
915 Extractor = open("Extractor/Extractor.groovy", "r")
916 F2 = open("Extractor/App2/App2.groovy", "r")
918 extractorFile.write("////////////////////\n")
919 extractorFile.write("@Field App\n")
920 extractorFile.write("App = \"App2\"")
921 extractorFile.write("\n")
922 for line in Extractor:
923 extractorFile.write(line)
924 extractorFile.write("\n\n")
926 extractorFile.write(line)
927 #Run the file to extract the objects
928 extractorFile.close()
931 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")