Make a change in switchLevel class to make its variable specific with variables in...
[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("\n")
140 Out.write("//clear init flag now we are done with it\n")
141 Out.write("init = false\n")
142 Out.write("//Application #1\n")
143 Out.write("class App1 {\n")
144 Out.write("\tdef reference\n")
145 Out.write("\tdef location\n")
146 Out.write("\t// A local variable added for conflict detection tool\n")
147 Out.write("\tdef location_mode\n")
148 Out.write("\tdef app\n")
149 Out.write("\n")
150 Out.write("\t//Extracted objects for App1\n")
151 for line in extractedObjectsApp1:
152         Out.write("\t"+line)
153 Out.write("\n")
154 Out.write("\t//Extracted objects for functions for App1\n")
155 for line in extractedFunctionsApp1:
156         Out.write("\t"+line)
157 Out.write("\n")
158 Out.write("\tApp1(Object obj) {\n")
159 Out.write("\t\treference = obj\n")
160 Out.write("\t\tlocation = obj.locationObject\n")
161 Out.write("\t\tapp = obj.appObject\n")
162 for line in extractedObjectsConstructorApp1:
163         Out.write("\t\t"+line)
164 Out.write("\t}\n")
165 Out.write("\t//Global variables for each app\n")
166 for line in GlobalVariablesEachApp:
167         Out.write("\t"+line)
168 Out.write("\n")
169 Out.write("\t//Methods\n")
170 for line in setLocationMode:
171         Out.write("\t"+line)
172 for line in subscribe:
173         Out.write("\t"+line)
174 for line in runIn:
175         Out.write("\t"+line)
176 for line in runDaily:
177         Out.write("\t"+line)
178 for line in unschedule:
179         Out.write("\t"+line)
180 for line in sendNotificationToContacts:
181         Out.write("\t"+line)
182 for line in sendSms:
183         Out.write("\t"+line)
184 for line in sendPush:
185         Out.write("\t"+line)
186 for line in schedule:
187         Out.write("\t"+line)
188 for line in now:
189         Out.write("\t"+line)
190 for line in getTemperatureScale:
191         Out.write("\t"+line)
192 for line in getSunriseAndSunset:
193         Out.write("\t"+line)
194 for line in httpPostJson:
195         Out.write("\t"+line)
196 for line in runEvery15Minutes:
197         Out.write("\t"+line)
198 for line in timeToday:
199         Out.write("\t"+line)
200 for line in sendNotification:
201         Out.write("\t"+line)
202 for line in canSchedule:
203         Out.write("\t"+line)
204 for line in createAccessToken:
205         Out.write("\t"+line)
206 for line in runOnce:
207         Out.write("\t"+line)
208 for line in parseJson:
209         Out.write("\t"+line)
210 for line in unsubscribe:
211         Out.write("\t"+line)
212 Out.write("\n")
213 Start = 0
214 for line in App1:
215         if ("def " in line):
216                 Start = 1
217         if (Start):
218                 Out.write("\t"+line)
219 Out.write("}\n")
220 Out.write("\n")
221 Out.write("\n")
222 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
223
224 #For App2
225 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
226 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
227 subscribe = open("Methods/"+"subscribe.groovy", "r")
228 runIn = open("Methods/"+"runIn.groovy", "r")
229 runDaily = open("Methods/"+"runDaily.groovy", "r")
230 unschedule = open("Methods/"+"unschedule.groovy", "r")
231 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
232 sendSms = open("Methods/"+"sendSms.groovy", "r")
233 sendPush = open("Methods/"+"sendPush.groovy", "r")
234 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
235 schedule = open("Methods/"+"schedule.groovy", "r")
236 now = open("Methods/"+"now.groovy", "r")
237 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
238 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
239 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
240 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
241 timeToday = open("Methods/"+"timeToday.groovy", "r")
242 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
243 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
244 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
245 runOnce = open("Methods/"+"runOnce.groovy", "r")
246 parseJson = open("Methods/"+"parseJson.groovy", "r")
247 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
248 App2 = open("Extractor/"+"App2/App2.groovy", "r")
249 extractedObjectsApp2 = open("Extractor/"+"App2/extractedObjectsApp2.groovy", "r")
250 extractedObjectsConstructorApp2 = open("Extractor/"+"App2/extractedObjectsConstructorApp2.groovy", "r")
251 extractedFunctionsApp2 = open("Extractor/"+"App2/extractedFunctionsApp2.groovy", "r")
252
253 Out.write("//Application #2\n")
254 Out.write("class App2 {\n")
255 Out.write("\tdef reference\n")
256 Out.write("\tdef location\n")
257 Out.write("\t// A local variable added for conflict detection tool\n")
258 Out.write("\tdef location_mode\n")
259 Out.write("\tdef app\n")
260 Out.write("\n")
261 Out.write("\t//Extracted objects for App2\n")
262 for line in extractedObjectsApp2:
263         Out.write("\t"+line)
264 Out.write("\n")
265 Out.write("\t//Extracted objects for functions for App2\n")
266 for line in extractedFunctionsApp2:
267         Out.write("\t"+line)
268 Out.write("\n")
269 Out.write("\tApp2(Object obj) {\n")
270 Out.write("\t\treference = obj\n")
271 Out.write("\t\tlocation = obj.locationObject\n")
272 Out.write("\t\tapp = obj.appObject\n")
273 for line in extractedObjectsConstructorApp2:
274         Out.write("\t\t"+line)
275 Out.write("\t}\n")
276 Out.write("\t//Global variables for each app\n")
277 for line in GlobalVariablesEachApp:
278         Out.write("\t"+line)
279 Out.write("\n")
280 Out.write("\t//Methods\n")
281 for line in setLocationMode:
282         Out.write("\t"+line)
283 for line in subscribe:
284         Out.write("\t"+line)
285 for line in runIn:
286         Out.write("\t"+line)
287 for line in runDaily:
288         Out.write("\t"+line)
289 for line in unschedule:
290         Out.write("\t"+line)
291 for line in sendNotificationToContacts:
292         Out.write("\t"+line)
293 for line in sendSms:
294         Out.write("\t"+line)
295 for line in sendPush:
296         Out.write("\t"+line)
297 for line in schedule:
298         Out.write("\t"+line)
299 for line in now:
300         Out.write("\t"+line)
301 for line in getTemperatureScale:
302         Out.write("\t"+line)
303 for line in getSunriseAndSunset:
304         Out.write("\t"+line)
305 for line in httpPostJson:
306         Out.write("\t"+line)
307 for line in runEvery15Minutes:
308         Out.write("\t"+line)
309 for line in timeToday:
310         Out.write("\t"+line)
311 for line in sendNotification:
312         Out.write("\t"+line)
313 for line in canSchedule:
314         Out.write("\t"+line)
315 for line in createAccessToken:
316         Out.write("\t"+line)
317 for line in runOnce:
318         Out.write("\t"+line)
319 for line in parseJson:
320         Out.write("\t"+line)
321 for line in unsubscribe:
322         Out.write("\t"+line)
323 Out.write("\n")
324 Start = 0
325 for line in App2:
326         if ("def " in line):
327                 Start = 1
328         if (Start):
329                 Out.write("\t"+line)
330 Out.write("}\n")
331 Out.write("\n")
332 Out.write("@Field def app1\n")
333 Out.write("@Field def app2\n")
334 Out.write("//def initOrder = Verify.getBoolean()\n")
335 Out.write("//if (initOrder) {\n")
336 Out.write("\tapp1 = new App1(this)\n")
337 Out.write("\tapp2 = new App2(this)\n")
338 Out.write("//} else {\n")
339 Out.write("\t//app2 = new App2(this)\n")
340 Out.write("\t//app1 = new App1(this)\n")
341 Out.write("//}\n\n")
342 Out.write("//def installOrder = Verify.getBoolean()\n")
343 Out.write("//if (installOrder) {\n")
344 Out.write("\tapp1.installed()\n")
345 Out.write("\tapp2.installed()\n")
346 Out.write("//} else {\n")
347 Out.write("\t//app2.installed()\n")
348 Out.write("\t//app1.installed()\n")
349 Out.write("//}\n\n")
350 for line in eventSimulator:
351         Out.write(line)
352 Out.close()
353
354
355
356