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 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")
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")
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 RemainingDevices.RemainingDevices\n")
125 Out.write("import Event.Event\n")
126 Out.write("import Timer.SimulatedTimer\n")
128 Out.write("//JPF's Verify API\n")
129 Out.write("import gov.nasa.jpf.vm.Verify\n")
131 Out.write("//Global eventHandler\n")
132 for line in eventHandler:
135 Out.write("//GlobalVariables for both Apps\n")
136 Out.write("@Field def init = Verify.getBoolean()\n\n")
137 for line in GlobalVariablesBothApps:
140 Out.write("//clear init flag now we are done with it\n")
141 Out.write("init = false\n")
142 Out.write("//Application #1\n")
143 Out.write("class App1 {\n")
144 Out.write("\tdef reference\n")
145 Out.write("\tdef location\n")
146 Out.write("\t// A local variable added for conflict detection tool\n")
147 Out.write("\tdef location_mode\n")
148 Out.write("\tdef app\n")
150 Out.write("\t//Extracted objects for App1\n")
151 for line in extractedObjectsApp1:
154 Out.write("\t//Extracted objects for functions for App1\n")
155 for line in extractedFunctionsApp1:
158 Out.write("\tApp1(Object obj) {\n")
159 Out.write("\t\treference = obj\n")
160 Out.write("\t\tlocation = obj.locationObject\n")
161 Out.write("\t\tapp = obj.appObject\n")
162 for line in extractedObjectsConstructorApp1:
163 Out.write("\t\t"+line)
165 Out.write("\t//Global variables for each app\n")
166 for line in GlobalVariablesEachApp:
169 Out.write("\t//Methods\n")
170 for line in setLocationMode:
172 for line in subscribe:
176 for line in runDaily:
178 for line in unschedule:
180 for line in sendNotificationToContacts:
184 for line in sendPush:
186 for line in schedule:
190 for line in getTemperatureScale:
192 for line in getSunriseAndSunset:
194 for line in httpPostJson:
196 for line in runEvery15Minutes:
198 for line in timeToday:
200 for line in sendNotification:
202 for line in canSchedule:
204 for line in createAccessToken:
208 for line in parseJson:
210 for line in unsubscribe:
222 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
225 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
226 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
227 subscribe = open("Methods/"+"subscribe.groovy", "r")
228 runIn = open("Methods/"+"runIn.groovy", "r")
229 runDaily = open("Methods/"+"runDaily.groovy", "r")
230 unschedule = open("Methods/"+"unschedule.groovy", "r")
231 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
232 sendSms = open("Methods/"+"sendSms.groovy", "r")
233 sendPush = open("Methods/"+"sendPush.groovy", "r")
234 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
235 schedule = open("Methods/"+"schedule.groovy", "r")
236 now = open("Methods/"+"now.groovy", "r")
237 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
238 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
239 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
240 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
241 timeToday = open("Methods/"+"timeToday.groovy", "r")
242 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
243 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
244 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
245 runOnce = open("Methods/"+"runOnce.groovy", "r")
246 parseJson = open("Methods/"+"parseJson.groovy", "r")
247 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
248 App2 = open("Extractor/"+"App2/App2.groovy", "r")
249 extractedObjectsApp2 = open("Extractor/"+"App2/extractedObjectsApp2.groovy", "r")
250 extractedObjectsConstructorApp2 = open("Extractor/"+"App2/extractedObjectsConstructorApp2.groovy", "r")
251 extractedFunctionsApp2 = open("Extractor/"+"App2/extractedFunctionsApp2.groovy", "r")
253 Out.write("//Application #2\n")
254 Out.write("class App2 {\n")
255 Out.write("\tdef reference\n")
256 Out.write("\tdef location\n")
257 Out.write("\t// A local variable added for conflict detection tool\n")
258 Out.write("\tdef location_mode\n")
259 Out.write("\tdef app\n")
261 Out.write("\t//Extracted objects for App2\n")
262 for line in extractedObjectsApp2:
265 Out.write("\t//Extracted objects for functions for App2\n")
266 for line in extractedFunctionsApp2:
269 Out.write("\tApp2(Object obj) {\n")
270 Out.write("\t\treference = obj\n")
271 Out.write("\t\tlocation = obj.locationObject\n")
272 Out.write("\t\tapp = obj.appObject\n")
273 for line in extractedObjectsConstructorApp2:
274 Out.write("\t\t"+line)
276 Out.write("\t//Global variables for each app\n")
277 for line in GlobalVariablesEachApp:
280 Out.write("\t//Methods\n")
281 for line in setLocationMode:
283 for line in subscribe:
287 for line in runDaily:
289 for line in unschedule:
291 for line in sendNotificationToContacts:
295 for line in sendPush:
297 for line in schedule:
301 for line in getTemperatureScale:
303 for line in getSunriseAndSunset:
305 for line in httpPostJson:
307 for line in runEvery15Minutes:
309 for line in timeToday:
311 for line in sendNotification:
313 for line in canSchedule:
315 for line in createAccessToken:
319 for line in parseJson:
321 for line in unsubscribe:
332 Out.write("@Field def app1\n")
333 Out.write("@Field def app2\n")
334 Out.write("//def initOrder = Verify.getBoolean()\n")
335 Out.write("//if (initOrder) {\n")
336 Out.write("\tapp1 = new App1(this)\n")
337 Out.write("\tapp2 = new App2(this)\n")
338 Out.write("//} else {\n")
339 Out.write("\t//app2 = new App2(this)\n")
340 Out.write("\t//app1 = new App1(this)\n")
342 Out.write("//def installOrder = Verify.getBoolean()\n")
343 Out.write("//if (installOrder) {\n")
344 Out.write("\tapp1.installed()\n")
345 Out.write("\tapp2.installed()\n")
346 Out.write("//} else {\n")
347 Out.write("\t//app2.installed()\n")
348 Out.write("\t//app1.installed()\n")
350 for line in eventSimulator: