Adding cases for app and location.
[smartthings-infrastructure.git] / Extractor / ExtractorScript.py
index 51f753e98fe00dfe97cc30af9ffbcc15656c991e..c96daa799d2d8358fd3a546a3647b0b8d68c06c1 100644 (file)
@@ -3,7 +3,9 @@ readyToReturn = 0
 ToReturn = ""
 eventList = []
 eventVarMap = {}
+eventVarCounterMap = {}
 capabilityMap = {}
+capabilityList = []
 app1Capabilities = []
 app2Capabilities = []
 app1Subscribe = False
@@ -62,13 +64,14 @@ def ExtractFunctions(F, appName):
                
                #Check input capability
                if (Temp == "input"):
-                       Temp = GetToken(F) #Get '"'
+                       while Temp != "\"":
+                               Temp = GetToken(F)
                        variable = GetToken(F)
                        Temp = GetToken(F) #Get '"'
                        Temp = GetToken(F) #Get ','
-                       Temp = GetToken(F) #Get '"'
-                       Temp = GetToken(F) #Get capability...
-                       capability = Temp
+                       while Temp != "\"":
+                               Temp = GetToken(F)
+                       capability = GetToken(F)
                        capabilityMap[variable] = capability
                
                #Check subscribed events
@@ -85,10 +88,25 @@ def ExtractFunctions(F, appName):
                                Temp = GetToken(F)
                        if Temp == "\"":
                                Temp = GetToken(F)
-                       if Temp not in eventList:
+                       #print "DEBUG: %s" % variable
+                       #print capabilityMap
+                       #print eventList
+                       #if variable == "app" or variable == "location":
+                               
+                       if Temp == "app" or Temp == "location":
+                               if Temp not in eventList:
+                                       eventList.append(Temp)
+                       elif variable in capabilityMap.keys() and capabilityMap[variable] not in capabilityList:
+                               # We do not repeat the same capability twice
+                               capability = capabilityMap[variable]
+                               capabilityList.append(capability)
                                eventList.append(Temp)
-                               eventVarMap[Temp] = variable
-
+                               if Temp in eventVarMap.keys():
+                                       listOfEvents = eventVarMap[Temp]
+                                       listOfEvents.append(variable)
+                               else:
+                                       eventVarMap[Temp] = [variable]
+                                       
                #Check and analyze capabilities for physical interaction
                AnalyzeCapabilities(Temp, appName, F)
 
@@ -152,6 +170,7 @@ def ExtractEvents(extractedEvents):
        global eventList
        global eventVarMap
        global capabilityMap
+       global eventVarCounterMap
        extractedEvents.write("while(true) {\n")
        extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventList) - 1))
        extractedEvents.write("\tswitch(eventNumber) {\n")
@@ -227,9 +246,18 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "presence":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        #Write three events subsequently
-                       extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
+                       if capability == "capability.presenceSensor":
+                               extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
+                       elif capability == "capability.beacon":
+                               extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
                        extractedEvents.write("\t\t\tif (event == 0) {\n")
                        if capability == "capability.presenceSensor":
                                event = open("eventSimulator/presencePresentEvent.groovy", "r")
@@ -246,11 +274,12 @@ def ExtractEvents(extractedEvents):
                        for line in event:
                                extractedEvents.write("\t\t" + line)
                        event.close()
-                       extractedEvents.write("\t\t\t} else {\n")
-                       event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
-                       for line in event:
-                               extractedEvents.write("\t\t" + line)
-                       event.close()
+                       if capability == "capability.presenceSensor":
+                               extractedEvents.write("\t\t\t} else {\n")
+                               event = open("eventSimulator/presencePresencePresentEvent.groovy", "r")
+                               for line in event:
+                                       extractedEvents.write("\t\t" + line)
+                               event.close()
                        extractedEvents.write("\t\t\t}\n")
                elif eventList[i] == "doorState":
                        #Write two events subsequently
@@ -302,7 +331,13 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "carbonMonoxide":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        #Write three events subsequently
                        extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n")
                        extractedEvents.write("\t\t\tif (event == 0) {\n")                      
@@ -333,7 +368,13 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "battery":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        if capability == "capability.smokeDetector":
                                event = open("eventSimulator/smokeDetectorBatteryEvent.groovy", "r")
                        elif capability == "capability.battery":
@@ -431,7 +472,13 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "switch":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        #Write two events subsequently
                        extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
                        extractedEvents.write("\t\t\tif (event == 0) {\n")
@@ -574,7 +621,13 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "contact":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        #Write two events subsequently
                        extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n")
                        extractedEvents.write("\t\t\tif (event == 0) {\n")
@@ -616,7 +669,13 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "level":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        if capability == "capability.musicPlayer":
                                event = open("eventSimulator/musicPlayerLevelEvent.groovy", "r")
                        elif capability == "capability.switchLevel":
@@ -651,7 +710,13 @@ def ExtractEvents(extractedEvents):
                elif eventList[i] == "temperature":
                        #Check which capability
                        variable = eventVarMap[eventList[i]]
-                       capability = capabilityMap[variable]
+                       if eventList[i] not in eventVarCounterMap.keys():
+                               eventVarCounterMap[eventList[i]] = 1
+                               eventVarCount = 0
+                       else:
+                               eventVarCount = eventVarCounterMap[eventList[i]]
+                               eventVarCounterMap[eventList[i]] = eventVarCount + 1
+                       capability = capabilityMap[variable[eventVarCount]]
                        if capability == "capability.thermostat":
                                event = open("eventSimulator/temperatureEvent.groovy", "r")
                        elif capability == "capability.temperatureMeasurement":