3 #Create directory for files to append in the main file
5 #Extract information from preferences and subscribe method to create required objects
6 os.system("python Extractor/ExtractorScript.py")
9 Out = open("main.groovy", "w+")
10 GlobalVariablesBothApps = open("GlobalVariables/"+"GlobalVariablesBothApps.groovy", "r")
11 eventSimulator = open("eventSimulator/"+"eventSimulator.groovy", "r")
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")
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")
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")
115 Out.write("//JPF's Verify API\n")
116 Out.write("import gov.nasa.jpf.vm.Verify\n")
118 Out.write("//Global eventHandler\n")
119 for line in eventHandler:
122 Out.write("//GlobalVariables for both Apps\n")
123 for line in GlobalVariablesBothApps:
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")
133 Out.write("\t//Extracted objects for App1\n")
134 for line in extractedObjectsApp1:
137 Out.write("\t//Extracted objects for functions for App1\n")
138 for line in extractedFunctionsApp1:
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)
149 Out.write("\t//Global variables for each app\n")
150 for line in GlobalVariablesEachApp:
153 Out.write("\t//Methods\n")
154 for line in setLocationMode:
156 for line in subscribe:
160 for line in unschedule:
162 for line in sendNotificationToContacts:
166 for line in sendPush:
168 for line in schedule:
172 for line in getTemperatureScale:
174 for line in getSunriseAndSunset:
176 for line in httpPostJson:
178 for line in runEvery15Minutes:
180 for line in timeToday:
182 for line in sendNotification:
184 for line in canSchedule:
196 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
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")
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")
229 Out.write("\t//Extracted objects for App2\n")
230 for line in extractedObjectsApp2:
233 Out.write("\t//Extracted objects for functions for App2\n")
234 for line in extractedFunctionsApp2:
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)
245 Out.write("\t//Global variables for each app\n")
246 for line in GlobalVariablesEachApp:
249 Out.write("\t//Methods\n")
250 for line in setLocationMode:
252 for line in subscribe:
256 for line in unschedule:
258 for line in sendNotificationToContacts:
262 for line in sendPush:
264 for line in schedule:
268 for line in getTemperatureScale:
270 for line in getSunriseAndSunset:
272 for line in httpPostJson:
274 for line in runEvery15Minutes:
276 for line in timeToday:
278 for line in sendNotification:
280 for line in canSchedule:
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")
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")
309 for line in eventSimulator: