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] == "switch.on":
147 event = open("eventSimulator/switchOnEvent.groovy", "r")
149 extractedEvents.write(line)
151 elif eventMap[i] == "switch.off":
152 event = open("eventSimulator/switchOffEvent.groovy", "r")
154 extractedEvents.write(line)
156 elif eventMap[i] == "nfcTouch":
157 event = open("eventSimulator/nfcTouchEvent.groovy", "r")
159 extractedEvents.write(line)
161 elif eventMap[i] == "Touched":
162 event = open("eventSimulator/appTouchEvent.groovy", "r")
164 extractedEvents.write(line)
166 elif eventMap[i] == "button":
167 #Write two events subsequently
168 event = open("eventSimulator/buttonPushedEvent.groovy", "r")
170 extractedEvents.write(line)
172 extractedEvents.write("\t\t\tbreak\n")
173 eventCounter = eventCounter + 1
174 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
175 event = open("eventSimulator/buttonHeldEvent.groovy", "r")
177 extractedEvents.write(line)
179 elif eventMap[i] == "presence":
180 #Write two events subsequently
181 event = open("eventSimulator/presencePresentEvent.groovy", "r")
183 extractedEvents.write(line)
185 extractedEvents.write("\t\t\tbreak\n")
186 eventCounter = eventCounter + 1
187 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
188 event = open("eventSimulator/presenceLeftEvent.groovy", "r")
190 extractedEvents.write(line)
192 elif eventMap[i] == "doorState":
193 #Write two events subsequently
194 event = open("eventSimulator/doorOpenEvent.groovy", "r")
196 extractedEvents.write(line)
198 extractedEvents.write("\t\t\tbreak\n")
199 eventCounter = eventCounter + 1
200 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
201 event = open("eventSimulator/doorClosedEvent.groovy", "r")
203 extractedEvents.write(line)
205 eventCounter = eventCounter + 1
207 ###TODO: Add more events later
208 extractedEvents.write("\n\t\t\tbreak\n")
209 extractedEvents.write("\t}\n")
210 extractedEvents.write("\tcounter--\n")
211 extractedEvents.write("}\n")
213 #Extract objects to call functions from App1
214 F1 = open("Extractor/App1/App1.groovy", "r")
215 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
216 ExtractFunctions(F1, "App1")
219 #Extract objects to call functions from App2
220 F2 = open("Extractor/App2/App2.groovy", "r")
221 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
222 ExtractFunctions(F2, "App2")
225 #Prepare eventSimulator file while parsing the App1 and App2 files
226 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
227 ExtractEvents(extractedEvents)
228 extractedEvents.close()
230 #Save the extracted methods and app1 in a same file to extract information
231 extractorFile = open("Extractor/extractorFile.groovy", "w+")
232 Extractor = open("Extractor/Extractor.groovy", "r")
233 F1 = open("Extractor/App1/App1.groovy", "r")
235 extractorFile.write("////////////////////\n")
236 extractorFile.write("@Field App\n")
237 extractorFile.write("App = \"App1\"")
238 extractorFile.write("\n")
239 for line in Extractor:
240 extractorFile.write(line)
241 extractorFile.write("\n\n")
243 extractorFile.write(line)
244 extractorFile.close()
247 #Run the file to extract the objects
248 os.system("groovy Extractor/extractorFile.groovy")
251 #Save the extracted methods and app2 in a same file to extract information
252 extractorFile = open("Extractor/extractorFile.groovy", "w+")
253 Extractor = open("Extractor/Extractor.groovy", "r")
254 F2 = open("Extractor/App2/App2.groovy", "r")
256 extractorFile.write("////////////////////\n")
257 extractorFile.write("@Field App\n")
258 extractorFile.write("App = \"App2\"")
259 extractorFile.write("\n")
260 for line in Extractor:
261 extractorFile.write(line)
262 extractorFile.write("\n\n")
264 extractorFile.write(line)
265 #Run the file to extract the objects
266 extractorFile.close()
269 os.system("groovy Extractor/extractorFile.groovy")