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"):
57 while (Temp != "\"" and Temp != "app" and Temp != "location"):
61 if Temp not in eventMap:
64 #Check and analyze capabilities for physical interaction
65 AnalyzeCapabilities(Temp, appName)
69 #Warn if there is a potential for physical interaction
70 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
71 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
75 def AnalyzeCapabilities(Temp, appName):
77 if (Temp == "capability.switch" or
78 Temp == "capability.switchLevel" or
79 Temp == "capability.illuminanceMeasurement" or
81 Temp == "capability.motionSensor" or
83 Temp == "capability.valve" or
84 Temp == "capability.waterSensor" or
86 Temp == "capability.musicPlayer" or
87 Temp == "capability.alarm" or
88 Temp == "capability.speechSynthesis" or
89 Temp == "capability.soundSensor"):
90 if (appName == "App1"):
91 app1Capabilities.append(Temp)
93 app2Capabilities.append(Temp)
95 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
97 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
98 "capability.switchLevel" in app2Capab):
99 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
101 if ("capability.motionSensor" in app1Capab):
102 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
104 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
105 "capability.switch" in app2Capab):
106 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
108 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
109 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
110 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
112 def ExtractEvents(extractedEvents):
114 extractedEvents.write("while(true) {\n")
115 extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventMap) - 1))
116 extractedEvents.write("\tswitch(eventNumber) {\n")
117 for i in range(len(eventMap)):
118 extractedEvents.write("\t\tcase %d:\n" % i)
119 if eventMap[i] == "lock":
120 event = open("eventSimulator/lockEvent.groovy", "r")
122 extractedEvents.write(line)
124 elif eventMap[i] == "unlock":
125 event = open("eventSimulator/unlockEvent.groovy", "r")
127 extractedEvents.write(line)
129 elif eventMap[i] == "contact.open":
130 event = open("eventSimulator/contactOpenEvent.groovy", "r")
132 extractedEvents.write(line)
134 elif eventMap[i] == "contact.closed":
135 event = open("eventSimulator/contactClosedEvent.groovy", "r")
137 extractedEvents.write(line)
139 elif eventMap[i] == "nfcTouch":
140 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
142 extractedEvents.write(line)
144 elif eventMap[i] == "app": #Case for Touched event
145 event = open("eventSimulator/appTouchEvent.groovy", "r")
147 extractedEvents.write(line)
149 elif eventMap[i] == "button":
150 #Write two events subsequently
151 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
152 extractedEvents.write("\t\t\tif (event == 0) {\n")
153 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
155 extractedEvents.write("\t\t" + line)
157 extractedEvents.write("\t\t\t} else {\n")
158 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
160 extractedEvents.write("\t\t" + line)
162 extractedEvents.write("\t\t\t}\n")
163 elif eventMap[i] == "presence":
164 #Write two events subsequently
165 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
166 extractedEvents.write("\t\t\tif (event == 0) {\n")
167 event = open("eventSimulator/presencePresentEvent.groovy", "r")
169 extractedEvents.write("\t\t" + line)
171 extractedEvents.write("\t\t\t} else {\n")
172 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
174 extractedEvents.write("\t\t" + line)
176 extractedEvents.write("\t\t\t}\n")
177 elif eventMap[i] == "doorState":
178 #Write two events subsequently
179 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
180 extractedEvents.write("\t\t\tif (event == 0) {\n")
181 event = open("eventSimulator/doorOpenEvent.groovy", "r")
183 extractedEvents.write("\t\t" + line)
185 extractedEvents.write("\t\t\t} else {\n")
186 event = open("eventSimulator/doorClosedEvent.groovy", "r")
188 extractedEvents.write("\t\t" + line)
190 extractedEvents.write("\t\t\t}\n")
191 elif eventMap[i] == "motion":
192 #Write two events subsequently
193 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
194 extractedEvents.write("\t\t\tif (event == 0) {\n")
195 event = open("eventSimulator/motionActiveEvent.groovy", "r")
197 extractedEvents.write("\t\t" + line)
199 extractedEvents.write("\t\t\t} else {\n")
200 event = open("eventSimulator/motionInactiveEvent.groovy", "r")
202 extractedEvents.write("\t\t" + line)
204 extractedEvents.write("\t\t\t}\n")
205 elif eventMap[i] == "smoke":
206 #Write three events subsequently
207 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
208 extractedEvents.write("\t\t\tif (event == 0) {\n")
209 event = open("eventSimulator/smokeClearEvent.groovy", "r")
211 extractedEvents.write("\t\t" + line)
213 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
214 event = open("eventSimulator/smokeDetectedEvent.groovy", "r")
216 extractedEvents.write("\t\t" + line)
218 extractedEvents.write("\t\t\t} else {\n")
219 event = open("eventSimulator/smokeTestedEvent.groovy", "r")
221 extractedEvents.write("\t\t" + line)
223 extractedEvents.write("\t\t\t}\n")
224 elif eventMap[i] == "carbonMonoxide":
225 #Write three events subsequently
226 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
227 extractedEvents.write("\t\t\tif (event == 0) {\n")
228 event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r")
230 extractedEvents.write("\t\t" + line)
232 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
233 event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r")
235 extractedEvents.write("\t\t" + line)
237 extractedEvents.write("\t\t\t} else {\n")
238 event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r")
240 extractedEvents.write("\t\t" + line)
242 extractedEvents.write("\t\t\t}\n")
243 elif eventMap[i] == "battery":
244 event = open("eventSimulator/batteryChargeEvent.groovy", "r")
246 extractedEvents.write(line)
248 elif eventMap[i] == "thermostatMode":
249 #Write five events subsequently
250 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n")
251 extractedEvents.write("\t\t\tif (event == 0) {\n")
252 event = open("eventSimulator/thermostatAutoModeEvent.groovy", "r")
254 extractedEvents.write("\t\t" + line)
256 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
257 event = open("eventSimulator/thermostatCoolModeEvent.groovy", "r")
259 extractedEvents.write("\t\t" + line)
261 extractedEvents.write("\t\t\t} else if (event == 2) {\n")
262 event = open("eventSimulator/thermostatEmergencyHeatModeEvent.groovy", "r")
264 extractedEvents.write("\t\t" + line)
266 extractedEvents.write("\t\t\t} else if (event == 3) {\n")
267 event = open("eventSimulator/thermostatHeatModeEvent.groovy", "r")
269 extractedEvents.write("\t\t" + line)
271 extractedEvents.write("\t\t\t} else {\n")
272 event = open("eventSimulator/thermostatOffModeEvent.groovy", "r")
274 extractedEvents.write("\t\t" + line)
276 extractedEvents.write("\t\t\t}\n")
277 elif eventMap[i] == "switch":
278 #Write two events subsequently
279 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
280 extractedEvents.write("\t\t\tif (event == 0) {\n")
281 event = open("eventSimulator/switchOnEvent.groovy", "r")
283 extractedEvents.write("\t\t" + line)
285 extractedEvents.write("\t\t\t} else {\n")
286 event = open("eventSimulator/switchOffEvent.groovy", "r")
288 extractedEvents.write("\t\t" + line)
290 extractedEvents.write("\t\t\t}\n")
291 elif eventMap[i] == "location": #Case for Location event
292 #Write three events subsequently
293 extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
294 extractedEvents.write("\t\t\tif (event == 0) {\n")
295 event = open("eventSimulator/locationHomeEvent.groovy", "r")
297 extractedEvents.write("\t\t" + line)
299 extractedEvents.write("\t\t\t} else if (event == 1) {\n")
300 event = open("eventSimulator/locationAwayEvent.groovy", "r")
302 extractedEvents.write("\t\t" + line)
304 extractedEvents.write("\t\t\t} else {\n")
305 event = open("eventSimulator/locationNightEvent.groovy", "r")
307 extractedEvents.write("\t\t" + line)
309 extractedEvents.write("\t\t\t}\n")
311 ###TODO: Add more events later
312 extractedEvents.write("\t\t\tbreak\n")
313 extractedEvents.write("\t}\n")
314 #extractedEvents.write("\tcounter--\n")
315 extractedEvents.write("}\n")
317 #Extract objects to call functions from App1
318 F1 = open("Extractor/App1/App1.groovy", "r")
319 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
320 ExtractFunctions(F1, "App1")
323 #Extract objects to call functions from App2
324 F2 = open("Extractor/App2/App2.groovy", "r")
325 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
326 ExtractFunctions(F2, "App2")
329 #Prepare eventSimulator file while parsing the App1 and App2 files
330 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
331 ExtractEvents(extractedEvents)
332 extractedEvents.close()
334 #Save the extracted methods and app1 in a same file to extract information
335 extractorFile = open("Extractor/extractorFile.groovy", "w+")
336 Extractor = open("Extractor/Extractor.groovy", "r")
337 F1 = open("Extractor/App1/App1.groovy", "r")
339 extractorFile.write("////////////////////\n")
340 extractorFile.write("@Field App\n")
341 extractorFile.write("App = \"App1\"")
342 extractorFile.write("\n")
343 for line in Extractor:
344 extractorFile.write(line)
345 extractorFile.write("\n\n")
347 extractorFile.write(line)
348 extractorFile.close()
351 #Run the file to extract the objects
352 os.system("groovy Extractor/extractorFile.groovy")
355 #Save the extracted methods and app2 in a same file to extract information
356 extractorFile = open("Extractor/extractorFile.groovy", "w+")
357 Extractor = open("Extractor/Extractor.groovy", "r")
358 F2 = open("Extractor/App2/App2.groovy", "r")
360 extractorFile.write("////////////////////\n")
361 extractorFile.write("@Field App\n")
362 extractorFile.write("App = \"App2\"")
363 extractorFile.write("\n")
364 for line in Extractor:
365 extractorFile.write(line)
366 extractorFile.write("\n\n")
368 extractorFile.write(line)
369 #Run the file to extract the objects
370 extractorFile.close()
373 os.system("groovy Extractor/extractorFile.groovy")