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