11 Skip = ['\n', '\t', ' ']
12 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
38 def ExtractFunctions(F, appName):
41 while (Temp != "EOF"):
42 if (Temp == "def" or Temp == "private"):
44 if (Temp == "def" or Temp == "private"):
47 if (GetToken(F) == "("): #We have a function to create object for
48 if (appName == "App1"):
49 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
50 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
51 extractedFunctionsApp1.write("%s\n" % NameofFunc)
53 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
54 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
55 extractedFunctionsApp2.write("%s\n" % NameofFunc)
57 #Check subscribed events
58 if (Temp == "subscribe"):
60 while (counter < 5 and Temp != "\""):
64 #If counter >= 5 that means it is not found, so it must be appTouch
67 if Temp not in eventMap:
70 #Check and analyze capabilities for physical interaction
71 AnalyzeCapabilities(Temp, appName)
75 #Warn if there is a potential for physical interaction
76 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
77 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
80 def AnalyzeCapabilities(Temp, appName):
82 if (Temp == "capability.switch" or
83 Temp == "capability.switchLevel" or
84 Temp == "capability.illuminanceMeasurement" or
86 Temp == "capability.motionSensor" or
88 Temp == "capability.valve" or
89 Temp == "capability.waterSensor" or
91 Temp == "capability.musicPlayer" or
92 Temp == "capability.alarm" or
93 Temp == "capability.speechSynthesis" or
94 Temp == "capability.soundSensor"):
95 if (appName == "App1"):
96 app1Capabilities.append(Temp)
98 app2Capabilities.append(Temp)
100 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
102 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
103 "capability.switchLevel" in app2Capab):
104 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
106 if ("capability.motionSensor" in app1Capab):
107 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
109 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
110 "capability.switch" in app2Capab):
111 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
113 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
114 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
115 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
117 def ExtractEvents(extractedEvents):
119 extractedEvents.write("Random random = new Random(42)\n")
120 extractedEvents.write("counter = 1000\n")
121 extractedEvents.write("while(counter > 0) {\n")
122 extractedEvents.write("\tdef eventNumber = random.nextInt(%d)\n" % (len(eventMap) - 1))
123 extractedEvents.write("\tswitch(eventNumber) {\n")
125 for i in range(len(eventMap)):
126 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
127 if eventMap[i] == "lock":
128 event = open("eventSimulator/lockEvent.groovy", "r")
130 extractedEvents.write(line)
132 elif eventMap[i] == "unlock":
133 event = open("eventSimulator/unlockEvent.groovy", "r")
135 extractedEvents.write(line)
137 elif eventMap[i] == "contact.open":
138 event = open("eventSimulator/contactOpenEvent.groovy", "r")
140 extractedEvents.write(line)
142 elif eventMap[i] == "contact.closed":
143 event = open("eventSimulator/contactClosedEvent.groovy", "r")
145 extractedEvents.write(line)
147 elif eventMap[i] == "switch.on":
148 event = open("eventSimulator/switchOnEvent.groovy", "r")
150 extractedEvents.write(line)
152 elif eventMap[i] == "switch.off":
153 event = open("eventSimulator/switchOffEvent.groovy", "r")
155 extractedEvents.write(line)
157 elif eventMap[i] == "nfcTouch":
158 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
160 extractedEvents.write(line)
162 elif eventMap[i] == "Touched":
163 event = open("eventSimulator/appTouchEvent.groovy", "r")
165 extractedEvents.write(line)
167 elif eventMap[i] == "button":
168 #Write two events subsequently
169 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
171 extractedEvents.write(line)
173 extractedEvents.write("\t\t\tbreak\n")
174 eventCounter = eventCounter + 1
175 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
176 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
178 extractedEvents.write(line)
180 elif eventMap[i] == "presence":
181 #Write two events subsequently
182 event = open("eventSimulator/presencePresentEvent.groovy", "r")
184 extractedEvents.write(line)
186 extractedEvents.write("\t\t\tbreak\n")
187 eventCounter = eventCounter + 1
188 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
189 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
191 extractedEvents.write(line)
193 elif eventMap[i] == "doorState":
194 #Write two events subsequently
195 event = open("eventSimulator/doorOpenEvent.groovy", "r")
197 extractedEvents.write(line)
199 extractedEvents.write("\t\t\tbreak\n")
200 eventCounter = eventCounter + 1
201 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
202 event = open("eventSimulator/doorClosedEvent.groovy", "r")
204 extractedEvents.write(line)
206 eventCounter = eventCounter + 1
208 ###TODO: Add more events later
209 extractedEvents.write("\n\t\t\tbreak\n")
210 extractedEvents.write("\t}\n")
211 extractedEvents.write("\tcounter--\n")
212 extractedEvents.write("}\n")
215 def AnalyzeCapabilities(Temp, appName):
217 if (Temp == "capability.switch" or
218 Temp == "capability.switchLevel" or
219 Temp == "capability.illuminanceMeasurement" or
221 Temp == "capability.motionSensor" or
223 Temp == "capability.valve" or
224 Temp == "capability.waterSensor" or
226 Temp == "capability.musicPlayer" or
227 Temp == "capability.alarm" or
228 Temp == "capability.speechSynthesis" or
229 Temp == "capability.soundSensor"):
230 if (appName == "App1"):
231 app1Capabilities.append(Temp)
233 app2Capabilities.append(Temp)
235 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
237 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
238 "capability.switchLevel" in app2Capab):
239 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
241 if ("capability.motionSensor" in app1Capab):
242 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
244 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
245 "capability.switch" in app2Capab):
246 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
248 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
249 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
250 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
252 def ExtractEvents(extractedEvents):
254 extractedEvents.write("Random random = new Random(42)\n")
255 extractedEvents.write("counter = 1000\n")
256 extractedEvents.write("while(counter > 0) {\n")
257 extractedEvents.write("\tdef eventNumber = random.nextInt(%d)\n" % (len(eventMap) - 1))
258 extractedEvents.write("\tswitch(eventNumber) {\n")
260 for i in range(len(eventMap)):
261 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
262 if eventMap[i] == "lock":
263 event = open("eventSimulator/lockEvent.groovy", "r")
265 extractedEvents.write(line)
267 elif eventMap[i] == "unlock":
268 event = open("eventSimulator/unlockEvent.groovy", "r")
270 extractedEvents.write(line)
272 elif eventMap[i] == "contact.open":
273 event = open("eventSimulator/contactOpenEvent.groovy", "r")
275 extractedEvents.write(line)
277 elif eventMap[i] == "contact.closed":
278 event = open("eventSimulator/contactClosedEvent.groovy", "r")
280 extractedEvents.write(line)
282 elif eventMap[i] == "nfcTouch":
283 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
285 extractedEvents.write(line)
287 elif eventMap[i] == "Touched":
288 event = open("eventSimulator/appTouchEvent.groovy", "r")
290 extractedEvents.write(line)
292 elif eventMap[i] == "button":
293 #Write two events subsequently
294 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
296 extractedEvents.write(line)
298 extractedEvents.write("\t\t\tbreak\n")
299 eventCounter = eventCounter + 1
300 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
301 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
303 extractedEvents.write(line)
305 elif eventMap[i] == "presence":
306 #Write two events subsequently
307 event = open("eventSimulator/presencePresentEvent.groovy", "r")
309 extractedEvents.write(line)
311 extractedEvents.write("\t\t\tbreak\n")
312 eventCounter = eventCounter + 1
313 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
314 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
316 extractedEvents.write(line)
318 elif eventMap[i] == "doorState":
319 #Write two events subsequently
320 event = open("eventSimulator/doorOpenEvent.groovy", "r")
322 extractedEvents.write(line)
324 extractedEvents.write("\t\t\tbreak\n")
325 eventCounter = eventCounter + 1
326 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
327 event = open("eventSimulator/doorClosedEvent.groovy", "r")
329 extractedEvents.write(line)
331 elif eventMap[i] == "motion":
332 #Write two events subsequently
333 event = open("eventSimulator/motionActiveEvent.groovy", "r")
335 extractedEvents.write(line)
337 extractedEvents.write("\t\t\tbreak\n")
338 eventCounter = eventCounter + 1
339 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
340 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
342 extractedEvents.write(line)
344 elif eventMap[i] == "smoke":
345 #Write three events subsequently
346 event = open("eventSimulator/smokeClearEvent.groovy", "r")
348 extractedEvents.write(line)
350 extractedEvents.write("\t\t\tbreak\n")
351 eventCounter = eventCounter + 1
352 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
353 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
355 extractedEvents.write(line)
357 extractedEvents.write("\t\t\tbreak\n")
358 eventCounter = eventCounter + 1
359 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
360 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
362 extractedEvents.write(line)
364 elif eventMap[i] == "carbonMonoxide":
365 #Write three events subsequently
366 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
368 extractedEvents.write(line)
370 extractedEvents.write("\t\t\tbreak\n")
371 eventCounter = eventCounter + 1
372 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
373 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
375 extractedEvents.write(line)
377 extractedEvents.write("\t\t\tbreak\n")
378 eventCounter = eventCounter + 1
379 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
380 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
382 extractedEvents.write(line)
384 elif eventMap[i] == "battery":
385 event = open("eventSimulator/batteryChargeEvent.groovy", "r")
387 extractedEvents.write(line)
389 elif eventMap[i] == "thermostatMode":
390 #Write five events subsequently
391 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
393 extractedEvents.write(line)
395 extractedEvents.write("\t\t\tbreak\n")
396 eventCounter = eventCounter + 1
397 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
398 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
400 extractedEvents.write(line)
402 extractedEvents.write("\t\t\tbreak\n")
403 eventCounter = eventCounter + 1
404 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
405 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
407 extractedEvents.write(line)
409 extractedEvents.write("\t\t\tbreak\n")
410 eventCounter = eventCounter + 1
411 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
412 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
414 extractedEvents.write(line)
416 extractedEvents.write("\t\t\tbreak\n")
417 eventCounter = eventCounter + 1
418 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
419 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
421 extractedEvents.write(line)
423 elif eventMap[i] == "switch":
424 #Write two events subsequently
425 event = open("eventSimulator/switchOnEvent.groovy", "r")
427 extractedEvents.write(line)
429 extractedEvents.write("\t\t\tbreak\n")
430 eventCounter = eventCounter + 1
431 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
432 event = open("eventSimulator/switchOffEvent.groovy", "r")
434 extractedEvents.write(line)
436 elif eventMap[i] == "Location":
437 #Write three events subsequently
438 event = open("eventSimulator/locationHomeEvent.groovy", "r")
440 extractedEvents.write(line)
442 extractedEvents.write("\t\t\tbreak\n")
443 eventCounter = eventCounter + 1
444 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
445 event = open("eventSimulator/locationAwayEvent.groovy", "r")
447 extractedEvents.write(line)
449 extractedEvents.write("\t\t\tbreak\n")
450 eventCounter = eventCounter + 1
451 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
452 event = open("eventSimulator/locationNightEvent.groovy", "r")
454 extractedEvents.write(line)
456 eventCounter = eventCounter + 1
458 ###TODO: Add more events later
459 extractedEvents.write("\n\t\t\tbreak\n")
460 extractedEvents.write("\t}\n")
461 extractedEvents.write("\tcounter--\n")
462 extractedEvents.write("}\n")
464 #Extract objects to call functions from App1
465 F1 = open("Extractor/App1/App1.groovy", "r")
466 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
467 ExtractFunctions(F1, "App1")
470 #Extract objects to call functions from App2
471 F2 = open("Extractor/App2/App2.groovy", "r")
472 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
473 ExtractFunctions(F2, "App2")
476 #Prepare eventSimulator file while parsing the App1 and App2 files
477 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
478 ExtractEvents(extractedEvents)
479 extractedEvents.close()
481 #Save the extracted methods and app1 in a same file to extract information
482 extractorFile = open("Extractor/extractorFile.groovy", "w+")
483 Extractor = open("Extractor/Extractor.groovy", "r")
484 F1 = open("Extractor/App1/App1.groovy", "r")
486 extractorFile.write("////////////////////\n")
487 extractorFile.write("@Field App\n")
488 extractorFile.write("App = \"App1\"")
489 extractorFile.write("\n")
490 for line in Extractor:
491 extractorFile.write(line)
492 extractorFile.write("\n\n")
494 extractorFile.write(line)
495 extractorFile.close()
498 #Run the file to extract the objects
499 os.system("groovy Extractor/extractorFile.groovy")
502 #Save the extracted methods and app2 in a same file to extract information
503 extractorFile = open("Extractor/extractorFile.groovy", "w+")
504 Extractor = open("Extractor/Extractor.groovy", "r")
505 F2 = open("Extractor/App2/App2.groovy", "r")
507 extractorFile.write("////////////////////\n")
508 extractorFile.write("@Field App\n")
509 extractorFile.write("App = \"App2\"")
510 extractorFile.write("\n")
511 for line in Extractor:
512 extractorFile.write(line)
513 extractorFile.write("\n\n")
515 extractorFile.write(line)
516 #Run the file to extract the objects
517 extractorFile.close()
520 os.system("groovy Extractor/extractorFile.groovy")