Deleting files and completing event generation.
[smartthings-infrastructure.git] / Extractor / ExtractorScript.py
1 import os
2 readyToReturn = 0
3 ToReturn = ""
4 eventMap = []
5
6 def GetToken(f):
7         global readyToReturn
8         global ToReturn
9         Skip = ['\n', '\t', ' ']
10         Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
11         S = ""
12         if (readyToReturn):
13                 readyToReturn = 0
14                 return ToReturn
15         ToReturn = ""
16         c = f.read(1)
17         while(True):
18                 if (c in Special):
19                         if (S != ""):
20                                 readyToReturn = 1
21                                 ToReturn = c
22                                 return S
23                         else:
24                                 return c
25                 elif (c in Skip):
26                         if (S != ""):
27                                 return S        
28                         else:
29                                 c = f.read(1)
30                                 continue
31                 S += c
32                 c = f.read(1)
33                 if not c:
34                         return "EOF"
35
36 def ExtractFunctions(F, appName):
37         global eventMap
38         Temp = GetToken(F)
39         while (Temp != "EOF"):
40                 if (Temp == "def" or Temp == "private"):
41                         Temp = GetToken(F)
42                         NameofFunc = Temp
43                         if (GetToken(F) != "="): #We have a function to create object for
44                                 if (appName == "App1"):
45                                         extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")    
46                                         extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
47                                         extractedFunctionsApp1.write("%s\n" % NameofFunc)
48                                 else:
49                                         extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")    
50                                         extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
51                                         extractedFunctionsApp2.write("%s\n" % NameofFunc)
52
53                 if (Temp == "subscribe"):
54                         counter = 0
55                         while (counter < 5 and Temp != "\""):
56                                 Temp = GetToken(F)
57                                 counter = counter + 1
58                         Temp = GetToken(F)
59                         #If counter >= 5 that means it is not found, so it must be appTouch
60                         if (counter >= 5):
61                                 Temp = "Touched"
62                         eventMap.append(Temp)
63                 Temp = GetToken(F)
64                 
65 def ExtractEvents(extractedEvents):
66         global eventMap
67         extractedEvents.write("Random random = new Random(42)\n")
68         extractedEvents.write("counter = 1000\n")
69         extractedEvents.write("while(counter > 0) {\n")
70         extractedEvents.write("\tdef eventNumber = random.nextInt(%d)\n" % (len(eventMap) - 1))
71         extractedEvents.write("\tswitch(eventNumber) {\n")
72         eventCounter = 0;
73         for i in range(len(eventMap)):
74                 extractedEvents.write("\t\tcase %d:\n" % eventCounter)
75                 if eventMap[i] == "lock":
76                         event = open("eventSimulator/lockEvent.groovy", "r")
77                         for line in event:
78                                 extractedEvents.write(line)
79                         event.close()
80                 elif eventMap[i] == "unlock":
81                         event = open("eventSimulator/unlockEvent.groovy", "r")
82                         for line in event:
83                                 extractedEvents.write(line)
84                         event.close()
85                 elif eventMap[i] == "contact.open":
86                         event = open("eventSimulator/contactOpenEvent.groovy", "r")
87                         for line in event:
88                                 extractedEvents.write(line)
89                         event.close()
90                 elif eventMap[i] == "contact.closed":
91                         event = open("eventSimulator/contactClosedEvent.groovy", "r")
92                         for line in event:
93                                 extractedEvents.write(line)
94                         event.close()
95                 elif eventMap[i] == "switch.on":
96                         event = open("eventSimulator/switchOnEvent.groovy", "r")
97                         for line in event:
98                                 extractedEvents.write(line)
99                         event.close()
100                 elif eventMap[i] == "switch.off":
101                         event = open("eventSimulator/switchOffEvent.groovy", "r")
102                         for line in event:
103                                 extractedEvents.write(line)
104                         event.close()
105                 elif eventMap[i] == "nfcTouch":
106                         event = open("eventSimulator/nfcTouchEvent.groovy", "r")
107                         for line in event:
108                                 extractedEvents.write(line)
109                         event.close()
110                 elif eventMap[i] == "Touched":
111                         event = open("eventSimulator/appTouchEvent.groovy", "r")
112                         for line in event:
113                                 extractedEvents.write(line)
114                         event.close()
115                 elif eventMap[i] == "button":
116                         #Write two events subsequently
117                         event = open("eventSimulator/buttonPushedEvent.groovy", "r")
118                         for line in event:
119                                 extractedEvents.write(line)
120                         event.close()
121                         extractedEvents.write("\t\t\tbreak\n")
122                         eventCounter = eventCounter + 1
123                         extractedEvents.write("\t\tcase %d:\n" % eventCounter)
124                         event = open("eventSimulator/buttonHeldEvent.groovy", "r")
125                         for line in event:
126                                 extractedEvents.write(line)
127                         event.close()
128                 elif eventMap[i] == "presence":
129                         #Write two events subsequently
130                         event = open("eventSimulator/presencePresentEvent.groovy", "r")
131                         for line in event:
132                                 extractedEvents.write(line)
133                         event.close()
134                         extractedEvents.write("\t\t\tbreak\n")
135                         eventCounter = eventCounter + 1
136                         extractedEvents.write("\t\tcase %d:\n" % eventCounter)
137                         event = open("eventSimulator/presenceLeftEvent.groovy", "r")
138                         for line in event:
139                                 extractedEvents.write(line)
140                         event.close()
141                 elif eventMap[i] == "doorState":
142                         #Write two events subsequently
143                         event = open("eventSimulator/doorOpenEvent.groovy", "r")
144                         for line in event:
145                                 extractedEvents.write(line)
146                         event.close()
147                         extractedEvents.write("\t\t\tbreak\n")
148                         eventCounter = eventCounter + 1
149                         extractedEvents.write("\t\tcase %d:\n" % eventCounter)
150                         event = open("eventSimulator/doorClosedEvent.groovy", "r")
151                         for line in event:
152                                 extractedEvents.write(line)
153                         event.close()
154                 eventCounter = eventCounter + 1
155
156                 ###TODO: Add more events later
157                 extractedEvents.write("\n\t\t\tbreak\n")
158         extractedEvents.write("\t}\n")
159         extractedEvents.write("\tcounter--\n")
160         extractedEvents.write("}\n")
161                 
162 #Extract objects to call functions from App1
163 F1 = open("Extractor/App1/App1.groovy", "r")
164 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
165 ExtractFunctions(F1, "App1")
166 F1.close()
167
168 #Extract objects to call functions from App2
169 F2 = open("Extractor/App2/App2.groovy", "r")
170 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
171 ExtractFunctions(F2, "App2")
172 F2.close()
173
174 #Prepare eventSimulator file while parsing the App1 and App2 files
175 extractedEvents = open("eventSimulator/eventSimulator.groovy", "w+")
176 ExtractEvents(extractedEvents)
177 extractedEvents.close()
178
179 #Save the extracted methods and app1 in a same file to extract information
180 extractorFile = open("Extractor/extractorFile.groovy", "w+")
181 Extractor = open("Extractor/Extractor.groovy", "r")
182 F1 = open("Extractor/App1/App1.groovy", "r")
183
184 extractorFile.write("////////////////////\n")
185 extractorFile.write("@Field App\n")
186 extractorFile.write("App = \"App1\"")
187 extractorFile.write("\n")
188 for line in Extractor:
189         extractorFile.write(line)
190 extractorFile.write("\n\n")
191 for line in F1:
192         extractorFile.write(line)
193 extractorFile.close()
194 Extractor.close()
195 F1.close()
196 #Run the file to extract the objects
197 os.system("groovy Extractor/extractorFile.groovy")
198
199
200 #Save the extracted methods and app2 in a same file to extract information
201 extractorFile = open("Extractor/extractorFile.groovy", "w+")
202 Extractor = open("Extractor/Extractor.groovy", "r")
203 F2 = open("Extractor/App2/App2.groovy", "r")
204
205 extractorFile.write("////////////////////\n")
206 extractorFile.write("@Field App\n")
207 extractorFile.write("App = \"App2\"")
208 extractorFile.write("\n")
209 for line in Extractor:
210         extractorFile.write(line)
211 extractorFile.write("\n\n")
212 for line in F2:
213         extractorFile.write(line)
214 #Run the file to extract the objects
215 extractorFile.close()
216 Extractor.close()
217 F2.close()
218 os.system("groovy Extractor/extractorFile.groovy")
219
220
221
222