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:
139 Out.write("@Field def stack = []\n")
141 Out.write("//clear init flag now we are done with it\n")
142 Out.write("init = false\n")
143 Out.write("//Application #1\n")
144 Out.write("class App1 {\n")
145 Out.write("\tdef reference\n")
146 Out.write("\tdef location\n")
147 Out.write("\t// A local variable added for conflict detection tool\n")
148 Out.write("\tdef location_mode\n")
149 Out.write("\tdef app\n")
151 Out.write("\t//Extracted objects for App1\n")
152 for line in extractedObjectsApp1:
155 Out.write("\t//Extracted objects for functions for App1\n")
156 for line in extractedFunctionsApp1:
159 Out.write("\tApp1(Object obj) {\n")
160 Out.write("\t\treference = obj\n")
161 Out.write("\t\tlocation = obj.locationObject\n")
162 Out.write("\t\tapp = obj.appObject\n")
163 for line in extractedObjectsConstructorApp1:
164 Out.write("\t\t"+line)
166 Out.write("\t//Global variables for each app\n")
167 for line in GlobalVariablesEachApp:
170 Out.write("\t//Methods\n")
171 for line in setLocationMode:
173 for line in subscribe:
177 for line in runDaily:
179 for line in unschedule:
181 for line in sendNotificationToContacts:
185 for line in sendPush:
187 for line in schedule:
191 for line in getTemperatureScale:
193 for line in getSunriseAndSunset:
195 for line in httpPostJson:
197 for line in runEvery15Minutes:
199 for line in timeToday:
201 for line in sendNotification:
203 for line in canSchedule:
205 for line in createAccessToken:
209 for line in parseJson:
211 for line in unsubscribe:
223 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
226 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
227 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
228 subscribe = open("Methods/"+"subscribe.groovy", "r")
229 runIn = open("Methods/"+"runIn.groovy", "r")
230 runDaily = open("Methods/"+"runDaily.groovy", "r")
231 unschedule = open("Methods/"+"unschedule.groovy", "r")
232 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
233 sendSms = open("Methods/"+"sendSms.groovy", "r")
234 sendPush = open("Methods/"+"sendPush.groovy", "r")
235 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
236 schedule = open("Methods/"+"schedule.groovy", "r")
237 now = open("Methods/"+"now.groovy", "r")
238 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
239 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
240 httpPostJson = open("Methods/"+"httpPostJson.groovy", "r")
241 runEvery15Minutes = open("Methods/"+"runEvery15Minutes.groovy", "r")
242 timeToday = open("Methods/"+"timeToday.groovy", "r")
243 sendNotification = open("Methods/"+"sendNotification.groovy", "r")
244 canSchedule = open("Methods/"+"canSchedule.groovy", "r")
245 createAccessToken = open("Methods/"+"createAccessToken.groovy", "r")
246 runOnce = open("Methods/"+"runOnce.groovy", "r")
247 parseJson = open("Methods/"+"parseJson.groovy", "r")
248 unsubscribe = open("Methods/"+"unsubscribe.groovy", "r")
249 App2 = open("Extractor/"+"App2/App2.groovy", "r")
250 extractedObjectsApp2 = open("Extractor/"+"App2/extractedObjectsApp2.groovy", "r")
251 extractedObjectsConstructorApp2 = open("Extractor/"+"App2/extractedObjectsConstructorApp2.groovy", "r")
252 extractedFunctionsApp2 = open("Extractor/"+"App2/extractedFunctionsApp2.groovy", "r")
254 Out.write("//Application #2\n")
255 Out.write("class App2 {\n")
256 Out.write("\tdef reference\n")
257 Out.write("\tdef location\n")
258 Out.write("\t// A local variable added for conflict detection tool\n")
259 Out.write("\tdef location_mode\n")
260 Out.write("\tdef app\n")
262 Out.write("\t//Extracted objects for App2\n")
263 for line in extractedObjectsApp2:
266 Out.write("\t//Extracted objects for functions for App2\n")
267 for line in extractedFunctionsApp2:
270 Out.write("\tApp2(Object obj) {\n")
271 Out.write("\t\treference = obj\n")
272 Out.write("\t\tlocation = obj.locationObject\n")
273 Out.write("\t\tapp = obj.appObject\n")
274 for line in extractedObjectsConstructorApp2:
275 Out.write("\t\t"+line)
277 Out.write("\t//Global variables for each app\n")
278 for line in GlobalVariablesEachApp:
281 Out.write("\t//Methods\n")
282 for line in setLocationMode:
284 for line in subscribe:
288 for line in runDaily:
290 for line in unschedule:
292 for line in sendNotificationToContacts:
296 for line in sendPush:
298 for line in schedule:
302 for line in getTemperatureScale:
304 for line in getSunriseAndSunset:
306 for line in httpPostJson:
308 for line in runEvery15Minutes:
310 for line in timeToday:
312 for line in sendNotification:
314 for line in canSchedule:
316 for line in createAccessToken:
320 for line in parseJson:
322 for line in unsubscribe:
333 Out.write("@Field def app1\n")
334 Out.write("@Field def app2\n")
335 Out.write("//def initOrder = Verify.getBoolean()\n")
336 Out.write("//if (initOrder) {\n")
337 Out.write("\tapp1 = new App1(this)\n")
338 Out.write("\tapp2 = new App2(this)\n")
339 Out.write("//} else {\n")
340 Out.write("\t//app2 = new App2(this)\n")
341 Out.write("\t//app1 = new App1(this)\n")
343 Out.write("//def installOrder = Verify.getBoolean()\n")
344 Out.write("//if (installOrder) {\n")
345 Out.write("\tapp1.installed()\n")
346 Out.write("\tapp2.installed()\n")
347 Out.write("//} else {\n")
348 Out.write("\t//app2.installed()\n")
349 Out.write("\t//app1.installed()\n")
351 for line in eventSimulator: