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
68 #Check and analyze capabilities for physical interaction
69 AnalyzeCapabilities(Temp, appName)
72 #Warn if there is a potential for physical interaction
73 AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities)
74 AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities)
76 def AnalyzeCapabilities(Temp, appName):
78 if (Temp == "capability.switch" or
79 Temp == "capability.switchLevel" or
80 Temp == "capability.illuminanceMeasurement" or
82 Temp == "capability.motionSensor" or
84 Temp == "capability.valve" or
85 Temp == "capability.waterSensor" or
87 Temp == "capability.musicPlayer" or
88 Temp == "capability.alarm" or
89 Temp == "capability.speechSynthesis" or
90 Temp == "capability.soundSensor"):
91 if (appName == "App1"):
92 app1Capabilities.append(Temp)
94 app2Capabilities.append(Temp)
96 def AnalyzePhysicalInteraction(app1Capab, app2Capab):
98 if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or
99 "capability.switchLevel" in app2Capab):
100 print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n")
102 if ("capability.motionSensor" in app1Capab):
103 print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n")
105 if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or
106 "capability.switch" in app2Capab):
107 print ("\nWARNING: Potential PHYSICAL CONFLICT (water) detected between App1 and App2!\n")
109 if ("capability.soundSensor" in app1Capab) and ("capability.musicPlayer" in app2Capab or
110 "capability.alarm" in app2Capab or "capability.speechSynthesis" in app2Capab):
111 print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n")
113 def ExtractEvents(extractedEvents):
115 extractedEvents.write("Random random = new Random(42)\n")
116 extractedEvents.write("counter = 1000\n")
117 extractedEvents.write("while(counter > 0) {\n")
118 extractedEvents.write("\tdef eventNumber = random.nextInt(%d)\n" % (len(eventMap) - 1))
119 extractedEvents.write("\tswitch(eventNumber) {\n")
121 for i in range(len(eventMap)):
122 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
123 if eventMap[i] == "lock":
124 event = open("eventSimulator/lockEvent.groovy", "r")
126 extractedEvents.write(line)
128 elif eventMap[i] == "unlock":
129 event = open("eventSimulator/unlockEvent.groovy", "r")
131 extractedEvents.write(line)
133 elif eventMap[i] == "contact.open":
134 event = open("eventSimulator/contactOpenEvent.groovy", "r")
136 extractedEvents.write(line)
138 elif eventMap[i] == "contact.closed":
139 event = open("eventSimulator/contactClosedEvent.groovy", "r")
141 extractedEvents.write(line)
143 elif eventMap[i] == "switch.on":
144 event = open("eventSimulator/switchOnEvent.groovy", "r")
146 extractedEvents.write(line)
148 elif eventMap[i] == "switch.off":
149 event = open("eventSimulator/switchOffEvent.groovy", "r")
151 extractedEvents.write(line)
153 elif eventMap[i] == "nfcTouch":
154 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
156 extractedEvents.write(line)
158 elif eventMap[i] == "Touched":
159 event = open("eventSimulator/appTouchEvent.groovy", "r")
161 extractedEvents.write(line)
163 elif eventMap[i] == "button":
164 #Write two events subsequently
165 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
167 extractedEvents.write(line)
169 extractedEvents.write("\t\t\tbreak\n")
170 eventCounter = eventCounter + 1
171 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
172 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
174 extractedEvents.write(line)
176 elif eventMap[i] == "presence":
177 #Write two events subsequently
178 event = open("eventSimulator/presencePresentEvent.groovy", "r")
180 extractedEvents.write(line)
182 extractedEvents.write("\t\t\tbreak\n")
183 eventCounter = eventCounter + 1
184 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
185 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
187 extractedEvents.write(line)
189 elif eventMap[i] == "doorState":
190 #Write two events subsequently
191 event = open("eventSimulator/doorOpenEvent.groovy", "r")
193 extractedEvents.write(line)
195 extractedEvents.write("\t\t\tbreak\n")
196 eventCounter = eventCounter + 1
197 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
198 event = open("eventSimulator/doorClosedEvent.groovy", "r")
200 extractedEvents.write(line)
202 eventCounter = eventCounter + 1
204 ###TODO: Add more events later
205 extractedEvents.write("\n\t\t\tbreak\n")
206 extractedEvents.write("\t}\n")
207 extractedEvents.write("\tcounter--\n")
208 extractedEvents.write("}\n")
210 #Extract objects to call functions from App1
211 F1 = open("Extractor/App1/App1.groovy", "r")
212 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
213 ExtractFunctions(F1, "App1")
216 #Extract objects to call functions from App2
217 F2 = open("Extractor/App2/App2.groovy", "r")
218 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
219 ExtractFunctions(F2, "App2")
222 #Prepare eventSimulator file while parsing the App1 and App2 files
223 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
224 ExtractEvents(extractedEvents)
225 extractedEvents.close()
227 #Save the extracted methods and app1 in a same file to extract information
228 extractorFile = open("Extractor/extractorFile.groovy", "w+")
229 Extractor = open("Extractor/Extractor.groovy", "r")
230 F1 = open("Extractor/App1/App1.groovy", "r")
232 extractorFile.write("////////////////////\n")
233 extractorFile.write("@Field App\n")
234 extractorFile.write("App = \"App1\"")
235 extractorFile.write("\n")
236 for line in Extractor:
237 extractorFile.write(line)
238 extractorFile.write("\n\n")
240 extractorFile.write(line)
241 extractorFile.close()
244 #Run the file to extract the objects
245 os.system("groovy Extractor/extractorFile.groovy")
248 #Save the extracted methods and app2 in a same file to extract information
249 extractorFile = open("Extractor/extractorFile.groovy", "w+")
250 Extractor = open("Extractor/Extractor.groovy", "r")
251 F2 = open("Extractor/App2/App2.groovy", "r")
253 extractorFile.write("////////////////////\n")
254 extractorFile.write("@Field App\n")
255 extractorFile.write("App = \"App2\"")
256 extractorFile.write("\n")
257 for line in Extractor:
258 extractorFile.write(line)
259 extractorFile.write("\n\n")
261 extractorFile.write(line)
262 #Run the file to extract the objects
263 extractorFile.close()
266 os.system("groovy Extractor/extractorFile.groovy")