11 Skip = ['\n', '\t', ' ']
12 Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
38 def ExtractFunctions(F, appName):
41 while (Temp != "EOF"):
42 if (Temp == "def" or Temp == "private"):
45 if (GetToken(F) != "="): #We have a function to create object for
46 if (appName == "App1"):
47 extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")
48 extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
49 extractedFunctionsApp1.write("%s\n" % NameofFunc)
51 extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")
52 extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
53 extractedFunctionsApp2.write("%s\n" % NameofFunc)
55 #Check subscribed events
56 if (Temp == "subscribe"):
58 while (counter < 5 and Temp != "\""):
62 #If counter >= 5 that means it is not found, so it must be appTouch
65 if Temp not in eventMap:
68 #Check and analyze capabilities for physical interaction
69 AnalyzeCapabilities(Temp, appName)
73 #Warn if there is a potential for physical interaction
74 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
75 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
79 def AnalyzeCapabilities(Temp, appName):
81 if (Temp == "capability.switch" or
82 Temp == "capability.switchLevel" or
83 Temp == "capability.illuminanceMeasurement" or
85 Temp == "capability.motionSensor" or
87 Temp == "capability.valve" or
88 Temp == "capability.waterSensor" or
90 Temp == "capability.musicPlayer" or
91 Temp == "capability.alarm" or
92 Temp == "capability.speechSynthesis" or
93 Temp == "capability.soundSensor"):
94 if (appName == "App1"):
95 app1Capabilities.append(Temp)
97 app2Capabilities.append(Temp)
99 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
101 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
102 "capability.switchLevel" in app2Capab):
103 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
105 if ("capability.motionSensor" in app1Capab):
106 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
108 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
109 "capability.switch" in app2Capab):
110 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
112 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
113 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
114 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
116 def ExtractEvents(extractedEvents):
118 extractedEvents.write("Random random = new Random(42)\n")
119 extractedEvents.write("counter = 1000\n")
120 extractedEvents.write("while(counter > 0) {\n")
121 extractedEvents.write("\tdef eventNumber = random.nextInt(%d)\n" % (len(eventMap) - 1))
122 extractedEvents.write("\tswitch(eventNumber) {\n")
124 for i in range(len(eventMap)):
125 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
126 if eventMap[i] == "lock":
127 event = open("eventSimulator/lockEvent.groovy", "r")
129 extractedEvents.write(line)
131 elif eventMap[i] == "unlock":
132 event = open("eventSimulator/unlockEvent.groovy", "r")
134 extractedEvents.write(line)
136 elif eventMap[i] == "contact.open":
137 event = open("eventSimulator/contactOpenEvent.groovy", "r")
139 extractedEvents.write(line)
141 elif eventMap[i] == "contact.closed":
142 event = open("eventSimulator/contactClosedEvent.groovy", "r")
144 extractedEvents.write(line)
146 elif eventMap[i] == "nfcTouch":
147 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
149 extractedEvents.write(line)
151 elif eventMap[i] == "Touched":
152 event = open("eventSimulator/appTouchEvent.groovy", "r")
154 extractedEvents.write(line)
156 elif eventMap[i] == "button":
157 #Write two events subsequently
158 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
160 extractedEvents.write(line)
162 extractedEvents.write("\t\t\tbreak\n")
163 eventCounter = eventCounter + 1
164 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
165 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
167 extractedEvents.write(line)
169 elif eventMap[i] == "presence":
170 #Write two events subsequently
171 event = open("eventSimulator/presencePresentEvent.groovy", "r")
173 extractedEvents.write(line)
175 extractedEvents.write("\t\t\tbreak\n")
176 eventCounter = eventCounter + 1
177 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
178 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
180 extractedEvents.write(line)
182 elif eventMap[i] == "doorState":
183 #Write two events subsequently
184 event = open("eventSimulator/doorOpenEvent.groovy", "r")
186 extractedEvents.write(line)
188 extractedEvents.write("\t\t\tbreak\n")
189 eventCounter = eventCounter + 1
190 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
191 event = open("eventSimulator/doorClosedEvent.groovy", "r")
193 extractedEvents.write(line)
195 elif eventMap[i] == "motion":
196 #Write two events subsequently
197 event = open("eventSimulator/motionActiveEvent.groovy", "r")
199 extractedEvents.write(line)
201 extractedEvents.write("\t\t\tbreak\n")
202 eventCounter = eventCounter + 1
203 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
204 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
206 extractedEvents.write(line)
208 elif eventMap[i] == "smoke":
209 #Write three events subsequently
210 event = open("eventSimulator/smokeClearEvent.groovy", "r")
212 extractedEvents.write(line)
214 extractedEvents.write("\t\t\tbreak\n")
215 eventCounter = eventCounter + 1
216 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
217 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
219 extractedEvents.write(line)
221 extractedEvents.write("\t\t\tbreak\n")
222 eventCounter = eventCounter + 1
223 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
224 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
226 extractedEvents.write(line)
228 elif eventMap[i] == "carbonMonoxide":
229 #Write three events subsequently
230 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
232 extractedEvents.write(line)
234 extractedEvents.write("\t\t\tbreak\n")
235 eventCounter = eventCounter + 1
236 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
237 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
239 extractedEvents.write(line)
241 extractedEvents.write("\t\t\tbreak\n")
242 eventCounter = eventCounter + 1
243 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
244 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
246 extractedEvents.write(line)
248 elif eventMap[i] == "battery":
249 event = open("eventSimulator/batteryChargeEvent.groovy", "r")
251 extractedEvents.write(line)
253 elif eventMap[i] == "thermostatMode":
254 #Write five events subsequently
255 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
257 extractedEvents.write(line)
259 extractedEvents.write("\t\t\tbreak\n")
260 eventCounter = eventCounter + 1
261 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
262 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
264 extractedEvents.write(line)
266 extractedEvents.write("\t\t\tbreak\n")
267 eventCounter = eventCounter + 1
268 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
269 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
271 extractedEvents.write(line)
273 extractedEvents.write("\t\t\tbreak\n")
274 eventCounter = eventCounter + 1
275 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
276 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
278 extractedEvents.write(line)
280 extractedEvents.write("\t\t\tbreak\n")
281 eventCounter = eventCounter + 1
282 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
283 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
285 extractedEvents.write(line)
287 elif eventMap[i] == "switch":
288 #Write two events subsequently
289 event = open("eventSimulator/switchOnEvent.groovy", "r")
291 extractedEvents.write(line)
293 extractedEvents.write("\t\t\tbreak\n")
294 eventCounter = eventCounter + 1
295 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
296 event = open("eventSimulator/switchOffEvent.groovy", "r")
298 extractedEvents.write(line)
300 elif eventMap[i] == "Location":
301 #Write three events subsequently
302 event = open("eventSimulator/locationHomeEvent.groovy", "r")
304 extractedEvents.write(line)
306 extractedEvents.write("\t\t\tbreak\n")
307 eventCounter = eventCounter + 1
308 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
309 event = open("eventSimulator/locationAwayEvent.groovy", "r")
311 extractedEvents.write(line)
313 extractedEvents.write("\t\t\tbreak\n")
314 eventCounter = eventCounter + 1
315 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
316 event = open("eventSimulator/locationNightEvent.groovy", "r")
318 extractedEvents.write(line)
320 eventCounter = eventCounter + 1
322 ###TODO: Add more events later
323 extractedEvents.write("\n\t\t\tbreak\n")
324 extractedEvents.write("\t}\n")
325 extractedEvents.write("\tcounter--\n")
326 extractedEvents.write("}\n")
328 #Extract objects to call functions from App1
329 F1 = open("Extractor/App1/App1.groovy", "r")
330 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
331 ExtractFunctions(F1, "App1")
334 #Extract objects to call functions from App2
335 F2 = open("Extractor/App2/App2.groovy", "r")
336 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
337 ExtractFunctions(F2, "App2")
340 #Prepare eventSimulator file while parsing the App1 and App2 files
341 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
342 ExtractEvents(extractedEvents)
343 extractedEvents.close()
345 #Save the extracted methods and app1 in a same file to extract information
346 extractorFile = open("Extractor/extractorFile.groovy", "w+")
347 Extractor = open("Extractor/Extractor.groovy", "r")
348 F1 = open("Extractor/App1/App1.groovy", "r")
350 extractorFile.write("////////////////////\n")
351 extractorFile.write("@Field App\n")
352 extractorFile.write("App = \"App1\"")
353 extractorFile.write("\n")
354 for line in Extractor:
355 extractorFile.write(line)
356 extractorFile.write("\n\n")
358 extractorFile.write(line)
359 extractorFile.close()
362 #Run the file to extract the objects
363 os.system("groovy Extractor/extractorFile.groovy")
366 #Save the extracted methods and app2 in a same file to extract information
367 extractorFile = open("Extractor/extractorFile.groovy", "w+")
368 Extractor = open("Extractor/Extractor.groovy", "r")
369 F2 = open("Extractor/App2/App2.groovy", "r")
371 extractorFile.write("////////////////////\n")
372 extractorFile.write("@Field App\n")
373 extractorFile.write("App = \"App2\"")
374 extractorFile.write("\n")
375 for line in Extractor:
376 extractorFile.write(line)
377 extractorFile.write("\n\n")
379 extractorFile.write(line)
380 #Run the file to extract the objects
381 extractorFile.close()
384 os.system("groovy Extractor/extractorFile.groovy")