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")
302 elif eventList[i] == "presence.present": #Case for Touched event
303 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
305 extractedEvents.write("\t\t" + line)
307 elif eventList[i] == "doorState":
308 #Write two events subsequently
309 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
310 extractedEvents.write("\t\t\tif (event == 0) {\n")
311 event = open("eventSimulator/doorOpenEvent.groovy", "r")
313 extractedEvents.write("\t\t" + line)
315 extractedEvents.write("\t\t\t} else {\n")
316 event = open("eventSimulator/doorClosedEvent.groovy", "r")
318 extractedEvents.write("\t\t" + line)
320 extractedEvents.write("\t\t\t}\n")
321 elif eventList[i] == "motion":
322 #Write two events subsequently
323 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
324 extractedEvents.write("\t\t\tif (event == 0) {\n")
325 event = open("eventSimulator/motionActiveEvent.groovy", "r")
327 extractedEvents.write("\t\t" + line)
329 extractedEvents.write("\t\t\t} else {\n")
330 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
332 extractedEvents.write("\t\t" + line)
334 extractedEvents.write("\t\t\t}\n")
335 elif eventList[i] == "motion.active":
336 event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r")
338 extractedEvents.write("\t\t" + line)
340 elif eventList[i] == "motion.inactive":
341 event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r")
343 extractedEvents.write("\t\t" + line)
345 elif eventList[i] == "smoke":
346 #Write three events subsequently
347 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
348 extractedEvents.write("\t\t\tif (event == 0) {\n")
349 event = open("eventSimulator/smokeClearEvent.groovy", "r")
351 extractedEvents.write("\t\t" + line)
353 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
354 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
356 extractedEvents.write("\t\t" + line)
358 extractedEvents.write("\t\t\t} else {\n")
359 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
361 extractedEvents.write("\t\t" + line)
363 extractedEvents.write("\t\t\t}\n")
364 elif eventList[i] == "smoke.clear":
365 event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r")
367 extractedEvents.write("\t\t" + line)
369 elif eventList[i] == "smoke.detected":
370 event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r")
372 extractedEvents.write("\t\t" + line)
374 elif eventList[i] == "smoke.tested":
375 event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r")
377 extractedEvents.write("\t\t" + line)
379 elif eventList[i] == "carbonMonoxide":
380 #Check which capability
381 variable = eventVarMap[eventList[i]]
382 if eventList[i] not in eventVarCounterMap.keys():
383 eventVarCounterMap[eventList[i]] = 1
386 eventVarCount = eventVarCounterMap[eventList[i]]
387 eventVarCounterMap[eventList[i]] = eventVarCount + 1
388 capability = capabilityMap[variable[eventVarCount]]
389 #Write three events subsequently
390 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
391 extractedEvents.write("\t\t\tif (event == 0) {\n")
392 if capability == "capability.smokeDetector":
393 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
394 elif capability == "capability.carbonMonoxideDetector":
395 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
397 extractedEvents.write("\t\t" + line)
399 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
400 if capability == "capability.smokeDetector":
401 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
402 elif capability == "capability.carbonMonoxideDetector":
403 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
405 extractedEvents.write("\t\t" + line)
407 extractedEvents.write("\t\t\t} else {\n")
408 if capability == "capability.smokeDetector":
409 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
410 elif capability == "capability.carbonMonoxideDetector":
411 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
413 extractedEvents.write("\t\t" + line)
415 extractedEvents.write("\t\t\t}\n")
416 elif eventList[i] == "carbonMonoxide.clear":
417 #Check which capability
418 variable = eventVarMap[eventList[i]]
419 if eventList[i] not in eventVarCounterMap.keys():
420 eventVarCounterMap[eventList[i]] = 1
423 eventVarCount = eventVarCounterMap[eventList[i]]
424 eventVarCounterMap[eventList[i]] = eventVarCount + 1
425 capability = capabilityMap[variable[eventVarCount]]
426 if capability == "capability.smokeDetector":
427 event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r")
428 elif capability == "capability.carbonMonoxideDetector":
429 event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r")
431 extractedEvents.write("\t\t" + line)
433 elif eventList[i] == "carbonMonoxide.detected":
434 #Check which capability
435 variable = eventVarMap[eventList[i]]
436 if eventList[i] not in eventVarCounterMap.keys():
437 eventVarCounterMap[eventList[i]] = 1
440 eventVarCount = eventVarCounterMap[eventList[i]]
441 eventVarCounterMap[eventList[i]] = eventVarCount + 1
442 capability = capabilityMap[variable[eventVarCount]]
443 if capability == "capability.smokeDetector":
444 event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r")
445 elif capability == "capability.carbonMonoxideDetector":
446 event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r")
448 extractedEvents.write("\t\t" + line)
450 elif eventList[i] == "carbonMonoxide.tested":
451 #Check which capability
452 variable = eventVarMap[eventList[i]]
453 if eventList[i] not in eventVarCounterMap.keys():
454 eventVarCounterMap[eventList[i]] = 1
457 eventVarCount = eventVarCounterMap[eventList[i]]
458 eventVarCounterMap[eventList[i]] = eventVarCount + 1
459 capability = capabilityMap[variable[eventVarCount]]
460 if capability == "capability.smokeDetector":
461 event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r")
462 elif capability == "capability.carbonMonoxideDetector":
463 event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r")
465 extractedEvents.write("\t\t" + line)
467 elif eventList[i] == "battery":
468 #Check which capability
469 variable = eventVarMap[eventList[i]]
470 if eventList[i] not in eventVarCounterMap.keys():
471 eventVarCounterMap[eventList[i]] = 1
474 eventVarCount = eventVarCounterMap[eventList[i]]
475 eventVarCounterMap[eventList[i]] = eventVarCount + 1
476 capability = capabilityMap[variable[eventVarCount]]
477 if capability == "capability.smokeDetector":
478 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
479 elif capability == "capability.battery":
480 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
482 extractedEvents.write(line)
484 elif eventList[i] == "thermostatMode":
485 #Write five events subsequently
486 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
487 extractedEvents.write("\t\t\tif (event == 0) {\n")
488 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
490 extractedEvents.write("\t\t" + line)
492 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
493 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
495 extractedEvents.write("\t\t" + line)
497 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
498 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
500 extractedEvents.write("\t\t" + line)
502 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
503 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
505 extractedEvents.write("\t\t" + line)
507 extractedEvents.write("\t\t\t} else {\n")
508 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
510 extractedEvents.write("\t\t" + line)
512 extractedEvents.write("\t\t\t}\n")
513 elif eventList[i] == "thermostatFanMode":
514 #Write five events subsequently
515 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
516 extractedEvents.write("\t\t\tif (event == 0) {\n")
517 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
519 extractedEvents.write("\t\t" + line)
521 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
522 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
524 extractedEvents.write("\t\t" + line)
526 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
527 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
529 extractedEvents.write("\t\t" + line)
531 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
532 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
534 extractedEvents.write("\t\t" + line)
536 extractedEvents.write("\t\t\t} else {\n")
537 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
539 extractedEvents.write("\t\t" + line)
541 extractedEvents.write("\t\t\t}\n")
542 elif eventList[i] == "thermostatOperatingState":
543 #Write five events subsequently
544 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
545 extractedEvents.write("\t\t\tif (event == 0) {\n")
546 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
548 extractedEvents.write("\t\t" + line)
550 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
551 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
553 extractedEvents.write("\t\t" + line)
555 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
556 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
558 extractedEvents.write("\t\t" + line)
560 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
561 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
563 extractedEvents.write("\t\t" + line)
565 extractedEvents.write("\t\t\t} else {\n")
566 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
568 extractedEvents.write("\t\t" + line)
570 extractedEvents.write("\t\t\t}\n")
571 elif eventList[i] == "switch":
572 #Check which capability
573 variable = eventVarMap[eventList[i]]
574 if eventList[i] not in eventVarCounterMap.keys():
575 eventVarCounterMap[eventList[i]] = 1
578 eventVarCount = eventVarCounterMap[eventList[i]]
579 eventVarCounterMap[eventList[i]] = eventVarCount + 1
580 capability = capabilityMap[variable[eventVarCount]]
581 #Write two events subsequently
582 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
583 extractedEvents.write("\t\t\tif (event == 0) {\n")
584 if capability == "capability.switch":
585 event = open("eventSimulator/switchOnEvent.groovy", "r")
586 elif capability == "capability.switchLevel":
587 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
588 elif capability == "capability.relaySwitch":
589 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
590 elif capability == "capability.colorControl":
591 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
593 extractedEvents.write("\t\t" + line)
595 extractedEvents.write("\t\t\t} else {\n")
596 if capability == "capability.switch":
597 event = open("eventSimulator/switchOffEvent.groovy", "r")
598 elif capability == "capability.switchLevel":
599 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
600 elif capability == "capability.relaySwitch":
601 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
602 elif capability == "capability.colorControl":
603 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
605 extractedEvents.write("\t\t" + line)
607 extractedEvents.write("\t\t\t}\n")
608 elif eventList[i] == "location": #Case for Location event
609 #Write three events subsequently
610 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
611 extractedEvents.write("\t\t\tif (event == 0) {\n")
612 event = open("eventSimulator/locationHomeEvent.groovy", "r")
614 extractedEvents.write("\t\t" + line)
616 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
617 event = open("eventSimulator/locationAwayEvent.groovy", "r")
619 extractedEvents.write("\t\t" + line)
621 extractedEvents.write("\t\t\t} else {\n")
622 event = open("eventSimulator/locationNightEvent.groovy", "r")
624 extractedEvents.write("\t\t" + line)
626 extractedEvents.write("\t\t\t}\n")
627 elif eventList[i] == "mode":
628 #Write three events subsequently
629 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
630 extractedEvents.write("\t\t\tif (event == 0) {\n")
631 event = open("eventSimulator/modeHomeEvent.groovy", "r")
633 extractedEvents.write("\t\t" + line)
635 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
636 event = open("eventSimulator/modeAwayEvent.groovy", "r")
638 extractedEvents.write("\t\t" + line)
640 extractedEvents.write("\t\t\t} else {\n")
641 event = open("eventSimulator/modeNightEvent.groovy", "r")
643 extractedEvents.write("\t\t" + line)
645 extractedEvents.write("\t\t\t}\n")
646 elif eventList[i] == "acceleration":
647 #Write two events subsequently
648 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
649 extractedEvents.write("\t\t\tif (event == 0) {\n")
650 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
652 extractedEvents.write("\t\t" + line)
654 extractedEvents.write("\t\t\t} else {\n")
655 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
657 extractedEvents.write("\t\t" + line)
659 extractedEvents.write("\t\t\t}\n")
660 elif eventList[i] == "acceleration.active":
661 event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r")
663 extractedEvents.write("\t\t" + line)
665 elif eventList[i] == "acceleration.inactive":
666 event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r")
668 extractedEvents.write("\t\t" + line)
670 elif eventList[i] == "sleeping":
671 #Write two events subsequently
672 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
673 extractedEvents.write("\t\t\tif (event == 0) {\n")
674 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
676 extractedEvents.write("\t\t" + line)
678 extractedEvents.write("\t\t\t} else {\n")
679 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
681 extractedEvents.write("\t\t" + line)
683 extractedEvents.write("\t\t\t}\n")
684 elif eventList[i] == "goal":
685 event = open("eventSimulator/stepGoalEvent.groovy", "r")
687 extractedEvents.write(line)
689 elif eventList[i] == "steps":
690 event = open("eventSimulator/stepStepsEvent.groovy", "r")
692 extractedEvents.write(line)
694 elif eventList[i] == "color":
695 event = open("eventSimulator/colorChangeEvent.groovy", "r")
697 extractedEvents.write(line)
699 elif eventList[i] == "colorTemperature":
700 event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
702 extractedEvents.write(line)
704 elif eventList[i] == "hue":
705 event = open("eventSimulator/hueChangeEvent.groovy", "r")
707 extractedEvents.write(line)
709 elif eventList[i] == "saturation":
710 event = open("eventSimulator/saturationChangeEvent.groovy", "r")
712 extractedEvents.write(line)
714 elif eventList[i] == "energy":
715 event = open("eventSimulator/energyMeterEvent.groovy", "r")
717 extractedEvents.write(line)
719 elif eventList[i] == "power":
720 event = open("eventSimulator/powerMeterEvent.groovy", "r")
722 extractedEvents.write(line)
724 elif eventList[i] == "illuminance":
725 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
727 extractedEvents.write(line)
729 elif eventList[i] == "humidity":
730 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
732 extractedEvents.write(line)
734 elif eventList[i] == "alarm":
735 #Write four events subsequently
736 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,3)\n")
737 extractedEvents.write("\t\t\tif (event == 0) {\n")
738 event = open("eventSimulator/alarmBothEvent.groovy", "r")
740 extractedEvents.write("\t\t" + line)
742 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
743 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
745 extractedEvents.write("\t\t" + line)
747 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
748 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
750 extractedEvents.write("\t\t" + line)
752 extractedEvents.write("\t\t\t} else {\n")
753 event = open("eventSimulator/alarmOffEvent.groovy", "r")
755 extractedEvents.write("\t\t" + line)
757 extractedEvents.write("\t\t\t}\n")
758 elif eventList[i] == "contact":
759 #Check which capability
760 variable = eventVarMap[eventList[i]]
761 if eventList[i] not in eventVarCounterMap.keys():
762 eventVarCounterMap[eventList[i]] = 1
765 eventVarCount = eventVarCounterMap[eventList[i]]
766 eventVarCounterMap[eventList[i]] = eventVarCount + 1
767 capability = capabilityMap[variable[eventVarCount]]
768 #Write two events subsequently
769 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
770 extractedEvents.write("\t\t\tif (event == 0) {\n")
771 if capability == "capability.contactSensor":
772 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
773 elif capability == "capability.valve":
774 event = open("eventSimulator/valveClosedEvent.groovy", "r")
776 extractedEvents.write("\t\t" + line)
778 extractedEvents.write("\t\t\t} else {\n")
779 if capability == "capability.contactSensor":
780 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
781 elif capability == "capability.valve":
782 event = open("eventSimulator/valveOpenEvent.groovy", "r")
784 extractedEvents.write("\t\t" + line)
786 extractedEvents.write("\t\t\t}\n")
787 elif eventList[i] == "status":
788 #Write three events subsequently
789 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
790 extractedEvents.write("\t\t\tif (event == 0) {\n")
791 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
793 extractedEvents.write("\t\t" + line)
795 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
796 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
798 extractedEvents.write("\t\t" + line)
800 extractedEvents.write("\t\t\t} else {\n")
801 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
803 extractedEvents.write("\t\t" + line)
805 extractedEvents.write("\t\t\t}\n")
806 elif eventList[i] == "level":
807 #Check which capability
808 variable = eventVarMap[eventList[i]]
809 if eventList[i] not in eventVarCounterMap.keys():
810 eventVarCounterMap[eventList[i]] = 1
813 eventVarCount = eventVarCounterMap[eventList[i]]
814 eventVarCounterMap[eventList[i]] = eventVarCount + 1
815 capability = capabilityMap[variable[eventVarCount]]
816 if capability == "capability.musicPlayer":
817 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
818 elif capability == "capability.switchLevel":
819 event = open("eventSimulator/switchLevelEvent.groovy", "r")
821 extractedEvents.write(line)
823 elif eventList[i] == "trackDescription":
824 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
826 extractedEvents.write(line)
828 elif eventList[i] == "trackData":
829 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
831 extractedEvents.write(line)
833 elif eventList[i] == "mute":
834 #Write two events subsequently
835 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
836 extractedEvents.write("\t\t\tif (event == 0) {\n")
837 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
839 extractedEvents.write("\t\t" + line)
841 extractedEvents.write("\t\t\t} else {\n")
842 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
844 extractedEvents.write("\t\t" + line)
846 extractedEvents.write("\t\t\t}\n")
847 elif eventList[i] == "temperature":
848 #Check which capability
849 variable = eventVarMap[eventList[i]]
850 if eventList[i] not in eventVarCounterMap.keys():
851 eventVarCounterMap[eventList[i]] = 1
854 eventVarCount = eventVarCounterMap[eventList[i]]
855 eventVarCounterMap[eventList[i]] = eventVarCount + 1
856 capability = capabilityMap[variable[eventVarCount]]
857 if capability == "capability.thermostat":
858 event = open("eventSimulator/temperatureEvent.groovy", "r")
859 elif capability == "capability.temperatureMeasurement":
860 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
862 extractedEvents.write(line)
864 elif eventList[i] == "heatingSetpoint":
865 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
867 extractedEvents.write(line)
869 elif eventList[i] == "coolingSetpoint":
870 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
872 extractedEvents.write(line)
874 elif eventList[i] == "thermostatSetpoint":
875 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
877 extractedEvents.write(line)
880 ###TODO: Add more events later
881 extractedEvents.write("\n\t\t\tbreak\n")
882 extractedEvents.write("\t}\n")
883 extractedEvents.write("}\n")
885 def CheckIfOnlyTouchEvents():
886 #Check and throw an error if it is all touch events
887 #This is called Direct-Direct interaction and we do not model-check for this case
888 onlyTouchEvents = True
889 for item in eventList:
890 if item != "nfcTouch" and item != "app":
891 onlyTouchEvents = False
892 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
893 # Write error log file
894 extractError = open("appCreationError.log", "w+")
895 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
897 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
900 #Extract objects to call functions from App1
901 F1 = open("Extractor/App1/App1.groovy", "r")
902 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
903 ExtractFunctions(F1, "App1")
906 #Extract objects to call functions from App2
907 F2 = open("Extractor/App2/App2.groovy", "r")
908 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
909 ExtractFunctions(F2, "App2")
912 #Prepare eventSimulator file while parsing the App1 and App2 files
913 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
914 CheckIfOnlyTouchEvents()
915 ExtractEvents(extractedEvents)
916 extractedEvents.close()
918 #Save the extracted methods and app1 in a same file to extract information
919 extractorFile = open("Extractor/extractorFile.groovy", "w+")
920 Extractor = open("Extractor/Extractor.groovy", "r")
921 F1 = open("Extractor/App1/App1.groovy", "r")
923 extractorFile.write("////////////////////\n")
924 extractorFile.write("@Field App\n")
925 extractorFile.write("App = \"App1\"")
926 extractorFile.write("\n")
927 for line in Extractor:
928 extractorFile.write(line)
929 extractorFile.write("\n\n")
931 extractorFile.write(line)
932 extractorFile.close()
935 #Run the file to extract the objects
936 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
939 #Save the extracted methods and app2 in a same file to extract information
940 extractorFile = open("Extractor/extractorFile.groovy", "w+")
941 Extractor = open("Extractor/Extractor.groovy", "r")
942 F2 = open("Extractor/App2/App2.groovy", "r")
944 extractorFile.write("////////////////////\n")
945 extractorFile.write("@Field App\n")
946 extractorFile.write("App = \"App2\"")
947 extractorFile.write("\n")
948 for line in Extractor:
949 extractorFile.write(line)
950 extractorFile.write("\n\n")
952 extractorFile.write(line)
953 #Run the file to extract the objects
954 extractorFile.close()
957 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")