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