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