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