Fixing bug in Mobile Presence class
[smartthings-infrastructure.git] / Runner.py
1 import os
2
3 #Create directory for files to append in the main file
4
5 #Extract information from preferences and subscribe method to create required objects
6 os.system("python Extractor/ExtractorScript.py")
7
8 #Files for both Apps
9 Out = open("main.groovy", "w+")
10 GlobalVariablesBothApps = open("GlobalVariables/"+"GlobalVariablesBothApps.groovy", "r")
11 eventSimulator = open("eventSimulator/"+"eventSimulator.groovy", "r")
12
13 #For App1
14 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
15 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
16 subscribe = open("Methods/"+"subscribe.groovy", "r")
17 runIn = open("Methods/"+"runIn.groovy", "r")
18 runDaily = open("Methods/"+"runDaily.groovy", "r")
19 unschedule = open("Methods/"+"unschedule.groovy", "r")
20 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
21 sendSms = open("Methods/"+"sendSms.groovy", "r")
22 sendPush = open("Methods/"+"sendPush.groovy", "r")
23 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
24 schedule = open("Methods/"+"schedule.groovy", "r")
25 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
26 now = open("Methods/"+"now.groovy", "r")
27 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
28 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
29 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
30 timeToday = open("Methods/"+"timeToday.groovy", "r")
31 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
32 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
33 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
34 runOnce = open("Methods/"+"runOnce.groovy", "r")
35 parseJson = open("Methods/"+"parseJson.groovy", "r")
36 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
37 App1 = open("Extractor/"+"App1/App1.groovy", "r")
38 extractedObjectsApp1 = open("Extractor/"+"App1/extractedObjectsApp1.groovy", "r")
39 extractedObjectsConstructorApp1 = open("Extractor/"+"App1/extractedObjectsConstructorApp1.groovy", "r")
40 extractedFunctionsApp1 = open("Extractor/"+"App1/extractedFunctionsApp1.groovy", "r")
41
42
43
44
45 Out.write("//Infrastructure for SmartThings Application\n")
46 Out.write("//Importing Libraries\n")
47 Out.write("import groovy.transform.Field\n")
48 Out.write("import groovy.json.JsonSlurper\n")
49 Out.write("\n")
50 Out.write("//Importing Classes\n")
51 Out.write("import ContactSensor.ContactSensor\n")
52 Out.write("import ContactSensor.ContactSensors\n")
53 Out.write("import DoorControl.DoorControl\n")
54 Out.write("import DoorControl.DoorControls\n")
55 Out.write("import Lock.Lock\n")
56 Out.write("import Lock.Locks\n")
57 Out.write("import Thermostat.Thermostat\n")
58 Out.write("import Thermostat.Thermostats\n")
59 Out.write("import Switch.Switch\n")
60 Out.write("import Switch.Switches\n")
61 Out.write("import PresenceSensor.PresenceSensor\n")
62 Out.write("import PresenceSensor.PresenceSensors\n")
63 Out.write("import Logger.Logger\n")
64 Out.write("import Location.LocationVar\n")
65 Out.write("import Location.Phrase\n")
66 Out.write("import appTouch.Touched\n")
67 Out.write("import NfcTouch.NfcTouch\n")
68 Out.write("import AeonKeyFob.AeonKeyFob\n")
69 Out.write("import AeonKeyFob.AeonKeyFobs\n")
70 Out.write("import MusicPlayer.MusicPlayer\n")
71 Out.write("import MusicPlayer.MusicPlayers\n")
72 Out.write("import MotionSensor.MotionSensor\n")
73 Out.write("import MotionSensor.MotionSensors\n")
74 Out.write("import ImageCapture.ImageCapture\n")
75 Out.write("import ImageCapture.ImageCaptures\n")
76 Out.write("import SmokeDetector.SmokeDetector\n")
77 Out.write("import SmokeDetector.SmokeDetectors\n")
78 Out.write("import Alarm.Alarm\n")
79 Out.write("import Alarm.Alarms\n")
80 Out.write("import SpeechSynthesis.SpeechSynthesis\n")
81 Out.write("import SpeechSynthesis.SpeechSynthesises\n")
82 Out.write("import AccelerationSensor.AccelerationSensor\n")
83 Out.write("import AccelerationSensor.AccelerationSensors\n")
84 Out.write("import Battery.Battery\n")
85 Out.write("import Battery.Batteries\n")
86 Out.write("import BeaconSensor.BeaconSensor\n")
87 Out.write("import BeaconSensor.BeaconSensors\n")
88 Out.write("import CarbonMonoxideDetector.CarbonMonoxideDetector\n")
89 Out.write("import CarbonMonoxideDetector.CarbonMonoxideDetectors\n")
90 Out.write("import ColorControl.ColorControl\n")
91 Out.write("import ColorControl.ColorControls\n")
92 Out.write("import EnergyMeter.EnergyMeter\n")
93 Out.write("import EnergyMeter.EnergyMeters\n")
94 Out.write("import IlluminanceMeasurement.IlluminanceMeasurement\n")
95 Out.write("import IlluminanceMeasurement.IlluminanceMeasurements\n")
96 Out.write("import PowerMeter.PowerMeter\n")
97 Out.write("import PowerMeter.PowerMeters\n")
98 Out.write("import RelativeHumidityMeasurement.RelativeHumidityMeasurement\n")
99 Out.write("import RelativeHumidityMeasurement.RelativeHumidityMeasurements\n")
100 Out.write("import RelaySwitch.RelaySwitch\n")
101 Out.write("import RelaySwitch.RelaySwitches\n")
102 Out.write("import SleepSensor.SleepSensor\n")
103 Out.write("import SleepSensor.SleepSensors\n")
104 Out.write("import StepSensor.StepSensor\n")
105 Out.write("import StepSensor.StepSensors\n")
106 Out.write("import SwitchLevel.SwitchLevel\n")
107 Out.write("import SwitchLevel.SwitchLevels\n")
108 Out.write("import TemperatureMeasurement.TemperatureMeasurement\n")
109 Out.write("import TemperatureMeasurement.TemperatureMeasurements\n")
110 Out.write("import WaterSensor.WaterSensor\n")
111 Out.write("import WaterSensor.WaterSensors\n")
112 Out.write("import Valve.Valve\n")
113 Out.write("import Valve.Valves\n")
114 Out.write("import MobilePresence.MobilePresence\n")
115 Out.write("import MobilePresence.MobilePresences\n")
116 Out.write("import ColorTemperature.ColorTemperature\n")
117 Out.write("import ColorTemperature.ColorTemperatures\n")
118 Out.write("import Button.Button\n")
119 Out.write("import Button.Buttons\n")
120 Out.write("import ThreeAxis.ThreeAxis\n")
121 Out.write("import ThreeAxis.ThreeAxises\n")
122 Out.write("import Momentary.Momentary\n")
123 Out.write("import Momentary.Momentaries\n")
124 Out.write("import RemainingDevices.RemainingDevices\n")
125 Out.write("import Event.Event\n")
126 Out.write("import Timer.SimulatedTimer\n")
127 Out.write("\n")
128 Out.write("//JPF's Verify API\n")
129 Out.write("import gov.nasa.jpf.vm.Verify\n")
130 Out.write("\n")
131 Out.write("//Global eventHandler\n")
132 for line in eventHandler:
133         Out.write(line)
134 Out.write("\n")
135 Out.write("//GlobalVariables for both Apps\n")
136 Out.write("@Field def init = Verify.getBoolean()\n\n")
137 for line in GlobalVariablesBothApps:
138         Out.write(line)
139 Out.write("@Field def stack = []\n")
140 Out.write("\n")
141 Out.write("//clear init flag now we are done with it\n")
142 Out.write("init = false\n")
143 Out.write("//Application #1\n")
144 Out.write("class App1 {\n")
145 Out.write("\tdef reference\n")
146 Out.write("\tdef location\n")
147 Out.write("\t// A local variable added for conflict detection tool\n")
148 Out.write("\tdef location_mode\n")
149 Out.write("\tdef app\n")
150 Out.write("\n")
151 Out.write("\t//Extracted objects for App1\n")
152 for line in extractedObjectsApp1:
153         Out.write("\t"+line)
154 Out.write("\n")
155 Out.write("\t//Extracted objects for functions for App1\n")
156 for line in extractedFunctionsApp1:
157         Out.write("\t"+line)
158 Out.write("\n")
159 Out.write("\tApp1(Object obj) {\n")
160 Out.write("\t\treference = obj\n")
161 Out.write("\t\tlocation = obj.locationObject\n")
162 Out.write("\t\tapp = obj.appObject\n")
163 for line in extractedObjectsConstructorApp1:
164         Out.write("\t\t"+line)
165 Out.write("\t}\n")
166 Out.write("\t//Global variables for each app\n")
167 for line in GlobalVariablesEachApp:
168         Out.write("\t"+line)
169 Out.write("\n")
170 Out.write("\t//Methods\n")
171 for line in setLocationMode:
172         Out.write("\t"+line)
173 for line in subscribe:
174         Out.write("\t"+line)
175 for line in runIn:
176         Out.write("\t"+line)
177 for line in runDaily:
178         Out.write("\t"+line)
179 for line in unschedule:
180         Out.write("\t"+line)
181 for line in sendNotificationToContacts:
182         Out.write("\t"+line)
183 for line in sendSms:
184         Out.write("\t"+line)
185 for line in sendPush:
186         Out.write("\t"+line)
187 for line in schedule:
188         Out.write("\t"+line)
189 for line in now:
190         Out.write("\t"+line)
191 for line in getTemperatureScale:
192         Out.write("\t"+line)
193 for line in getSunriseAndSunset:
194         Out.write("\t"+line)
195 for line in httpPostJson:
196         Out.write("\t"+line)
197 for line in runEvery15Minutes:
198         Out.write("\t"+line)
199 for line in timeToday:
200         Out.write("\t"+line)
201 for line in sendNotification:
202         Out.write("\t"+line)
203 for line in canSchedule:
204         Out.write("\t"+line)
205 for line in createAccessToken:
206         Out.write("\t"+line)
207 for line in runOnce:
208         Out.write("\t"+line)
209 for line in parseJson:
210         Out.write("\t"+line)
211 for line in unsubscribe:
212         Out.write("\t"+line)
213 Out.write("\n")
214 Start = 0
215 for line in App1:
216         if ("def " in line):
217                 Start = 1
218         if (Start):
219                 Out.write("\t"+line)
220 Out.write("}\n")
221 Out.write("\n")
222 Out.write("\n")
223 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
224
225 #For App2
226 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
227 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
228 subscribe = open("Methods/"+"subscribe.groovy", "r")
229 runIn = open("Methods/"+"runIn.groovy", "r")
230 runDaily = open("Methods/"+"runDaily.groovy", "r")
231 unschedule = open("Methods/"+"unschedule.groovy", "r")
232 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
233 sendSms = open("Methods/"+"sendSms.groovy", "r")
234 sendPush = open("Methods/"+"sendPush.groovy", "r")
235 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
236 schedule = open("Methods/"+"schedule.groovy", "r")
237 now = open("Methods/"+"now.groovy", "r")
238 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
239 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
240 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
241 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
242 timeToday = open("Methods/"+"timeToday.groovy", "r")
243 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
244 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
245 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
246 runOnce = open("Methods/"+"runOnce.groovy", "r")
247 parseJson = open("Methods/"+"parseJson.groovy", "r")
248 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
249 App2 = open("Extractor/"+"App2/App2.groovy", "r")
250 extractedObjectsApp2 = open("Extractor/"+"App2/extractedObjectsApp2.groovy", "r")
251 extractedObjectsConstructorApp2 = open("Extractor/"+"App2/extractedObjectsConstructorApp2.groovy", "r")
252 extractedFunctionsApp2 = open("Extractor/"+"App2/extractedFunctionsApp2.groovy", "r")
253
254 Out.write("//Application #2\n")
255 Out.write("class App2 {\n")
256 Out.write("\tdef reference\n")
257 Out.write("\tdef location\n")
258 Out.write("\t// A local variable added for conflict detection tool\n")
259 Out.write("\tdef location_mode\n")
260 Out.write("\tdef app\n")
261 Out.write("\n")
262 Out.write("\t//Extracted objects for App2\n")
263 for line in extractedObjectsApp2:
264         Out.write("\t"+line)
265 Out.write("\n")
266 Out.write("\t//Extracted objects for functions for App2\n")
267 for line in extractedFunctionsApp2:
268         Out.write("\t"+line)
269 Out.write("\n")
270 Out.write("\tApp2(Object obj) {\n")
271 Out.write("\t\treference = obj\n")
272 Out.write("\t\tlocation = obj.locationObject\n")
273 Out.write("\t\tapp = obj.appObject\n")
274 for line in extractedObjectsConstructorApp2:
275         Out.write("\t\t"+line)
276 Out.write("\t}\n")
277 Out.write("\t//Global variables for each app\n")
278 for line in GlobalVariablesEachApp:
279         Out.write("\t"+line)
280 Out.write("\n")
281 Out.write("\t//Methods\n")
282 for line in setLocationMode:
283         Out.write("\t"+line)
284 for line in subscribe:
285         Out.write("\t"+line)
286 for line in runIn:
287         Out.write("\t"+line)
288 for line in runDaily:
289         Out.write("\t"+line)
290 for line in unschedule:
291         Out.write("\t"+line)
292 for line in sendNotificationToContacts:
293         Out.write("\t"+line)
294 for line in sendSms:
295         Out.write("\t"+line)
296 for line in sendPush:
297         Out.write("\t"+line)
298 for line in schedule:
299         Out.write("\t"+line)
300 for line in now:
301         Out.write("\t"+line)
302 for line in getTemperatureScale:
303         Out.write("\t"+line)
304 for line in getSunriseAndSunset:
305         Out.write("\t"+line)
306 for line in httpPostJson:
307         Out.write("\t"+line)
308 for line in runEvery15Minutes:
309         Out.write("\t"+line)
310 for line in timeToday:
311         Out.write("\t"+line)
312 for line in sendNotification:
313         Out.write("\t"+line)
314 for line in canSchedule:
315         Out.write("\t"+line)
316 for line in createAccessToken:
317         Out.write("\t"+line)
318 for line in runOnce:
319         Out.write("\t"+line)
320 for line in parseJson:
321         Out.write("\t"+line)
322 for line in unsubscribe:
323         Out.write("\t"+line)
324 Out.write("\n")
325 Start = 0
326 for line in App2:
327         if ("def " in line):
328                 Start = 1
329         if (Start):
330                 Out.write("\t"+line)
331 Out.write("}\n")
332 Out.write("\n")
333 Out.write("@Field def app1\n")
334 Out.write("@Field def app2\n")
335 Out.write("//def initOrder = Verify.getBoolean()\n")
336 Out.write("//if (initOrder) {\n")
337 Out.write("\tapp1 = new App1(this)\n")
338 Out.write("\tapp2 = new App2(this)\n")
339 Out.write("//} else {\n")
340 Out.write("\t//app2 = new App2(this)\n")
341 Out.write("\t//app1 = new App1(this)\n")
342 Out.write("//}\n\n")
343 Out.write("//def installOrder = Verify.getBoolean()\n")
344 Out.write("//if (installOrder) {\n")
345 Out.write("\tapp1.installed()\n")
346 Out.write("\tapp2.installed()\n")
347 Out.write("//} else {\n")
348 Out.write("\t//app2.installed()\n")
349 Out.write("\t//app1.installed()\n")
350 Out.write("//}\n\n")
351 for line in eventSimulator:
352         Out.write(line)
353 Out.close()
354
355
356
357