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