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 now = open("Methods/"+"now.groovy", "r")
25 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
26 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
27 App1 = open("Extractor/"+"App1/App1.groovy", "r")
28 extractedObjectsApp1 = open("Extractor/"+"App1/extractedObjectsApp1.groovy", "r")
29 extractedObjectsConstructorApp1 = open("Extractor/"+"App1/extractedObjectsConstructorApp1.groovy", "r")
30 extractedFunctionsApp1 = open("Extractor/"+"App1/extractedFunctionsApp1.groovy", "r")
31
32
33
34
35 Out.write("//Infrastructure for SmartThings Application\n")
36 Out.write("//Importing Libraries\n")
37 Out.write("import groovy.transform.Field\n")
38 Out.write("\n")
39 Out.write("//Importing Classes\n")
40 Out.write("import ContactSensor.ContactSensor\n")
41 Out.write("import ContactSensor.ContactSensors\n")
42 Out.write("import DoorControl.DoorControl\n")
43 Out.write("import DoorControl.DoorControls\n")
44 Out.write("import Lock.Lock\n")
45 Out.write("import Lock.Locks\n")
46 Out.write("import Thermostat.Thermostat\n")
47 Out.write("import Thermostat.Thermostats\n")
48 Out.write("import Switch.Switch\n")
49 Out.write("import Switch.Switches\n")
50 Out.write("import PresenceSensor.PresenceSensor\n")
51 Out.write("import PresenceSensor.PresenceSensors\n")
52 Out.write("import Logger.Logger\n")
53 Out.write("import Location.LocationVar\n")
54 Out.write("import Location.Phrase\n")
55 Out.write("import appTouch.Touched\n")
56 Out.write("import NfcTouch.NfcTouch\n")
57 Out.write("import AeonKeyFob.AeonKeyFob\n")
58 Out.write("import AeonKeyFob.AeonKeyFobs\n")
59 Out.write("import MusicPlayer.MusicPlayer\n")
60 Out.write("import MusicPlayer.MusicPlayers\n")
61 Out.write("import MotionSensor.MotionSensor\n")
62 Out.write("import MotionSensor.MotionSensors\n")
63 Out.write("import ImageCapture.ImageCapture\n")
64 Out.write("import ImageCapture.ImageCaptures\n")
65 Out.write("import SmokeDetector.SmokeDetector\n")
66 Out.write("import SmokeDetector.SmokeDetectors\n")
67 Out.write("import Alarm.Alarm\n")
68 Out.write("import Alarm.Alarms\n")
69 Out.write("import SpeechSynthesis.SpeechSynthesis\n")
70 Out.write("import SpeechSynthesis.SpeechSynthesises\n")
71 Out.write("import AccelerationSensor.AccelerationSensor\n")
72 Out.write("import AccelerationSensor.AccelerationSensors\n")
73 Out.write("import Battery.Battery\n")
74 Out.write("import Battery.Batteries\n")
75 Out.write("import BeaconSensor.BeaconSensor\n")
76 Out.write("import BeaconSensor.BeaconSensors\n")
77 Out.write("import CarbonMonoxideDetector.CarbonMonoxideDetector\n")
78 Out.write("import CarbonMonoxideDetector.CarbonMonoxideDetectors\n")
79 Out.write("import ColorControl.ColorControl\n")
80 Out.write("import ColorControl.ColorControls\n")
81 Out.write("import EnergyMeter.EnergyMeter\n")
82 Out.write("import EnergyMeter.EnergyMeters\n")
83 Out.write("import Event.Event\n")
84 Out.write("import Timer.SimulatedTimer\n")
85 Out.write("\n")
86 Out.write("//JPF's Verify API\n")
87 Out.write("import gov.nasa.jpf.vm.Verify\n")
88 Out.write("\n")
89 Out.write("//Global eventHandler\n")
90 for line in eventHandler:
91         Out.write(line)
92 Out.write("\n")
93 Out.write("//GlobalVariables for both Apps\n")
94 for line in GlobalVariablesBothApps:
95         Out.write(line)
96 Out.write("\n")
97 Out.write("//Application #1\n")
98 Out.write("class App1 {\n")
99 Out.write("\tdef reference\n")
100 Out.write("\tdef location\n")
101 Out.write("\tdef app\n")
102 Out.write("\n")
103 Out.write("\t//Extracted objects for App1\n")
104 for line in extractedObjectsApp1:
105         Out.write("\t"+line)
106 Out.write("\n")
107 Out.write("\t//Extracted objects for functions for App1\n")
108 for line in extractedFunctionsApp1:
109         Out.write("\t"+line)
110 Out.write("\n")
111 Out.write("\tApp1(Object obj) {\n")
112 Out.write("\t\treference = obj\n")
113 Out.write("\t\tlocation = obj.locationObject\n")
114 Out.write("\t\tapp = obj.appObject\n")
115 for line in extractedObjectsConstructorApp1:
116         Out.write("\t\t"+line)
117 Out.write("\t}\n")
118 Out.write("\t//Global variables for each app\n")
119 for line in GlobalVariablesEachApp:
120         Out.write("\t"+line)
121 Out.write("\n")
122 Out.write("\t//Methods\n")
123 for line in setLocationMode:
124         Out.write("\t"+line)
125 for line in subscribe:
126         Out.write("\t"+line)
127 for line in runIn:
128         Out.write("\t"+line)
129 for line in unschedule:
130         Out.write("\t"+line)
131 for line in sendNotificationToContacts:
132         Out.write("\t"+line)
133 for line in sendSms:
134         Out.write("\t"+line)
135 for line in sendPush:
136         Out.write("\t"+line)
137 for line in schedule:
138         Out.write("\t"+line)
139 for line in now:
140         Out.write("\t"+line)
141 for line in getTemperatureScale:
142         Out.write("\t"+line)
143 for line in getSunriseAndSunset:
144         Out.write("\t"+line)
145 Out.write("\n")
146 Start = 0
147 for line in App1:
148         if ("def " in line):
149                 Start = 1
150         if (Start):
151                 Out.write("\t"+line)
152 Out.write("}\n")
153 Out.write("\n")
154 Out.write("\n")
155 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
156
157 #For App2
158 GlobalVariablesEachApp = open("GlobalVariables/"+"GlobalVariablesEachApp.groovy", "r")
159 setLocationMode = open("Methods/"+"setLocationMode.groovy", "r")
160 subscribe = open("Methods/"+"subscribe.groovy", "r")
161 runIn = open("Methods/"+"runIn.groovy", "r")
162 unschedule = open("Methods/"+"unschedule.groovy", "r")
163 sendNotificationToContacts = open("Methods/"+"sendNotificationToContacts.groovy", "r")
164 sendSms = open("Methods/"+"sendSms.groovy", "r")
165 eventHandler = open("Methods/"+"eventHandler.groovy", "r")
166 schedule = open("Methods/"+"schedule.groovy", "r")
167 now = open("Methods/"+"now.groovy", "r")
168 getTemperatureScale = open("Methods/"+"getTemperatureScale.groovy", "r")
169 getSunriseAndSunset = open("Methods/"+"getSunriseAndSunset.groovy", "r")
170 App2 = open("Extractor/"+"App2/App2.groovy", "r")
171 extractedObjectsApp2 = open("Extractor/"+"App2/extractedObjectsApp2.groovy", "r")
172 extractedObjectsConstructorApp2 = open("Extractor/"+"App2/extractedObjectsConstructorApp2.groovy", "r")
173 extractedFunctionsApp2 = open("Extractor/"+"App2/extractedFunctionsApp2.groovy", "r")
174
175 Out.write("//Application #2\n")
176 Out.write("class App2 {\n")
177 Out.write("\tdef reference\n")
178 Out.write("\tdef location\n")
179 Out.write("\tdef app\n")
180 Out.write("\n")
181 Out.write("\t//Extracted objects for App2\n")
182 for line in extractedObjectsApp2:
183         Out.write("\t"+line)
184 Out.write("\n")
185 Out.write("\t//Extracted objects for functions for App2\n")
186 for line in extractedFunctionsApp2:
187         Out.write("\t"+line)
188 Out.write("\n")
189 Out.write("\tApp2(Object obj) {\n")
190 Out.write("\t\treference = obj\n")
191 Out.write("\t\tlocation = obj.locationObject\n")
192 Out.write("\t\tapp = obj.appObject\n")
193 for line in extractedObjectsConstructorApp2:
194         Out.write("\t\t"+line)
195 Out.write("\t}\n")
196 Out.write("\t//Global variables for each app\n")
197 for line in GlobalVariablesEachApp:
198         Out.write("\t"+line)
199 Out.write("\n")
200 Out.write("\t//Methods\n")
201 for line in setLocationMode:
202         Out.write("\t"+line)
203 for line in subscribe:
204         Out.write("\t"+line)
205 for line in runIn:
206         Out.write("\t"+line)
207 for line in unschedule:
208         Out.write("\t"+line)
209 for line in sendNotificationToContacts:
210         Out.write("\t"+line)
211 for line in sendSms:
212         Out.write("\t"+line)
213 for line in sendPush:
214         Out.write("\t"+line)
215 for line in schedule:
216         Out.write("\t"+line)
217 for line in now:
218         Out.write("\t"+line)
219 for line in getTemperatureScale:
220         Out.write("\t"+line)
221 for line in getSunriseAndSunset:
222         Out.write("\t"+line)
223 Out.write("\n")
224 Start = 0
225 for line in App2:
226         if ("def " in line):
227                 Start = 1
228         if (Start):
229                 Out.write("\t"+line)
230 Out.write("}\n")
231 Out.write("\n")
232 Out.write("@Field def app1 = new App1(this)\n")
233 Out.write("@Field def app2 = new App2(this)\n")
234 Out.write("app1.installed()\n")
235 Out.write("app2.installed()\n")
236 Out.write("\n")
237 for line in eventSimulator:
238         Out.write(line)
239 Out.close()
240
241
242
243