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