Adding printout for event numbers.
[smartthings-infrastructure.git] / Extractor / ExtractorScript.py
1 import os
2 readyToReturn = 0
3 ToReturn = ""
4 eventList = []
5 eventAppList = [] # This list maps App1 or App2 to a specific event
6 eventVarMap = {}
7 eventVarCounterMap = {}
8 capabilityMap = {}
9 capabilityList = []
10 app1Capabilities = []
11 app2Capabilities = []
12 app1Subscribe = False
13 app2Subscribe = False
14
15 # Mapping for event type and number of events
16 # e.g., switch has 2 events: on and off
17 eventTypeCounterMap =  {'lock': 2,
18                                                 'nfcTouch' : 1,
19                                                 'app' : 1,
20                                                 'button' : 2,
21                                                 'water' : 2,
22                                                 'water.dry' : 1,
23                                                 'water.wet' : 1,
24                                                 'presence' : 2,
25                                                 'doorState' : 2,
26                                                 'motion' : 2,
27                                                 'smoke' : 3,
28                                                 'carbonMonoxide' : 3,
29                                                 'battery' : 1,
30                                                 'thermostatMode' : 5,
31                                                 'thermostatFanMode' : 5,
32                                                 'thermostatOperatingState' : 5,
33                                                 'switch' : 2,
34                                                 'location' : 3,
35                                                 'mode' : 3,
36                                                 'sunset' : 1,
37                                                 'sunsetTime' : 1,
38                                                 'sunrise' : 1,
39                                                 'sunriseTime' : 1,
40                                                 'acceleration' : 2,
41                                                 'sleeping' : 2,
42                                                 'goal' : 2,
43                                                 'steps' : 2,
44                                                 'color' : 1,
45                                                 'colorTemperature' : 1,
46                                                 'hue' : 1,
47                                                 'saturation' : 1,
48                                                 'energy' : 1,
49                                                 'power' : 2,
50                                                 'illuminance' : 2,
51                                                 'humidity' : 2,
52                                                 'alarm' : 4,
53                                                 'contact' : 2,
54                                                 'status' : 3,
55                                                 'level' : 1,
56                                                 'trackDescription' : 1,
57                                                 'trackData' : 1,
58                                                 'mute' : 2,
59                                                 'temperature' : 2,
60                                                 'heatingSetpoint' : 1,
61                                                 'coolingSetpoint' : 1,
62                                                 'thermostatSetpoint' : 1,
63                                                 'threeAxis' : 1,
64                                                 'carbonDioxide' : 1,
65                                                 'consumableStatus' : 1,
66                                                 'pH' : 1,
67                                                 'pressure': 1,
68                                                 'shock': 1,
69                                                 'lqi': 1,
70                                                 'rssi': 1,
71                                                 'schedule': 1,
72                                                 'sound': 1,
73                                                 'soundPressureLevel' : 1,
74                                                 'tamper' : 1,
75                                                 'ultravioletIndex': 1,
76                                                 'voltage': 1,
77                                                 'windowShade': 1,
78                                                 'touched': 1,
79                                                 'alarm.both': 1,
80                                                 'alarm.siren' : 1,
81                                                 'alarm.strobe' : 1,
82                                                 'alarm.off' : 1,
83                                                 'contact.open' : 1,
84                                                 'contact.closed' : 1,
85                                                 'tamper.tampered' : 2,
86                                                 'doorState.open' : 1,
87                                                 'doorState.closed' : 1,
88                                                 'position' : 3,
89                                                 'mode' : 3,
90                                                 'mode.away' : 1,
91                                                 'mode.home' : 1,
92                                                 'mode.night' : 1,
93                                                 'lock.locked' : 1,
94                                                 'lock.unlocked' : 1,
95                                                 'motion.active' : 1,
96                                                 'motion.inactive' : 1,
97                                                 'status.playing' : 1,
98                                                 'status.stopped' : 1,
99                                                 'status.paused' : 1,
100                                                 'mute.muted' : 1,
101                                                 'mute.unmuted' : 1,
102                                                 'presence.present' : 1,
103                                                 'presence.not present' : 1,
104                                                 'presence.not' : 1,
105                                                 'smoke.detected' : 1,
106                                                 'smoke.clear' : 1,
107                                                 'smoke.tested' : 1,
108                                                 'carbonMonoxide.detected' : 1,
109                                                 'carbonMonoxide.clear' : 1,
110                                                 'carbonMonoxide.tested' : 1,
111                                                 'thermostatMode.cool' : 1,
112                                                 'thermostatMode.auto' : 1,
113                                                 'thermostatMode.emergencyHeat' : 1,
114                                                 'thermostatMode.heat' : 1,
115                                                 'thermostatMode.off' : 1,
116                                                 'thermostatFanMode.auto' : 1,
117                                                 'thermostatFanMode.fanCirculate' : 1,
118                                                 'thermostatFanMode.circulate' : 1,
119                                                 'thermostatFanMode.fanOn' : 1,
120                                                 'thermostatFanMode.on' : 1,
121                                                 'fanMode' : 5,
122                                                 'fanMode.auto' : 1,
123                                                 'fanMode.fanCirculate' : 1,
124                                                 'fanMode.circulate' : 1,
125                                                 'fanMode.fanOn' : 1,
126                                                 'fanMode.on' : 1,
127                                                 'switch.on' : 1,
128                                                 'switch.off' : 1,
129                                                 'button.pushed' : 1,
130                                                 'button.held' : 1,
131                                                 'acceleration.active' : 1,
132                                                 'acceleration.inactive' : 1,
133                                                 'sleeping.sleeping' : 1,
134                                                 'sleeping.not sleeping' : 1,
135                                                 'water.dry' : 1,
136                                                 'water.wet' : 1
137                                                 }
138
139 def GetToken(f):
140         global readyToReturn
141         global ToReturn
142         Skip = ['\n', '\t', ' ']
143         Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
144         S = ""
145         if (readyToReturn):
146                 readyToReturn = 0
147                 return ToReturn
148         ToReturn = ""
149         c = f.read(1)
150         while(True):
151                 if (c in Special):
152                         if (S != ""):
153                                 readyToReturn = 1
154                                 ToReturn = c
155                                 return S
156                         else:
157                                 return c
158                 elif (c in Skip):
159                         if (S != ""):
160                                 return S        
161                         else:
162                                 c = f.read(1)
163                                 continue
164                 S += c
165                 c = f.read(1)
166                 if not c:
167                         return "EOF"
168
169 def ExtractFunctions(F, appName):
170         global eventList
171         global eventAppList
172         global app1Subscribe
173         global app2Subscribe
174         Temp = GetToken(F)
175         while (Temp != "EOF"):
176                 if (Temp == "def" or Temp == "private"):
177                         Temp = GetToken(F)
178                         if (Temp == "def" or Temp == "private"):
179                                 Temp = GetToken(F)
180                         NameofFunc = Temp
181                         if (GetToken(F) == "("): #We have a function to create object for
182                                 if (appName == "App1"):
183                                         extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")    
184                                         extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
185                                         extractedFunctionsApp1.write("%s\n" % NameofFunc)
186                                 else:
187                                         extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")    
188                                         extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
189                                         extractedFunctionsApp2.write("%s\n" % NameofFunc)
190                 
191                 #Check subscribed events
192                 if (Temp == "initialize" or Temp == "installed"):
193                         Temp = GetToken(F)
194                         Temp = GetToken(F)
195                         Temp = GetToken(F)
196                         # If it is a schedule function, then extract the scheduled method and put it as one of the events
197                         if (Temp == "schedule"):
198                                 eventList.append("schedule")
199                                 if (appName == "App1"):
200                                         eventAppList.append("App1")
201                                 else:
202                                         eventAppList.append("App2")
203                                 while Temp != ",":
204                                         Temp = GetToken(F)
205                                 Temp = GetToken(F)
206                                 # If this is a " then get the next one still---we are interested in the scheduled function name
207                                 if (Temp == "\""):
208                                         Temp = GetToken(F)
209                                 # Insert function name into the map
210                                 if "schedule" in eventVarMap.keys():
211                                         listOfEvents = eventVarMap["schedule"]
212                                         listOfEvents.append(Temp)
213                                 else:
214                                         eventVarMap["schedule"] = [Temp]
215                 
216                 #Check input capability
217                 if (Temp == "input"):
218                         while Temp != "\"":
219                                 Temp = GetToken(F)
220                         variable = GetToken(F)
221                         Temp = GetToken(F) #Get '"'
222                         Temp = GetToken(F) #Get ','
223                         while Temp != "\"":
224                                 Temp = GetToken(F)
225                         capability = GetToken(F)
226                         capabilityMap[variable] = capability
227                 
228                 #Check subscribed events
229                 if (Temp == "subscribe"):
230                         if (appName == "App1"):
231                                 app1Subscribe = True
232                         else:
233                                 app2Subscribe = True
234                         Temp = GetToken(F)
235                         if (Temp == "("):
236                                 Temp = GetToken(F)
237                         variable = Temp
238                         while (Temp != "\"" and Temp != "app" and Temp != "location"):
239                                 Temp = GetToken(F)
240                         if Temp == "location":
241                                 # See if we have another case for location
242                                 Temp = GetToken(F) # Get ','
243                                 Temp = GetToken(F) # Get '"'
244                                 if Temp == "\"":
245                                         Temp = GetToken(F)                      
246                                 else:
247                                         # This is the special case where we will see, e.g., sunset, sunrise, etc.
248                                         Temp = "location"
249                         if Temp == "\"":
250                                 Temp = GetToken(F)
251
252                         #print "DEBUG: %s - %s" % (variable, Temp)
253                         #print capabilityMap
254                         #print "DEBUG: location variable: %s" % Temp    
255
256             #This is a bogus event, just skip it...
257                         if Temp == "unlock":
258                                 continue
259                         if Temp == "app" or Temp == "location" or Temp == "position" or Temp == "mode" or Temp == "mode.away" or Temp == "mode.home" or Temp == "mode.night" or \
260                                 Temp == "sunset" or Temp == "sunrise" or Temp == "sunsetTime" or Temp == "sunriseTime":
261                                 if Temp not in eventList:
262                                         eventList.append(Temp)
263                                         if (appName == "App1"):
264                                                 eventAppList.append("App1")
265                                         else:
266                                                 eventAppList.append("App2")
267                         elif Temp not in eventList or (variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList):
268                                 # We do not repeat the same capability twice
269                                 capability = capabilityMap[variable]
270                                 capabilityList.append(capability)
271                                 eventList.append(Temp)
272                                 if (appName == "App1"):
273                                         eventAppList.append("App1")
274                                 else:
275                                         eventAppList.append("App2")
276                                 if Temp in eventVarMap.keys():
277                                         listOfEvents = eventVarMap[Temp]
278                                         listOfEvents.append(variable)
279                                 else:
280                                         eventVarMap[Temp] = [variable]
281                         #print "DEBUG: %s - %s" % (variable, Temp)
282                         #print capabilityMap
283                         #print eventList
284
285                 #Check and analyze capabilities for physical interaction
286                 AnalyzeCapabilities(Temp, appName, F)
287
288                 Temp = GetToken(F)
289         
290         #Warn if there is a potential for physical interaction
291         AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
292         AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
293
294 def AnalyzeCapabilities(Temp, appName, F):
295                         #Illuminance related
296         if (Temp == "capability.switch" or
297                         Temp == "capability.switchLevel" or
298                         Temp == "capability.illuminanceMeasurement" or
299                         Temp == "capability.colorControl" or
300                         Temp == "capability.colorTemperature" or
301                         #Motion related
302                         Temp == "capability.motionSensor" or
303                         Temp == "capability.accelerationSensor" or
304                         #Water related
305                         Temp == "capability.valve" or
306                         Temp == "capability.waterSensor" or
307                         #Sound related
308                         Temp == "capability.musicPlayer" or
309                         Temp == "capability.alarm" or
310                         Temp == "capability.speechSynthesis" or
311                         Temp == "capability.soundSensor"):
312                 if (appName == "App1"):
313                         app1Capabilities.append(Temp)
314                 else:
315                         app2Capabilities.append(Temp)
316         if (Temp == "capability"):
317                 Temp = GetToken(F) #Get '"'
318                 Temp = GetToken(F) #Get 'Music'
319                 Temp = Temp + GetToken(F) #Get 'Player'
320                 if (Temp == "MusicPlayer"):
321                         if (appName == "App1"):
322                                 app1Capabilities.append("capability.musicPlayer")
323                         else:
324                                 app2Capabilities.append("capability.musicPlayer")
325                         
326 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
327         #Light
328         if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or 
329                         "capability.switchLevel" in app2Capab or "capability.colorControl" or "capability.colorTemperature" in app2Capab):
330                 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
331         #Motion
332         # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion
333         if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab):
334                 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")             
335         #Water
336         if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or 
337                         "capability.switch" in app2Capab):
338                 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
339         #Sound
340         if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or 
341                         "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
342                 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
343
344 def CountEvents():
345         global eventList
346         numOfActualEvents = 0
347         #print "DEBUG: eventlist: %d" % len(eventList)
348         #print "DEBUG: eventlist: %s" % eventList
349         for event in eventList:
350                 print("DEBUG: Event: %s %d" % (event, eventTypeCounterMap[event]))
351                 numOfActualEvents = numOfActualEvents + eventTypeCounterMap[event]
352         return numOfActualEvents
353
354 def ExtractEvents(extractedEvents):
355         global eventList
356         global eventAppList
357         global eventVarMap
358         global capabilityMap
359         global eventVarCounterMap
360         # Count the number of events
361         numOfActualEvents = CountEvents()
362         # Use the following lines to print out numbers of events
363         #evtFile = open("numberOfEvents", "a+")
364         #evtFile.write(str(numOfActualEvents))
365         #evtFile.write("\n")
366         #evtFile.close()
367         extractedEvents.write("while(true) {\n")
368         # We use Verify.getIntFromList() instead of Verify.getInt() since we want to manipulate the
369         # choices in the list/set to implement POR
370         #extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (numOfActualEvents - 1))
371         extractedEvents.write("\tdef eventNumber = Verify.getIntFromList(0,")
372         if (numOfActualEvents == 1):
373                 extractedEvents.write("1)\n")
374         else:
375                 for x in range (1, numOfActualEvents - 1):
376                         extractedEvents.write("%d," % x)
377                 extractedEvents.write("%d)\n" % (numOfActualEvents - 1))
378         extractedEvents.write("\tswitch(eventNumber) {\n")
379         counter = 0
380         indexApp1 = 0
381         if "App2" in eventAppList:
382                 indexApp2 = eventAppList.index("App2")
383         else:
384                 indexApp2 = len(eventList)
385         indexApp2Start = indexApp2
386         #print "DEBUG: App1: %d" % indexApp1
387         #print "DEBUG: App2: %d" % indexApp2
388         #print "DEBUG: eventList: %d" % len(eventList)
389         #print capabilityMap
390         #print eventVarMap
391         #print eventAppList
392         #print eventList
393         if indexApp2Start > 0:
394                 isApp1 = True
395         else:
396                 isApp1 = False
397         while counter < numOfActualEvents:
398                 # Interleave events from App1 and App2
399                 if isApp1 is True:
400                         i = indexApp1
401                         indexApp1 = indexApp1 + 1
402                         if indexApp2 < len(eventList):
403                                 isApp1 = False
404                 else:
405                         i = indexApp2
406                         indexApp2 = indexApp2 + 1
407                         if indexApp1 < indexApp2Start:
408                                 isApp1 = True
409                 #print "DEBUG: i: %d" % i
410                 extractedEvents.write("\t\tcase %d:\n" % counter)
411                 if eventList[i] == "schedule":
412                         variable = eventVarMap[eventList[i]]
413                         if eventList[i] not in eventVarCounterMap.keys():
414                                 eventVarCounterMap[eventList[i]] = 1
415                                 eventVarCount = 0
416                         else:
417                                 eventVarCount = eventVarCounterMap[eventList[i]]
418                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
419                         currentMethod = variable[eventVarCount]
420                         extractedEvents.write("\t\t\t// Scheduled method in installed() or intialize()\n")
421                         extractedEvents.write("\t\t\t%s.%s()" % (eventAppList[i].lower(), currentMethod))
422                 elif eventList[i] == "lock":
423                         #Write two events subsequently
424                         event = open("eventSimulator/lockLockedEvent.groovy", "r")                      
425                         for line in event:
426                                 extractedEvents.write(line)
427                         event.close()
428                         extractedEvents.write("\n\t\t\tbreak\n")
429                         counter = counter + 1
430                         extractedEvents.write("\t\tcase %d:\n" % counter)
431                         event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
432                         for line in event:
433                                 extractedEvents.write(line)
434                         event.close()
435                 elif eventList[i] == "lock.locked":
436                         event = open("eventSimulator/lockLockedEvent.groovy", "r")                      
437                         for line in event:
438                                 extractedEvents.write(line)
439                         event.close()
440                 elif eventList[i] == "lock.unlocked":
441                         event = open("eventSimulator/lockUnlockedEvent.groovy", "r")
442                         for line in event:
443                                 extractedEvents.write(line)
444                         event.close()
445                 elif eventList[i] == "nfcTouch":
446                         event = open("eventSimulator/nfcTouchEvent.groovy", "r")
447                         for line in event:
448                                 extractedEvents.write(line)
449                         event.close()
450                 elif eventList[i] == "app": #Case for Touched event
451                         event = open("eventSimulator/appTouchEvent.groovy", "r")
452                         for line in event:
453                                 extractedEvents.write(line)
454                         event.close()
455                 elif eventList[i] == "button":
456                         #Check which capability
457                         variable = eventVarMap[eventList[i]]
458                         if eventList[i] not in eventVarCounterMap.keys():
459                                 eventVarCounterMap[eventList[i]] = 1
460                                 eventVarCount = 0
461                         else:
462                                 eventVarCount = eventVarCounterMap[eventList[i]]
463                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
464                         capability = capabilityMap[variable[eventVarCount]]
465                         #Write two events subsequently
466                         if capability == "capability.button":
467                                 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
468                         elif capability == "device.aeonKeyFob":
469                                 event = open("eventSimulator/aeonKeyFobHeldEvent.groovy", "r")
470                         for line in event:
471                                 extractedEvents.write(line)
472                         event.close()
473                         extractedEvents.write("\n\t\t\tbreak\n")
474                         counter = counter + 1
475                         extractedEvents.write("\t\tcase %d:\n" % counter)
476                         if capability == "capability.button":
477                                 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
478                         elif capability == "device.aeonKeyFob":
479                                 event = open("eventSimulator/aeonKeyFobPushedEvent.groovy", "r")
480                         for line in event:
481                                 extractedEvents.write(line)
482                         event.close()
483                 elif eventList[i] == "button.pushed":
484                         event = open("eventSimulator/buttonPushedEvent.groovy", "r")
485                         for line in event:
486                                 extractedEvents.write(line)
487                         event.close()
488                 elif eventList[i] == "button.held":
489                         event = open("eventSimulator/buttonHeldEvent.groovy", "r")
490                         for line in event:
491                                 extractedEvents.write(line)
492                         event.close()
493                 elif eventList[i] == "water":
494                         #Write two events subsequently
495                         event = open("eventSimulator/waterDryEvent.groovy", "r")                        
496                         for line in event:
497                                 extractedEvents.write(line)
498                         event.close()
499                         extractedEvents.write("\n\t\t\tbreak\n")
500                         counter = counter + 1
501                         extractedEvents.write("\t\tcase %d:\n" % counter)
502                         event = open("eventSimulator/waterWetEvent.groovy", "r")
503                         for line in event:
504                                 extractedEvents.write(line)
505                         event.close()
506                 elif eventList[i] == "water.dry":
507                         event = open("eventSimulator/waterDryEvent.groovy", "r")                        
508                         for line in event:
509                                 extractedEvents.write(line)
510                         event.close()
511                 elif eventList[i] == "water.wet":
512                         event = open("eventSimulator/waterWetEvent.groovy", "r")
513                         for line in event:
514                                 extractedEvents.write(line)
515                         event.close()
516                 elif eventList[i] == "presence":
517                         #Check which capability
518                         variable = eventVarMap[eventList[i]]
519                         if eventList[i] not in eventVarCounterMap.keys():
520                                 eventVarCounterMap[eventList[i]] = 1
521                                 eventVarCount = 0
522                         else:
523                                 eventVarCount = eventVarCounterMap[eventList[i]]
524                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
525                         capability = capabilityMap[variable[eventVarCount]]
526                         #Write two events subsequently
527                         if capability == "capability.presenceSensor":
528                                 event = open("eventSimulator/presencePresentEvent.groovy", "r")
529                         elif capability == "capability.beacon":
530                                 event = open("eventSimulator/beaconPresentEvent.groovy", "r")
531                         for line in event:
532                                 extractedEvents.write(line)
533                         event.close()
534                         extractedEvents.write("\n\t\t\tbreak\n")
535                         counter = counter + 1
536                         extractedEvents.write("\t\tcase %d:\n" % counter)
537                         if capability == "capability.presenceSensor":
538                                 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
539                         elif capability == "capability.beacon":
540                                 event = open("eventSimulator/beaconLeftEvent.groovy", "r")
541                         for line in event:
542                                 extractedEvents.write(line)
543                         event.close()
544                 elif eventList[i] == "presence.present":
545                         event = open("eventSimulator/presencePresentEvent.groovy", "r")
546                         for line in event:
547                                 extractedEvents.write(line)
548                         event.close()
549                 elif eventList[i] == "presence.not present" or eventList[i] == "presence.not":
550                         event = open("eventSimulator/presenceLeftEvent.groovy", "r")
551                         for line in event:
552                                 extractedEvents.write(line)
553                         event.close()                   
554                 elif eventList[i] == "doorState":
555                         #Write two events subsequently
556                         event = open("eventSimulator/doorOpenEvent.groovy", "r")                        
557                         for line in event:
558                                 extractedEvents.write(line)
559                         event.close()
560                         extractedEvents.write("\n\t\t\tbreak\n")
561                         counter = counter + 1
562                         extractedEvents.write("\t\tcase %d:\n" % counter)
563                         event = open("eventSimulator/doorClosedEvent.groovy", "r")
564                         for line in event:
565                                 extractedEvents.write(line)
566                         event.close()
567                 elif eventList[i] == "doorState.open":
568                         event = open("eventSimulator/doorOpenEvent.groovy", "r")
569                         for line in event:
570                                 extractedEvents.write(line)
571                         event.close()
572                 elif eventList[i] == "doorState.closed":
573                         event = open("eventSimulator/doorClosedEvent.groovy", "r")
574                         for line in event:
575                                 extractedEvents.write(line)
576                         event.close()
577                 elif eventList[i] == "motion":
578                         #Write two events subsequently
579                         event = open("eventSimulator/motionActiveEvent.groovy", "r")
580                         for line in event:
581                                 extractedEvents.write(line)
582                         event.close()
583                         extractedEvents.write("\n\t\t\tbreak\n")
584                         counter = counter + 1
585                         extractedEvents.write("\t\tcase %d:\n" % counter)
586                         event = open("eventSimulator/motionInactiveEvent.groovy", "r")
587                         for line in event:
588                                 extractedEvents.write(line)
589                         event.close()
590                 elif eventList[i] == "motion.active":
591                         event = open("eventSimulator/motionActiveEvent.groovy", "r")
592                         for line in event:
593                                 extractedEvents.write(line)
594                         event.close()
595                 elif eventList[i] == "motion.inactive":
596                         event = open("eventSimulator/motionInactiveEvent.groovy", "r")
597                         for line in event:
598                                 extractedEvents.write(line)
599                         event.close()
600                 elif eventList[i] == "smoke":
601                         #Write three events subsequently
602                         event = open("eventSimulator/smokeClearEvent.groovy", "r")                      
603                         for line in event:
604                                 extractedEvents.write(line)
605                         event.close()
606                         extractedEvents.write("\n\t\t\tbreak\n")
607                         counter = counter + 1
608                         extractedEvents.write("\t\tcase %d:\n" % counter)
609                         event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
610                         for line in event:
611                                 extractedEvents.write(line)
612                         event.close()
613                         extractedEvents.write("\n\t\t\tbreak\n")
614                         counter = counter + 1
615                         extractedEvents.write("\t\tcase %d:\n" % counter)
616                         event = open("eventSimulator/smokeTestedEvent.groovy", "r")
617                         for line in event:
618                                 extractedEvents.write(line)
619                         event.close()
620                 elif eventList[i] == "smoke.clear":
621                         event = open("eventSimulator/smokeClearEvent.groovy", "r")                      
622                         for line in event:
623                                 extractedEvents.write(line)
624                         event.close()
625                 elif eventList[i] == "smoke.detected":
626                         event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
627                         for line in event:
628                                 extractedEvents.write(line)
629                         event.close()
630                 elif eventList[i] == "smoke.tested":
631                         event = open("eventSimulator/smokeTestedEvent.groovy", "r")
632                         for line in event:
633                                 extractedEvents.write(line)
634                         event.close()
635                 elif eventList[i] == "carbonMonoxide":
636                         #Check which capability
637                         variable = eventVarMap[eventList[i]]
638                         if eventList[i] not in eventVarCounterMap.keys():
639                                 eventVarCounterMap[eventList[i]] = 1
640                                 eventVarCount = 0
641                         else:
642                                 eventVarCount = eventVarCounterMap[eventList[i]]
643                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
644                         capability = capabilityMap[variable[eventVarCount]]
645                         #Write three events subsequently        
646                         if capability == "capability.smokeDetector":
647                                 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
648                         elif capability == "capability.carbonMonoxideDetector":
649                                 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
650                         for line in event:
651                                 extractedEvents.write(line)
652                         event.close()
653                         extractedEvents.write("\n\t\t\tbreak\n")
654                         counter = counter + 1
655                         extractedEvents.write("\t\tcase %d:\n" % counter)
656                         if capability == "capability.smokeDetector":
657                                 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
658                         elif capability == "capability.carbonMonoxideDetector":
659                                 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
660                         for line in event:
661                                 extractedEvents.write(line)
662                         event.close()
663                         extractedEvents.write("\n\t\t\tbreak\n")
664                         counter = counter + 1
665                         extractedEvents.write("\t\tcase %d:\n" % counter)
666                         if capability == "capability.smokeDetector":
667                                 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
668                         elif capability == "capability.carbonMonoxideDetector":
669                                 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
670                         for line in event:
671                                 extractedEvents.write(line)
672                         event.close()
673                 elif eventList[i] == "carbonMonoxide.clear":
674                         #Check which capability
675                         variable = eventVarMap[eventList[i]]
676                         if eventList[i] not in eventVarCounterMap.keys():
677                                 eventVarCounterMap[eventList[i]] = 1
678                                 eventVarCount = 0
679                         else:
680                                 eventVarCount = eventVarCounterMap[eventList[i]]
681                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
682                         capability = capabilityMap[variable[eventVarCount]]
683                         #Write three events subsequently        
684                         if capability == "capability.smokeDetector":
685                                 event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r")
686                         elif capability == "capability.carbonMonoxideDetector":
687                                 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
688                         for line in event:
689                                 extractedEvents.write(line)
690                         event.close()
691                 elif eventList[i] == "carbonMonoxide.detected":
692                         #Check which capability
693                         variable = eventVarMap[eventList[i]]
694                         if eventList[i] not in eventVarCounterMap.keys():
695                                 eventVarCounterMap[eventList[i]] = 1
696                                 eventVarCount = 0
697                         else:
698                                 eventVarCount = eventVarCounterMap[eventList[i]]
699                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
700                         capability = capabilityMap[variable[eventVarCount]]
701                         #Write three events subsequently        
702                         if capability == "capability.smokeDetector":
703                                 event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r")
704                         elif capability == "capability.carbonMonoxideDetector":
705                                 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
706                         for line in event:
707                                 extractedEvents.write(line)
708                         event.close()
709                 elif eventList[i] == "carbonMonoxide.tested":
710                         #Check which capability
711                         variable = eventVarMap[eventList[i]]
712                         if eventList[i] not in eventVarCounterMap.keys():
713                                 eventVarCounterMap[eventList[i]] = 1
714                                 eventVarCount = 0
715                         else:
716                                 eventVarCount = eventVarCounterMap[eventList[i]]
717                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
718                         capability = capabilityMap[variable[eventVarCount]]
719                         #Write three events subsequently        
720                         if capability == "capability.smokeDetector":
721                                 event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r")
722                         elif capability == "capability.carbonMonoxideDetector":
723                                 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
724                         for line in event:
725                                 extractedEvents.write(line)
726                         event.close()
727                 elif eventList[i] == "battery":
728                         #Check which capability
729                         variable = eventVarMap[eventList[i]]
730                         if eventList[i] not in eventVarCounterMap.keys():
731                                 eventVarCounterMap[eventList[i]] = 1
732                                 eventVarCount = 0
733                         else:
734                                 eventVarCount = eventVarCounterMap[eventList[i]]
735                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
736                         capability = capabilityMap[variable[eventVarCount]]
737                         if capability == "capability.smokeDetector":
738                                 event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
739                         elif capability == "capability.battery":
740                                 event = open("eventSimulator/batteryBatteryEvent.groovy", "r")
741                         for line in event:
742                                 extractedEvents.write(line)
743                         event.close()
744                 elif eventList[i] == "thermostatMode":
745                         #Write five events subsequently
746                         event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")                      
747                         for line in event:
748                                 extractedEvents.write(line)
749                         event.close()
750                         extractedEvents.write("\n\t\t\tbreak\n")
751                         counter = counter + 1
752                         extractedEvents.write("\t\tcase %d:\n" % counter)
753                         event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
754                         for line in event:
755                                 extractedEvents.write(line)
756                         event.close()
757                         extractedEvents.write("\n\t\t\tbreak\n")
758                         counter = counter + 1
759                         extractedEvents.write("\t\tcase %d:\n" % counter)
760                         event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
761                         for line in event:
762                                 extractedEvents.write(line)
763                         event.close()
764                         extractedEvents.write("\n\t\t\tbreak\n")
765                         counter = counter + 1
766                         extractedEvents.write("\t\tcase %d:\n" % counter)
767                         event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
768                         for line in event:
769                                 extractedEvents.write(line)
770                         event.close()
771                         extractedEvents.write("\n\t\t\tbreak\n")
772                         counter = counter + 1
773                         extractedEvents.write("\t\tcase %d:\n" % counter)
774                         event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
775                         for line in event:
776                                 extractedEvents.write(line)
777                         event.close()
778                 elif eventList[i] == "thermostatMode.cool":
779                         event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
780                         for line in event:
781                                 extractedEvents.write(line)
782                         event.close()
783                 elif eventList[i] == "thermostatMode.auto":
784                         event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")                      
785                         for line in event:
786                                 extractedEvents.write(line)
787                         event.close()
788                 elif eventList[i] == "thermostatMode.emergencyHeat":
789                         event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
790                         for line in event:
791                                 extractedEvents.write(line)
792                         event.close()
793                 elif eventList[i] == "thermostatMode.heat":
794                         event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
795                         for line in event:
796                                 extractedEvents.write(line)
797                         event.close()
798                 elif eventList[i] == "thermostatMode.off":
799                         event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
800                         for line in event:
801                                 extractedEvents.write(line)
802                         event.close()
803                 elif eventList[i] == "thermostatFanMode" or eventList[i] == "fanMode":
804                         #Write five events subsequently
805                         event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")                   
806                         for line in event:
807                                 extractedEvents.write(line)
808                         event.close()
809                         extractedEvents.write("\n\t\t\tbreak\n")
810                         counter = counter + 1
811                         extractedEvents.write("\t\tcase %d:\n" % counter)
812                         event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
813                         for line in event:
814                                 extractedEvents.write(line)
815                         event.close()
816                         extractedEvents.write("\n\t\t\tbreak\n")
817                         counter = counter + 1
818                         extractedEvents.write("\t\tcase %d:\n" % counter)
819                         event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
820                         for line in event:
821                                 extractedEvents.write(line)
822                         event.close()
823                         extractedEvents.write("\n\t\t\tbreak\n")
824                         counter = counter + 1
825                         extractedEvents.write("\t\tcase %d:\n" % counter)
826                         event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
827                         for line in event:
828                                 extractedEvents.write(line)
829                         event.close()
830                         extractedEvents.write("\n\t\t\tbreak\n")
831                         counter = counter + 1
832                         extractedEvents.write("\t\tcase %d:\n" % counter)
833                         event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
834                         for line in event:
835                                 extractedEvents.write(line)
836                         event.close()
837                 elif eventList[i] == "thermostatFanMode.auto" or eventList[i] == "fanMode.auto":
838                         event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r")                   
839                         for line in event:
840                                 extractedEvents.write(line)
841                         event.close()
842                 elif eventList[i] == "thermostatFanMode.fanCirculate" or eventList[i] == "fanMode.fanCirculate":
843                         event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r")
844                         for line in event:
845                                 extractedEvents.write(line)
846                         event.close()
847                 elif eventList[i] == "thermostatFanMode.circulate" or eventList[i] == "fanMode.circulate":
848                         event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r")
849                         for line in event:
850                                 extractedEvents.write(line)
851                         event.close()
852                 elif eventList[i] == "thermostatFanMode.fanOn" or eventList[i] == "fanMode.fanOn":
853                         event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r")
854                         for line in event:
855                                 extractedEvents.write(line)
856                         event.close()
857                 elif eventList[i] == "thermostatFanMode.on" or eventList[i] == "fanMode.on":
858                         event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r")
859                         for line in event:
860                                 extractedEvents.write(line)
861                         event.close()
862                 elif eventList[i] == "thermostatOperatingState":
863                         #Write five events subsequently
864                         event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r")                    
865                         for line in event:
866                                 extractedEvents.write(line)
867                         event.close()
868                         extractedEvents.write("\n\t\t\tbreak\n")
869                         counter = counter + 1
870                         extractedEvents.write("\t\tcase %d:\n" % counter)
871                         event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r")
872                         for line in event:
873                                 extractedEvents.write(line)
874                         event.close()
875                         extractedEvents.write("\n\t\t\tbreak\n")
876                         counter = counter + 1
877                         extractedEvents.write("\t\tcase %d:\n" % counter)
878                         event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r")
879                         for line in event:
880                                 extractedEvents.write(line)
881                         event.close()
882                         extractedEvents.write("\n\t\t\tbreak\n")
883                         counter = counter + 1
884                         extractedEvents.write("\t\tcase %d:\n" % counter)
885                         event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r")
886                         for line in event:
887                                 extractedEvents.write(line)
888                         event.close()
889                         extractedEvents.write("\n\t\t\tbreak\n")
890                         counter = counter + 1
891                         extractedEvents.write("\t\tcase %d:\n" % counter)
892                         event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r")
893                         for line in event:
894                                 extractedEvents.write(line)
895                         event.close()
896                 elif eventList[i] == "switch":
897                         #Check which capability
898                         variable = eventVarMap[eventList[i]]
899                         if eventList[i] not in eventVarCounterMap.keys():
900                                 eventVarCounterMap[eventList[i]] = 1
901                                 eventVarCount = 0
902                         else:
903                                 eventVarCount = eventVarCounterMap[eventList[i]]
904                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
905                         capability = capabilityMap[variable[eventVarCount]]
906                         #Write two events subsequently
907                         if capability == "capability.switch":
908                                 event = open("eventSimulator/switchOnEvent.groovy", "r")
909                         elif capability == "capability.switchLevel":
910                                 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
911                         elif capability == "capability.relaySwitch":
912                                 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
913                         elif capability == "capability.colorControl":
914                                 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
915                         elif capability == "capability.colorTemperature":
916                                 event = open("eventSimulator/colorTemperatureSwitchOnEvent.groovy", "r")
917                         for line in event:
918                                 extractedEvents.write(line)
919                         event.close()
920                         extractedEvents.write("\n\t\t\tbreak\n")
921                         counter = counter + 1
922                         extractedEvents.write("\t\tcase %d:\n" % counter)
923                         if capability == "capability.switch":
924                                 event = open("eventSimulator/switchOffEvent.groovy", "r")
925                         elif capability == "capability.switchLevel":
926                                 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
927                         elif capability == "capability.relaySwitch":
928                                 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
929                         elif capability == "capability.colorControl":
930                                 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
931                         elif capability == "capability.colorTemperature":
932                                 event = open("eventSimulator/colorTemperatureSwitchOffEvent.groovy", "r")
933                         for line in event:
934                                 extractedEvents.write(line)
935                         event.close()
936                 elif eventList[i] == "switch.on":
937                         #Check which capability
938                         variable = eventVarMap[eventList[i]]
939                         if eventList[i] not in eventVarCounterMap.keys():
940                                 eventVarCounterMap[eventList[i]] = 1
941                                 eventVarCount = 0
942                         else:
943                                 eventVarCount = eventVarCounterMap[eventList[i]]
944                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
945                         capability = capabilityMap[variable[eventVarCount]]
946                         if capability == "capability.switch":
947                                 event = open("eventSimulator/switchOnEvent.groovy", "r")
948                         elif capability == "capability.switchLevel":
949                                 event = open("eventSimulator/switchLevelOnEvent.groovy", "r")
950                         elif capability == "capability.relaySwitch":
951                                 event = open("eventSimulator/relaySwitchOnEvent.groovy", "r")
952                         elif capability == "capability.colorControl":
953                                 event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r")
954                         elif capability == "capability.colorTemperature":
955                                 event = open("eventSimulator/colorTemperatureSwitchOnEvent.groovy", "r")
956                         for line in event:
957                                 extractedEvents.write(line)
958                         event.close()
959                 elif eventList[i] == "switch.off":
960                         #Check which capability
961                         variable = eventVarMap[eventList[i]]
962                         if eventList[i] not in eventVarCounterMap.keys():
963                                 eventVarCounterMap[eventList[i]] = 1
964                                 eventVarCount = 0
965                         else:
966                                 eventVarCount = eventVarCounterMap[eventList[i]]
967                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
968                         capability = capabilityMap[variable[eventVarCount]]
969                         if capability == "capability.switch":
970                                 event = open("eventSimulator/switchOffEvent.groovy", "r")
971                         elif capability == "capability.switchLevel":
972                                 event = open("eventSimulator/switchLevelOffEvent.groovy", "r")
973                         elif capability == "capability.relaySwitch":
974                                 event = open("eventSimulator/relaySwitchOffEvent.groovy", "r")
975                         elif capability == "capability.colorControl":
976                                 event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r")
977                         elif capability == "capability.colorTemperature":
978                                 event = open("eventSimulator/colorTemperatureSwitchOffEvent.groovy", "r")
979                         for line in event:
980                                 extractedEvents.write(line)
981                         event.close()
982                 elif eventList[i] == "location" or eventList[i] == "position" or eventList[i] == "mode": #Case for Location event
983                         #Write three events subsequently
984                         event = open("eventSimulator/locationHomeEvent.groovy", "r")                    
985                         for line in event:
986                                 extractedEvents.write(line)
987                         event.close()
988                         extractedEvents.write("\n\t\t\tbreak\n")
989                         counter = counter + 1
990                         extractedEvents.write("\t\tcase %d:\n" % counter)
991                         event = open("eventSimulator/locationAwayEvent.groovy", "r")
992                         for line in event:
993                                 extractedEvents.write(line)
994                         event.close()
995                         extractedEvents.write("\n\t\t\tbreak\n")
996                         counter = counter + 1
997                         extractedEvents.write("\t\tcase %d:\n" % counter)
998                         event = open("eventSimulator/locationNightEvent.groovy", "r")
999                         for line in event:
1000                                 extractedEvents.write(line)
1001                         event.close()
1002                 elif eventList[i] == "mode.home":
1003                         event = open("eventSimulator/locationHomeEvent.groovy", "r")                    
1004                         for line in event:
1005                                 extractedEvents.write(line)
1006                         event.close()
1007                 elif eventList[i] == "mode.away":
1008                         event = open("eventSimulator/locationAwayEvent.groovy", "r")
1009                         for line in event:
1010                                 extractedEvents.write(line)
1011                         event.close()
1012                 elif eventList[i] == "mode.night":
1013                         event = open("eventSimulator/locationNightEvent.groovy", "r")
1014                         for line in event:
1015                                 extractedEvents.write(line)
1016                         event.close()
1017                 elif eventList[i] == "sunrise":
1018                         event = open("eventSimulator/locationSunriseEvent.groovy", "r")
1019                         for line in event:
1020                                 extractedEvents.write(line)
1021                         event.close()
1022                 elif eventList[i] == "sunset":
1023                         event = open("eventSimulator/locationSunsetEvent.groovy", "r")
1024                         for line in event:
1025                                 extractedEvents.write(line)
1026                         event.close()
1027                 elif eventList[i] == "sunsetTime":
1028                         event = open("eventSimulator/locationSunsetTimeEvent.groovy", "r")
1029                         for line in event:
1030                                 extractedEvents.write(line)
1031                         event.close()
1032                 elif eventList[i] == "sunriseTime":
1033                         event = open("eventSimulator/locationSunriseTimeEvent.groovy", "r")
1034                         for line in event:
1035                                 extractedEvents.write(line)
1036                         event.close()
1037                 elif eventList[i] == "acceleration":
1038                         #Write two events subsequently
1039                         event = open("eventSimulator/accelerationActiveEvent.groovy", "r")                      
1040                         for line in event:
1041                                 extractedEvents.write(line)
1042                         event.close()
1043                         extractedEvents.write("\n\t\t\tbreak\n")
1044                         counter = counter + 1
1045                         extractedEvents.write("\t\tcase %d:\n" % counter)
1046                         event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
1047                         for line in event:
1048                                 extractedEvents.write(line)
1049                         event.close()
1050                 elif eventList[i] == "acceleration.active":
1051                         event = open("eventSimulator/accelerationActiveEvent.groovy", "r")                      
1052                         for line in event:
1053                                 extractedEvents.write(line)
1054                         event.close()
1055                 elif eventList[i] == "acceleration.inactive":
1056                         event = open("eventSimulator/accelerationInactiveEvent.groovy", "r")
1057                         for line in event:
1058                                 extractedEvents.write(line)
1059                         event.close()
1060                 elif eventList[i] == "sleeping":
1061                         #Write two events subsequently
1062                         event = open("eventSimulator/sleepSleepingEvent.groovy", "r")                   
1063                         for line in event:
1064                                 extractedEvents.write(line)
1065                         event.close()
1066                         extractedEvents.write("\n\t\t\tbreak\n")
1067                         counter = counter + 1
1068                         extractedEvents.write("\t\tcase %d:\n" % counter)
1069                         event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
1070                         for line in event:
1071                                 extractedEvents.write(line)
1072                         event.close()
1073                 elif eventList[i] == "sleeping.sleeping":
1074                         event = open("eventSimulator/sleepSleepingEvent.groovy", "r")                   
1075                         for line in event:
1076                                 extractedEvents.write(line)
1077                         event.close()
1078                 elif eventList[i] == "sleeping.not sleeping":
1079                         event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r")
1080                         for line in event:
1081                                 extractedEvents.write(line)
1082                         event.close()
1083                 elif eventList[i] == "goal":
1084                         #Write two events subsequently
1085                         event = open("eventSimulator/stepGoalHighEvent.groovy", "r")
1086                         for line in event:
1087                                 extractedEvents.write(line)
1088                         event.close()
1089                         extractedEvents.write("\n\t\t\tbreak\n")
1090                         counter = counter + 1
1091                         extractedEvents.write("\t\tcase %d:\n" % counter)
1092                         event = open("eventSimulator/stepGoalLowEvent.groovy", "r")
1093                         for line in event:
1094                                 extractedEvents.write(line)
1095                         event.close()
1096                 elif eventList[i] == "steps":
1097                         #Write two events subsequently
1098                         event = open("eventSimulator/stepStepsHighEvent.groovy", "r")
1099                         for line in event:
1100                                 extractedEvents.write(line)
1101                         event.close()
1102                         extractedEvents.write("\n\t\t\tbreak\n")
1103                         counter = counter + 1
1104                         extractedEvents.write("\t\tcase %d:\n" % counter)
1105                         event = open("eventSimulator/stepStepsLowEvent.groovy", "r")
1106                         for line in event:
1107                                 extractedEvents.write(line)
1108                         event.close()
1109                 elif eventList[i] == "color":
1110                         event = open("eventSimulator/colorChangeEvent.groovy", "r")
1111                         for line in event:
1112                                 extractedEvents.write(line)
1113                         event.close()
1114                 elif eventList[i] == "colorTemperature":
1115                         event = open("eventSimulator/colorTemperatureEvent.groovy", "r")
1116                         for line in event:
1117                                 extractedEvents.write(line)
1118                         event.close()
1119                 elif eventList[i] == "hue":
1120                         event = open("eventSimulator/hueChangeEvent.groovy", "r")
1121                         for line in event:
1122                                 extractedEvents.write(line)
1123                         event.close()
1124                 elif eventList[i] == "saturation":
1125                         event = open("eventSimulator/saturationChangeEvent.groovy", "r")
1126                         for line in event:
1127                                 extractedEvents.write(line)
1128                         event.close()
1129                 elif eventList[i] == "energy":
1130                         event = open("eventSimulator/energyMeterEvent.groovy", "r")
1131                         for line in event:
1132                                 extractedEvents.write(line)
1133                         event.close()
1134                 elif eventList[i] == "power":
1135                         #Write two events subsequently
1136                         event = open("eventSimulator/powerMeterHighPowerEvent.groovy", "r")
1137                         for line in event:
1138                                 extractedEvents.write(line)
1139                         event.close()
1140                         extractedEvents.write("\n\t\t\tbreak\n")
1141                         counter = counter + 1
1142                         extractedEvents.write("\t\tcase %d:\n" % counter)
1143                         event = open("eventSimulator/powerMeterLowPowerEvent.groovy", "r")
1144                         for line in event:
1145                                 extractedEvents.write(line)
1146                         event.close()
1147                 elif eventList[i] == "illuminance":
1148                         event = open("eventSimulator/illuminanceMeasurementLowEvent.groovy", "r")
1149                         for line in event:
1150                                 extractedEvents.write(line)
1151                         event.close()
1152                         extractedEvents.write("\n\t\t\tbreak\n")
1153                         counter = counter + 1
1154                         extractedEvents.write("\t\tcase %d:\n" % counter)
1155                         event = open("eventSimulator/illuminanceMeasurementHighEvent.groovy", "r")
1156                         for line in event:
1157                                 extractedEvents.write(line)
1158                         event.close()
1159                 elif eventList[i] == "humidity":
1160                         event = open("eventSimulator/humidityHighMeasurementEvent.groovy", "r")
1161                         for line in event:
1162                                 extractedEvents.write(line)
1163                         event.close()
1164                         extractedEvents.write("\n\t\t\tbreak\n")
1165                         counter = counter + 1
1166                         extractedEvents.write("\t\tcase %d:\n" % counter)
1167                         event = open("eventSimulator/humidityLowMeasurementEvent.groovy", "r")
1168                         for line in event:
1169                                 extractedEvents.write(line)
1170                         event.close()
1171                 elif eventList[i] == "alarm":
1172                         #Write four events subsequently
1173                         event = open("eventSimulator/alarmBothEvent.groovy", "r")                       
1174                         for line in event:
1175                                 extractedEvents.write(line)
1176                         event.close()
1177                         extractedEvents.write("\n\t\t\tbreak\n")
1178                         counter = counter + 1
1179                         extractedEvents.write("\t\tcase %d:\n" % counter)
1180                         event = open("eventSimulator/alarmSirenEvent.groovy", "r")
1181                         for line in event:
1182                                 extractedEvents.write(line)
1183                         event.close()
1184                         extractedEvents.write("\n\t\t\tbreak\n")
1185                         counter = counter + 1
1186                         extractedEvents.write("\t\tcase %d:\n" % counter)
1187                         event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
1188                         for line in event:
1189                                 extractedEvents.write(line)
1190                         event.close()
1191                         extractedEvents.write("\n\t\t\tbreak\n")
1192                         counter = counter + 1
1193                         extractedEvents.write("\t\tcase %d:\n" % counter)
1194                         event = open("eventSimulator/alarmOffEvent.groovy", "r")
1195                         for line in event:
1196                                 extractedEvents.write(line)
1197                         event.close()
1198                 elif eventList[i] == "alarm.both":
1199                         event = open("eventSimulator/alarmBothEvent.groovy", "r")                       
1200                         for line in event:
1201                                 extractedEvents.write(line)
1202                         event.close()
1203                 elif eventList[i] == "alarm.siren":
1204                         event = open("eventSimulator/alarmSirenEvent.groovy", "r")
1205                         for line in event:
1206                                 extractedEvents.write(line)
1207                         event.close()
1208                 elif eventList[i] == "alarm.strobe":
1209                         event = open("eventSimulator/alarmStrobeEvent.groovy", "r")
1210                         for line in event:
1211                                 extractedEvents.write(line)
1212                         event.close()
1213                 elif eventList[i] == "alarm.off":
1214                         event = open("eventSimulator/alarmOffEvent.groovy", "r")
1215                         for line in event:
1216                                 extractedEvents.write(line)
1217                         event.close()
1218                 elif eventList[i] == "contact" or eventList[i] == "tamper.tampered":
1219                         #Check which capability
1220                         variable = eventVarMap[eventList[i]]
1221                         if eventList[i] not in eventVarCounterMap.keys():
1222                                 eventVarCounterMap[eventList[i]] = 1
1223                                 eventVarCount = 0
1224                         else:
1225                                 eventVarCount = eventVarCounterMap[eventList[i]]
1226                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
1227                         capability = capabilityMap[variable[eventVarCount]]
1228                         #Write two events subsequently
1229                         if capability == "capability.contactSensor":
1230                                 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
1231                         elif capability == "capability.valve":
1232                                 event = open("eventSimulator/valveClosedEvent.groovy", "r")
1233                         for line in event:
1234                                 extractedEvents.write(line)
1235                         event.close()
1236                         extractedEvents.write("\n\t\t\tbreak\n")
1237                         counter = counter + 1
1238                         extractedEvents.write("\t\tcase %d:\n" % counter)
1239                         if capability == "capability.contactSensor":
1240                                 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
1241                         elif capability == "capability.valve":
1242                                 event = open("eventSimulator/valveOpenEvent.groovy", "r")
1243                         for line in event:
1244                                 extractedEvents.write(line)
1245                         event.close()
1246                 elif eventList[i] == "contact.closed":
1247                         #Check which capability
1248                         variable = eventVarMap[eventList[i]]
1249                         if eventList[i] not in eventVarCounterMap.keys():
1250                                 eventVarCounterMap[eventList[i]] = 1
1251                                 eventVarCount = 0
1252                         else:
1253                                 eventVarCount = eventVarCounterMap[eventList[i]]
1254                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
1255                         capability = capabilityMap[variable[eventVarCount]]
1256                         if capability == "capability.contactSensor":
1257                                 event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r")
1258                         elif capability == "capability.valve":
1259                                 event = open("eventSimulator/valveClosedEvent.groovy", "r")
1260                         for line in event:
1261                                 extractedEvents.write(line)
1262                         event.close()
1263                 elif eventList[i] == "contact.open":
1264                         variable = eventVarMap[eventList[i]]
1265                         if eventList[i] not in eventVarCounterMap.keys():
1266                                 eventVarCounterMap[eventList[i]] = 1
1267                                 eventVarCount = 0
1268                         else:
1269                                 eventVarCount = eventVarCounterMap[eventList[i]]
1270                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
1271                         capability = capabilityMap[variable[eventVarCount]]
1272                         if capability == "capability.contactSensor":
1273                                 event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r")
1274                         elif capability == "capability.valve":
1275                                 event = open("eventSimulator/valveOpenEvent.groovy", "r")
1276                         for line in event:
1277                                 extractedEvents.write(line)
1278                         event.close()
1279                 elif eventList[i] == "status":
1280                         #Write three events subsequently
1281                         event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")                      
1282                         for line in event:
1283                                 extractedEvents.write(line)
1284                         event.close()
1285                         extractedEvents.write("\n\t\t\tbreak\n")
1286                         counter = counter + 1
1287                         extractedEvents.write("\t\tcase %d:\n" % counter)
1288                         event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
1289                         for line in event:
1290                                 extractedEvents.write(line)
1291                         event.close()
1292                         extractedEvents.write("\n\t\t\tbreak\n")
1293                         counter = counter + 1
1294                         extractedEvents.write("\t\tcase %d:\n" % counter)
1295                         event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
1296                         for line in event:
1297                                 extractedEvents.write(line)
1298                         event.close()
1299                 elif eventList[i] == "status.playing":
1300                         event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r")                      
1301                         for line in event:
1302                                 extractedEvents.write(line)
1303                         event.close()
1304                 elif eventList[i] == "status.stopped":
1305                         event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r")
1306                         for line in event:
1307                                 extractedEvents.write(line)
1308                         event.close()
1309                 elif eventList[i] == "status.paused":
1310                         event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r")
1311                         for line in event:
1312                                 extractedEvents.write(line)
1313                         event.close()
1314                 elif eventList[i] == "level":
1315                         #Check which capability
1316                         variable = eventVarMap[eventList[i]]
1317                         if eventList[i] not in eventVarCounterMap.keys():
1318                                 eventVarCounterMap[eventList[i]] = 1
1319                                 eventVarCount = 0
1320                         else:
1321                                 eventVarCount = eventVarCounterMap[eventList[i]]
1322                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
1323                         capability = capabilityMap[variable[eventVarCount]]
1324                         if capability == "capability.musicPlayer":
1325                                 event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
1326                         elif capability == "capability.switchLevel":
1327                                 event = open("eventSimulator/switchLevelEvent.groovy", "r")
1328                         elif capability == "capability.colorControl":
1329                                 event = open("eventSimulator/colorLevelChangeEvent.groovy", "r")
1330                         elif capability == "capability.switch":
1331                                 event = open("eventSimulator/switchLevelChangeEvent.groovy", "r")
1332                         for line in event:
1333                                 extractedEvents.write(line)
1334                         event.close()
1335                 elif eventList[i] == "trackDescription":
1336                         event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r")
1337                         for line in event:
1338                                 extractedEvents.write(line)
1339                         event.close()
1340                 elif eventList[i] == "trackData":
1341                         event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r")
1342                         for line in event:
1343                                 extractedEvents.write(line)
1344                         event.close()
1345                 elif eventList[i] == "mute":
1346                         #Write two events subsequently
1347                         event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")                      
1348                         for line in event:
1349                                 extractedEvents.write(line)
1350                         event.close()
1351                         extractedEvents.write("\n\t\t\tbreak\n")
1352                         counter = counter + 1
1353                         extractedEvents.write("\t\tcase %d:\n" % counter)
1354                         event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
1355                         for line in event:
1356                                 extractedEvents.write(line)
1357                         event.close()
1358                 elif eventList[i] == "mute.muted":
1359                         event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r")                      
1360                         for line in event:
1361                                 extractedEvents.write(line)
1362                         event.close()
1363                 elif eventList[i] == "mute.unmuted":
1364                         event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r")
1365                         for line in event:
1366                                 extractedEvents.write(line)
1367                         event.close()
1368                 elif eventList[i] == "temperature":
1369                         #Check which capability
1370                         variable = eventVarMap[eventList[i]]
1371                         if eventList[i] not in eventVarCounterMap.keys():
1372                                 eventVarCounterMap[eventList[i]] = 1
1373                                 eventVarCount = 0
1374                         else:
1375                                 eventVarCount = eventVarCounterMap[eventList[i]]
1376                                 eventVarCounterMap[eventList[i]] = eventVarCount + 1
1377                         capability = capabilityMap[variable[eventVarCount]]
1378                         #Write two events subsequently
1379                         if capability == "capability.thermostat":
1380                                 event = open("eventSimulator/temperatureHighEvent.groovy", "r")
1381                         elif capability == "capability.temperatureMeasurement":
1382                                 event = open("eventSimulator/temperatureHighMeasurementEvent.groovy", "r")
1383                         for line in event:
1384                                 extractedEvents.write(line)
1385                         event.close()
1386                         extractedEvents.write("\n\t\t\tbreak\n")
1387                         counter = counter + 1
1388                         extractedEvents.write("\t\tcase %d:\n" % counter)
1389                         if capability == "capability.thermostat":
1390                                 event = open("eventSimulator/temperatureLowEvent.groovy", "r")
1391                         elif capability == "capability.temperatureMeasurement":
1392                                 event = open("eventSimulator/temperatureLowMeasurementEvent.groovy", "r")
1393                         for line in event:
1394                                 extractedEvents.write(line)
1395                         event.close()
1396                 elif eventList[i] == "heatingSetpoint":
1397                         event = open("eventSimulator/heatingSetpointEvent.groovy", "r")
1398                         for line in event:
1399                                 extractedEvents.write(line)
1400                         event.close()
1401                 elif eventList[i] == "coolingSetpoint":
1402                         event = open("eventSimulator/coolingSetpointEvent.groovy", "r")
1403                         for line in event:
1404                                 extractedEvents.write(line)
1405                         event.close()
1406                 elif eventList[i] == "thermostatSetpoint":
1407                         event = open("eventSimulator/thermostatSetpointEvent.groovy", "r")
1408                         for line in event:
1409                                 extractedEvents.write(line)
1410                         event.close()
1411                 elif eventList[i] == "threeAxis":
1412                         event = open("eventSimulator/threeAxisChangeEvent.groovy", "r")
1413                         for line in event:
1414                                 extractedEvents.write(line)
1415                         event.close()
1416                 elif eventList[i] == "carbonDioxide":
1417                         event = open("eventSimulator/carbonDioxideEvent.groovy", "r")
1418                         for line in event:
1419                                 extractedEvents.write(line)
1420                         event.close()
1421                 elif eventList[i] == "consumableStatus":
1422                         event = open("eventSimulator/consumableStatusEvent.groovy", "r")
1423                         for line in event:
1424                                 extractedEvents.write(line)
1425                         event.close()
1426                 elif eventList[i] == "pH":
1427                         event = open("eventSimulator/pHEvent.groovy", "r")
1428                         for line in event:
1429                                 extractedEvents.write(line)
1430                         event.close()
1431                 elif eventList[i] == "pressure":
1432                         event = open("eventSimulator/pressureEvent.groovy", "r")
1433                         for line in event:
1434                                 extractedEvents.write(line)
1435                         event.close()
1436                 elif eventList[i] == "shock":
1437                         event = open("eventSimulator/shockEvent.groovy", "r")
1438                         for line in event:
1439                                 extractedEvents.write(line)
1440                         event.close()
1441                 elif eventList[i] == "lqi":
1442                         event = open("eventSimulator/lqiEvent.groovy", "r")
1443                         for line in event:
1444                                 extractedEvents.write(line)
1445                         event.close()
1446                 elif eventList[i] == "rssi":
1447                         event = open("eventSimulator/rssiEvent.groovy", "r")
1448                         for line in event:
1449                                 extractedEvents.write(line)
1450                         event.close()
1451                 elif eventList[i] == "sound":
1452                         event = open("eventSimulator/soundEvent.groovy", "r")
1453                         for line in event:
1454                                 extractedEvents.write(line)
1455                         event.close()
1456                 elif eventList[i] == "soundPressureLevel":
1457                         event = open("eventSimulator/soundPressureLevelEvent.groovy", "r")
1458                         for line in event:
1459                                 extractedEvents.write(line)
1460                         event.close()
1461                 elif eventList[i] == "tamper":
1462                         event = open("eventSimulator/tamperEvent.groovy", "r")
1463                         for line in event:
1464                                 extractedEvents.write(line)
1465                         event.close()
1466                 elif eventList[i] == "voltage":
1467                         event = open("eventSimulator/voltageEvent.groovy", "r")
1468                         for line in event:
1469                                 extractedEvents.write(line)
1470                         event.close()
1471                 elif eventList[i] == "ultravioletIndex":
1472                         event = open("eventSimulator/ultravioletIndexEvent.groovy", "r")
1473                         for line in event:
1474                                 extractedEvents.write(line)
1475                         event.close()
1476                 elif eventList[i] == "windowShade":
1477                         event = open("eventSimulator/windowShadeEvent.groovy", "r")
1478                         for line in event:
1479                                 extractedEvents.write(line)
1480                         event.close()
1481                         
1482                 ###TODO: Add more events later
1483                 extractedEvents.write("\n\t\t\tbreak\n")
1484                 counter = counter + 1
1485         extractedEvents.write("\t}\n")
1486         extractedEvents.write("\tprintln(\"\\nEVENT NUMBER: \" + eventNumber)\n");
1487         extractedEvents.write("}\n")
1488         
1489 def CheckIfOnlyTouchEvents():
1490         #Check and throw an error if it is all touch events
1491         #This is called Direct-Direct interaction and we do not model-check for this case
1492         # TODO: Commenting out this code since we do this in the analysis itself
1493         '''
1494         onlyTouchEvents = True
1495         for item in eventList:
1496                 if item != "nfcTouch" and item != "app" and item != "button":
1497                         onlyTouchEvents = False
1498         if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True:
1499                 # Write error log file
1500                 extractError = open("appCreationError.log", "w+")
1501                 extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n")
1502                 extractError.close()
1503                 raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n")
1504         '''
1505
1506 #Extract objects to call functions from App1
1507 F1 = open("Extractor/App1/App1.groovy", "r")
1508 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
1509 ExtractFunctions(F1, "App1")
1510 F1.close()
1511
1512 #Extract objects to call functions from App2
1513 F2 = open("Extractor/App2/App2.groovy", "r")
1514 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
1515 ExtractFunctions(F2, "App2")
1516 F2.close()
1517
1518 #Prepare eventSimulator file while parsing the App1 and App2 files
1519 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
1520 CheckIfOnlyTouchEvents()
1521 ExtractEvents(extractedEvents)
1522 extractedEvents.close()
1523
1524 #Save the extracted methods and app1 in a same file to extract information
1525 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1526 Extractor = open("Extractor/Extractor.groovy", "r")
1527 F1 = open("Extractor/App1/App1.groovy", "r")
1528
1529 extractorFile.write("////////////////////\n")
1530 extractorFile.write("@Field App\n")
1531 extractorFile.write("App = \"App1\"")
1532 extractorFile.write("\n")
1533 for line in Extractor:
1534         extractorFile.write(line)
1535 extractorFile.write("\n\n")
1536 for line in F1:
1537         extractorFile.write(line)
1538 extractorFile.close()
1539 Extractor.close()
1540 F1.close()
1541 #Run the file to extract the objects
1542 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
1543
1544
1545 #Save the extracted methods and app2 in a same file to extract information
1546 extractorFile = open("Extractor/extractorFile.groovy", "w+")
1547 Extractor = open("Extractor/Extractor.groovy", "r")
1548 F2 = open("Extractor/App2/App2.groovy", "r")
1549
1550 extractorFile.write("////////////////////\n")
1551 extractorFile.write("@Field App\n")
1552 extractorFile.write("App = \"App2\"")
1553 extractorFile.write("\n")
1554 for line in Extractor:
1555         extractorFile.write(line)
1556 extractorFile.write("\n\n")
1557 for line in F2:
1558         extractorFile.write(line)
1559 #Run the file to extract the objects
1560 extractorFile.close()
1561 Extractor.close()
1562 F2.close()
1563 os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")
1564
1565