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"):
91 #print "DEBUG: %s" % variable
94 #if variable == "app" or variable == "location":
96 if Temp == "app" or Temp == "location":
97 if Temp not in eventList:
98 eventList.append(Temp)
99 elif variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList:
100 # We do not repeat the same capability twice
101 capability = capabilityMap[variable]
102 capabilityList.append(capability)
103 eventList.append(Temp)
104 if Temp in eventVarMap.keys():
105 listOfEvents = eventVarMap[Temp]
106 listOfEvents.append(variable)
108 eventVarMap[Temp] = [variable]
110 #Check and analyze capabilities for physical interaction
111 AnalyzeCapabilities(Temp, appName, F)
115 #Warn if there is a potential for physical interaction
116 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
117 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] == "nfcTouch":
209 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
211 extractedEvents.write(line)
213 elif eventList[i] == "app": #Case for Touched event
214 event = open("eventSimulator/appTouchEvent.groovy", "r")
216 extractedEvents.write(line)
218 elif eventList[i] == "button":
219 #Write two events subsequently
220 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
221 extractedEvents.write("\t\t\tif (event == 0) {\n")
222 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
224 extractedEvents.write("\t\t" + line)
226 extractedEvents.write("\t\t\t} else {\n")
227 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
229 extractedEvents.write("\t\t" + line)
231 extractedEvents.write("\t\t\t}\n")
232 elif eventList[i] == "water":
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/waterDryEvent.groovy", "r")
238 extractedEvents.write("\t\t" + line)
240 extractedEvents.write("\t\t\t} else {\n")
241 event = open("eventSimulator/waterWetEvent.groovy", "r")
243 extractedEvents.write("\t\t" + line)
245 extractedEvents.write("\t\t\t}\n")
246 elif eventList[i] == "presence":
247 #Check which capability
248 variable = eventVarMap[eventList[i]]
249 if eventList[i] not in eventVarCounterMap.keys():
250 eventVarCounterMap[eventList[i]] = 1
253 eventVarCount = eventVarCounterMap[eventList[i]]
254 eventVarCounterMap[eventList[i]] = eventVarCount + 1
255 capability = capabilityMap[variable[eventVarCount]]
256 #Write three events subsequently
257 if capability == "capability.presenceSensor":
258 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
259 elif capability == "capability.beacon":
260 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
261 extractedEvents.write("\t\t\tif (event == 0) {\n")
262 if capability == "capability.presenceSensor":
263 event = open("eventSimulator/presencePresentEvent.groovy", "r")
264 elif capability == "capability.beacon":
265 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
267 extractedEvents.write("\t\t" + line)
269 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
270 if capability == "capability.presenceSensor":
271 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
272 elif capability == "capability.beacon":
273 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
275 extractedEvents.write("\t\t" + line)
277 if capability == "capability.presenceSensor":
278 extractedEvents.write("\t\t\t} else {\n")
279 event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
281 extractedEvents.write("\t\t" + line)
283 extractedEvents.write("\t\t\t}\n")
284 elif eventList[i] == "doorState":
285 #Write two events subsequently
286 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
287 extractedEvents.write("\t\t\tif (event == 0) {\n")
288 event = open("eventSimulator/doorOpenEvent.groovy", "r")
290 extractedEvents.write("\t\t" + line)
292 extractedEvents.write("\t\t\t} else {\n")
293 event = open("eventSimulator/doorClosedEvent.groovy", "r")
295 extractedEvents.write("\t\t" + line)
297 extractedEvents.write("\t\t\t}\n")
298 elif eventList[i] == "motion":
299 #Write two events subsequently
300 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
301 extractedEvents.write("\t\t\tif (event == 0) {\n")
302 event = open("eventSimulator/motionActiveEvent.groovy", "r")
304 extractedEvents.write("\t\t" + line)
306 extractedEvents.write("\t\t\t} else {\n")
307 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
309 extractedEvents.write("\t\t" + line)
311 extractedEvents.write("\t\t\t}\n")
312 elif eventList[i] == "smoke":
313 #Write three events subsequently
314 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
315 extractedEvents.write("\t\t\tif (event == 0) {\n")
316 event = open("eventSimulator/smokeClearEvent.groovy", "r")
318 extractedEvents.write("\t\t" + line)
320 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
321 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
323 extractedEvents.write("\t\t" + line)
325 extractedEvents.write("\t\t\t} else {\n")
326 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
328 extractedEvents.write("\t\t" + line)
330 extractedEvents.write("\t\t\t}\n")
331 elif eventList[i] == "carbonMonoxide":
332 #Check which capability
333 variable = eventVarMap[eventList[i]]
334 if eventList[i] not in eventVarCounterMap.keys():
335 eventVarCounterMap[eventList[i]] = 1
338 eventVarCount = eventVarCounterMap[eventList[i]]
339 eventVarCounterMap[eventList[i]] = eventVarCount + 1
340 capability = capabilityMap[variable[eventVarCount]]
341 #Write three events subsequently
342 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
343 extractedEvents.write("\t\t\tif (event == 0) {\n")
344 if capability == "capability.smokeDetector":
345 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
346 elif capability == "capability.carbonMonoxideDetector":
347 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
349 extractedEvents.write("\t\t" + line)
351 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
352 if capability == "capability.smokeDetector":
353 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
354 elif capability == "capability.carbonMonoxideDetector":
355 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
357 extractedEvents.write("\t\t" + line)
359 extractedEvents.write("\t\t\t} else {\n")
360 if capability == "capability.smokeDetector":
361 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
362 elif capability == "capability.carbonMonoxideDetector":
363 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
365 extractedEvents.write("\t\t" + line)
367 extractedEvents.write("\t\t\t}\n")
368 elif eventList[i] == "battery":
369 #Check which capability
370 variable = eventVarMap[eventList[i]]
371 if eventList[i] not in eventVarCounterMap.keys():
372 eventVarCounterMap[eventList[i]] = 1
375 eventVarCount = eventVarCounterMap[eventList[i]]
376 eventVarCounterMap[eventList[i]] = eventVarCount + 1
377 capability = capabilityMap[variable[eventVarCount]]
378 if capability == "capability.smokeDetector":
379 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
380 elif capability == "capability.battery":
381 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
383 extractedEvents.write(line)
385 elif eventList[i] == "thermostatMode":
386 #Write five events subsequently
387 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
388 extractedEvents.write("\t\t\tif (event == 0) {\n")
389 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
391 extractedEvents.write("\t\t" + line)
393 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
394 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
396 extractedEvents.write("\t\t" + line)
398 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
399 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
401 extractedEvents.write("\t\t" + line)
403 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
404 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
406 extractedEvents.write("\t\t" + line)
408 extractedEvents.write("\t\t\t} else {\n")
409 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
411 extractedEvents.write("\t\t" + line)
413 extractedEvents.write("\t\t\t}\n")
414 elif eventList[i] == "thermostatFanMode":
415 #Write five events subsequently
416 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
417 extractedEvents.write("\t\t\tif (event == 0) {\n")
418 event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")
420 extractedEvents.write("\t\t" + line)
422 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
423 event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
425 extractedEvents.write("\t\t" + line)
427 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
428 event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
430 extractedEvents.write("\t\t" + line)
432 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
433 event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
435 extractedEvents.write("\t\t" + line)
437 extractedEvents.write("\t\t\t} else {\n")
438 event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
440 extractedEvents.write("\t\t" + line)
442 extractedEvents.write("\t\t\t}\n")
443 elif eventList[i] == "thermostatOperatingState":
444 #Write five events subsequently
445 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
446 extractedEvents.write("\t\t\tif (event == 0) {\n")
447 event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")
449 extractedEvents.write("\t\t" + line)
451 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
452 event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
454 extractedEvents.write("\t\t" + line)
456 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
457 event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
459 extractedEvents.write("\t\t" + line)
461 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
462 event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
464 extractedEvents.write("\t\t" + line)
466 extractedEvents.write("\t\t\t} else {\n")
467 event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
469 extractedEvents.write("\t\t" + line)
471 extractedEvents.write("\t\t\t}\n")
472 elif eventList[i] == "switch":
473 #Check which capability
474 variable = eventVarMap[eventList[i]]
475 if eventList[i] not in eventVarCounterMap.keys():
476 eventVarCounterMap[eventList[i]] = 1
479 eventVarCount = eventVarCounterMap[eventList[i]]
480 eventVarCounterMap[eventList[i]] = eventVarCount + 1
481 capability = capabilityMap[variable[eventVarCount]]
482 #Write two events subsequently
483 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
484 extractedEvents.write("\t\t\tif (event == 0) {\n")
485 if capability == "capability.switch":
486 event = open("eventSimulator/switchOnEvent.groovy", "r")
487 elif capability == "capability.switchLevel":
488 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
489 elif capability == "capability.relaySwitch":
490 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
492 extractedEvents.write("\t\t" + line)
494 extractedEvents.write("\t\t\t} else {\n")
495 if capability == "capability.switch":
496 event = open("eventSimulator/switchOffEvent.groovy", "r")
497 elif capability == "capability.switchLevel":
498 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
499 elif capability == "capability.relaySwitch":
500 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
502 extractedEvents.write("\t\t" + line)
504 extractedEvents.write("\t\t\t}\n")
505 elif eventList[i] == "location": #Case for Location event
506 #Write three events subsequently
507 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
508 extractedEvents.write("\t\t\tif (event == 0) {\n")
509 event = open("eventSimulator/locationHomeEvent.groovy", "r")
511 extractedEvents.write("\t\t" + line)
513 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
514 event = open("eventSimulator/locationAwayEvent.groovy", "r")
516 extractedEvents.write("\t\t" + line)
518 extractedEvents.write("\t\t\t} else {\n")
519 event = open("eventSimulator/locationNightEvent.groovy", "r")
521 extractedEvents.write("\t\t" + line)
523 extractedEvents.write("\t\t\t}\n")
524 elif eventList[i] == "acceleration":
525 #Write two events subsequently
526 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
527 extractedEvents.write("\t\t\tif (event == 0) {\n")
528 event = open("eventSimulator/accelerationActiveEvent.groovy", "r")
530 extractedEvents.write("\t\t" + line)
532 extractedEvents.write("\t\t\t} else {\n")
533 event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
535 extractedEvents.write("\t\t" + line)
537 extractedEvents.write("\t\t\t}\n")
538 elif eventList[i] == "sleeping":
539 #Write two events subsequently
540 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
541 extractedEvents.write("\t\t\tif (event == 0) {\n")
542 event = open("eventSimulator/sleepSleepingEvent.groovy", "r")
544 extractedEvents.write("\t\t" + line)
546 extractedEvents.write("\t\t\t} else {\n")
547 event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
549 extractedEvents.write("\t\t" + line)
551 extractedEvents.write("\t\t\t}\n")
552 elif eventList[i] == "goal":
553 event = open("eventSimulator/stepGoalEvent.groovy", "r")
555 extractedEvents.write(line)
557 elif eventList[i] == "steps":
558 event = open("eventSimulator/stepStepsEvent.groovy", "r")
560 extractedEvents.write(line)
562 elif eventList[i] == "color":
563 event = open("eventSimulator/colorChangedEvent.groovy", "r")
565 extractedEvents.write(line)
567 elif eventList[i] == "hue":
568 event = open("eventSimulator/hueChangedEvent.groovy", "r")
570 extractedEvents.write(line)
572 elif eventList[i] == "saturation":
573 event = open("eventSimulator/saturationChangedEvent.groovy", "r")
575 extractedEvents.write(line)
577 elif eventList[i] == "energy":
578 event = open("eventSimulator/energyMeterEvent.groovy", "r")
580 extractedEvents.write(line)
582 elif eventList[i] == "power":
583 event = open("eventSimulator/powerMeterEvent.groovy", "r")
585 extractedEvents.write(line)
587 elif eventList[i] == "illuminance":
588 event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r")
590 extractedEvents.write(line)
592 elif eventList[i] == "humidity":
593 event = open("eventSimulator/humidityMeasurementEvent.groovy", "r")
595 extractedEvents.write(line)
597 elif eventList[i] == "alarm":
598 #Write four events subsequently
599 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,3)\n")
600 extractedEvents.write("\t\t\tif (event == 0) {\n")
601 event = open("eventSimulator/alarmBothEvent.groovy", "r")
603 extractedEvents.write("\t\t" + line)
605 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
606 event = open("eventSimulator/alarmSirenEvent.groovy", "r")
608 extractedEvents.write("\t\t" + line)
610 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
611 event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
613 extractedEvents.write("\t\t" + line)
615 extractedEvents.write("\t\t\t} else {\n")
616 event = open("eventSimulator/alarmOffEvent.groovy", "r")
618 extractedEvents.write("\t\t" + line)
620 extractedEvents.write("\t\t\t}\n")
621 elif eventList[i] == "contact":
622 #Check which capability
623 variable = eventVarMap[eventList[i]]
624 if eventList[i] not in eventVarCounterMap.keys():
625 eventVarCounterMap[eventList[i]] = 1
628 eventVarCount = eventVarCounterMap[eventList[i]]
629 eventVarCounterMap[eventList[i]] = eventVarCount + 1
630 capability = capabilityMap[variable[eventVarCount]]
631 #Write two events subsequently
632 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
633 extractedEvents.write("\t\t\tif (event == 0) {\n")
634 if capability == "capability.contactSensor":
635 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
636 elif capability == "capability.valve":
637 event = open("eventSimulator/valveClosedEvent.groovy", "r")
639 extractedEvents.write("\t\t" + line)
641 extractedEvents.write("\t\t\t} else {\n")
642 if capability == "capability.contactSensor":
643 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
644 elif capability == "capability.valve":
645 event = open("eventSimulator/valveOpenEvent.groovy", "r")
647 extractedEvents.write("\t\t" + line)
649 extractedEvents.write("\t\t\t}\n")
650 elif eventList[i] == "status":
651 #Write three events subsequently
652 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
653 extractedEvents.write("\t\t\tif (event == 0) {\n")
654 event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")
656 extractedEvents.write("\t\t" + line)
658 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
659 event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
661 extractedEvents.write("\t\t" + line)
663 extractedEvents.write("\t\t\t} else {\n")
664 event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
666 extractedEvents.write("\t\t" + line)
668 extractedEvents.write("\t\t\t}\n")
669 elif eventList[i] == "level":
670 #Check which capability
671 variable = eventVarMap[eventList[i]]
672 if eventList[i] not in eventVarCounterMap.keys():
673 eventVarCounterMap[eventList[i]] = 1
676 eventVarCount = eventVarCounterMap[eventList[i]]
677 eventVarCounterMap[eventList[i]] = eventVarCount + 1
678 capability = capabilityMap[variable[eventVarCount]]
679 if capability == "capability.musicPlayer":
680 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
681 elif capability == "capability.switchLevel":
682 event = open("eventSimulator/switchLevelEvent.groovy", "r")
684 extractedEvents.write(line)
686 elif eventList[i] == "trackDescription":
687 event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
689 extractedEvents.write(line)
691 elif eventList[i] == "trackData":
692 event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
694 extractedEvents.write(line)
696 elif eventList[i] == "mute":
697 #Write two events subsequently
698 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
699 extractedEvents.write("\t\t\tif (event == 0) {\n")
700 event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")
702 extractedEvents.write("\t\t" + line)
704 extractedEvents.write("\t\t\t} else {\n")
705 event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
707 extractedEvents.write("\t\t" + line)
709 extractedEvents.write("\t\t\t}\n")
710 elif eventList[i] == "temperature":
711 #Check which capability
712 variable = eventVarMap[eventList[i]]
713 if eventList[i] not in eventVarCounterMap.keys():
714 eventVarCounterMap[eventList[i]] = 1
717 eventVarCount = eventVarCounterMap[eventList[i]]
718 eventVarCounterMap[eventList[i]] = eventVarCount + 1
719 capability = capabilityMap[variable[eventVarCount]]
720 if capability == "capability.thermostat":
721 event = open("eventSimulator/temperatureEvent.groovy", "r")
722 elif capability == "capability.temperatureMeasurement":
723 event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r")
725 extractedEvents.write(line)
727 elif eventList[i] == "heatingSetpoint":
728 event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
730 extractedEvents.write(line)
732 elif eventList[i] == "coolingSetpoint":
733 event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
735 extractedEvents.write(line)
737 elif eventList[i] == "thermostatSetpoint":
738 event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
740 extractedEvents.write(line)
743 ###TODO: Add more events later
744 extractedEvents.write("\t\t\tbreak\n")
745 extractedEvents.write("\t}\n")
746 extractedEvents.write("}\n")
748 def CheckIfOnlyTouchEvents():
749 #Check and throw an error if it is all touch events
750 #This is called Direct-Direct interaction and we do not model-check for this case
751 onlyTouchEvents = True
752 for item in eventList:
753 if item != "nfcTouch" and item != "app":
754 onlyTouchEvents = False
755 if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
756 # Write error log file
757 extractError = open("appCreationError.log", "w+")
758 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
760 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
763 #Extract objects to call functions from App1
764 F1 = open("Extractor/App1/App1.groovy", "r")
765 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
766 ExtractFunctions(F1, "App1")
769 #Extract objects to call functions from App2
770 F2 = open("Extractor/App2/App2.groovy", "r")
771 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
772 ExtractFunctions(F2, "App2")
775 #Prepare eventSimulator file while parsing the App1 and App2 files
776 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
777 CheckIfOnlyTouchEvents()
778 ExtractEvents(extractedEvents)
779 extractedEvents.close()
781 #Save the extracted methods and app1 in a same file to extract information
782 extractorFile = open("Extractor/extractorFile.groovy", "w+")
783 Extractor = open("Extractor/Extractor.groovy", "r")
784 F1 = open("Extractor/App1/App1.groovy", "r")
786 extractorFile.write("////////////////////\n")
787 extractorFile.write("@Field App\n")
788 extractorFile.write("App = \"App1\"")
789 extractorFile.write("\n")
790 for line in Extractor:
791 extractorFile.write(line)
792 extractorFile.write("\n\n")
794 extractorFile.write(line)
795 extractorFile.close()
798 #Run the file to extract the objects
799 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
802 #Save the extracted methods and app2 in a same file to extract information
803 extractorFile = open("Extractor/extractorFile.groovy", "w+")
804 Extractor = open("Extractor/Extractor.groovy", "r")
805 F2 = open("Extractor/App2/App2.groovy", "r")
807 extractorFile.write("////////////////////\n")
808 extractorFile.write("@Field App\n")
809 extractorFile.write("App = \"App2\"")
810 extractorFile.write("\n")
811 for line in Extractor:
812 extractorFile.write(line)
813 extractorFile.write("\n\n")
815 extractorFile.write(line)
816 #Run the file to extract the objects
817 extractorFile.close()
820 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")