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] == "switch.on":
283 event = open("eventSimulator/switchOnEvent.groovy", "r")
285 extractedEvents.write(line)
287 elif eventMap[i] == "switch.off":
288 event = open("eventSimulator/switchOffEvent.groovy", "r")
290 extractedEvents.write(line)
292 elif eventMap[i] == "nfcTouch":
293 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
295 extractedEvents.write(line)
297 elif eventMap[i] == "Touched":
298 event = open("eventSimulator/appTouchEvent.groovy", "r")
300 extractedEvents.write(line)
302 elif eventMap[i] == "button":
303 #Write two events subsequently
304 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
306 extractedEvents.write(line)
308 extractedEvents.write("\t\t\tbreak\n")
309 eventCounter = eventCounter + 1
310 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
311 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
313 extractedEvents.write(line)
315 elif eventMap[i] == "presence":
316 #Write two events subsequently
317 event = open("eventSimulator/presencePresentEvent.groovy", "r")
319 extractedEvents.write(line)
321 extractedEvents.write("\t\t\tbreak\n")
322 eventCounter = eventCounter + 1
323 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
324 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
326 extractedEvents.write(line)
328 elif eventMap[i] == "doorState":
329 #Write two events subsequently
330 event = open("eventSimulator/doorOpenEvent.groovy", "r")
332 extractedEvents.write(line)
334 extractedEvents.write("\t\t\tbreak\n")
335 eventCounter = eventCounter + 1
336 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
337 event = open("eventSimulator/doorClosedEvent.groovy", "r")
339 extractedEvents.write(line)
341 eventCounter = eventCounter + 1
343 ###TODO: Add more events later
344 extractedEvents.write("\n\t\t\tbreak\n")
345 extractedEvents.write("\t}\n")
346 extractedEvents.write("\tcounter--\n")
347 extractedEvents.write("}\n")
349 #Extract objects to call functions from App1
350 F1 = open("Extractor/App1/App1.groovy", "r")
351 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
352 ExtractFunctions(F1, "App1")
355 #Extract objects to call functions from App2
356 F2 = open("Extractor/App2/App2.groovy", "r")
357 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
358 ExtractFunctions(F2, "App2")
361 #Prepare eventSimulator file while parsing the App1 and App2 files
362 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
363 ExtractEvents(extractedEvents)
364 extractedEvents.close()
366 #Save the extracted methods and app1 in a same file to extract information
367 extractorFile = open("Extractor/extractorFile.groovy", "w+")
368 Extractor = open("Extractor/Extractor.groovy", "r")
369 F1 = open("Extractor/App1/App1.groovy", "r")
371 extractorFile.write("////////////////////\n")
372 extractorFile.write("@Field App\n")
373 extractorFile.write("App = \"App1\"")
374 extractorFile.write("\n")
375 for line in Extractor:
376 extractorFile.write(line)
377 extractorFile.write("\n\n")
379 extractorFile.write(line)
380 extractorFile.close()
383 #Run the file to extract the objects
384 os.system("groovy Extractor/extractorFile.groovy")
387 #Save the extracted methods and app2 in a same file to extract information
388 extractorFile = open("Extractor/extractorFile.groovy", "w+")
389 Extractor = open("Extractor/Extractor.groovy", "r")
390 F2 = open("Extractor/App2/App2.groovy", "r")
392 extractorFile.write("////////////////////\n")
393 extractorFile.write("@Field App\n")
394 extractorFile.write("App = \"App2\"")
395 extractorFile.write("\n")
396 for line in Extractor:
397 extractorFile.write(line)
398 extractorFile.write("\n\n")
400 extractorFile.write(line)
401 #Run the file to extract the objects
402 extractorFile.close()
405 os.system("groovy Extractor/extractorFile.groovy")