X-Git-Url: http://plrg.eecs.uci.edu/git/?p=smartthings-infrastructure.git;a=blobdiff_plain;f=Extractor%2FExtractorScript.py;h=9e0f1c180218f8258ba8fccd439865af67cad752;hp=65c5cd75c40e302c044d005d1d7cc24d49af58ad;hb=b9b0b3d8da7fd3be5b79542bf0073de419743c41;hpb=60bbb288c0ac392ad729f6bf76261302c91d4040 diff --git a/Extractor/ExtractorScript.py b/Extractor/ExtractorScript.py index 65c5cd7..9e0f1c1 100644 --- a/Extractor/ExtractorScript.py +++ b/Extractor/ExtractorScript.py @@ -1,7 +1,11 @@ import os readyToReturn = 0 ToReturn = "" -eventMap = [] +eventList = [] +eventVarMap = {} +eventVarCounterMap = {} +capabilityMap = {} +capabilityList = [] app1Capabilities = [] app2Capabilities = [] app1Subscribe = False @@ -38,15 +42,17 @@ def GetToken(f): return "EOF" def ExtractFunctions(F, appName): - global eventMap + global eventList global app1Subscribe global app2Subscribe Temp = GetToken(F) while (Temp != "EOF"): if (Temp == "def" or Temp == "private"): Temp = GetToken(F) + if (Temp == "def" or Temp == "private"): + Temp = GetToken(F) NameofFunc = Temp - if (GetToken(F) != "="): #We have a function to create object for + if (GetToken(F) == "("): #We have a function to create object for if (appName == "App1"): extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n") extractedFunctionsApp1.write("def %s = this.&" % NameofFunc) @@ -56,21 +62,54 @@ def ExtractFunctions(F, appName): extractedFunctionsApp2.write("def %s = this.&" % NameofFunc) extractedFunctionsApp2.write("%s\n" % NameofFunc) + #Check input capability + if (Temp == "input"): + while Temp != "\"": + Temp = GetToken(F) + variable = GetToken(F) + Temp = GetToken(F) #Get '"' + Temp = GetToken(F) #Get ',' + while Temp != "\"": + Temp = GetToken(F) + capability = GetToken(F) + capabilityMap[variable] = capability + #Check subscribed events if (Temp == "subscribe"): if (appName == "App1"): app1Subscribe = True else: app2Subscribe = True + Temp = GetToken(F) + if (Temp == "("): + Temp = GetToken(F) + variable = Temp while (Temp != "\"" and Temp != "app" and Temp != "location"): Temp = GetToken(F) if Temp == "\"": - Temp = GetToken(F) - if Temp not in eventMap: - eventMap.append(Temp) + Temp = GetToken(F) + + print "DEBUG: %s - %s" % (variable, Temp) + print capabilityMap + if Temp == "app" or Temp == "location": + if Temp not in eventList: + eventList.append(Temp) + elif Temp not in eventList or (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) + if Temp in eventVarMap.keys(): + listOfEvents = eventVarMap[Temp] + listOfEvents.append(variable) + else: + eventVarMap[Temp] = [variable] + #print "DEBUG: %s - %s" % (variable, Temp) + #print capabilityMap + #print eventList #Check and analyze capabilities for physical interaction - AnalyzeCapabilities(Temp, appName) + AnalyzeCapabilities(Temp, appName, F) Temp = GetToken(F) @@ -78,15 +117,15 @@ def ExtractFunctions(F, appName): AnalyzePhysicalInteraction(app1Capabilities, app2Capabilities) AnalyzePhysicalInteraction(app2Capabilities, app1Capabilities) - - -def AnalyzeCapabilities(Temp, appName): +def AnalyzeCapabilities(Temp, appName, F): #Illuminance related if (Temp == "capability.switch" or Temp == "capability.switchLevel" or Temp == "capability.illuminanceMeasurement" or + Temp == "capability.colorControl" or #Motion related Temp == "capability.motionSensor" or + Temp == "capability.accelerationSensor" or #Water related Temp == "capability.valve" or Temp == "capability.waterSensor" or @@ -99,14 +138,24 @@ def AnalyzeCapabilities(Temp, appName): app1Capabilities.append(Temp) else: app2Capabilities.append(Temp) + if (Temp == "capability"): + Temp = GetToken(F) #Get '"' + Temp = GetToken(F) #Get 'Music' + Temp = Temp + GetToken(F) #Get 'Player' + if (Temp == "MusicPlayer"): + if (appName == "App1"): + app1Capabilities.append("capability.musicPlayer") + else: + app2Capabilities.append("capability.musicPlayer") def AnalyzePhysicalInteraction(app1Capab, app2Capab): #Light if ("capability.illuminanceMeasurement" in app1Capab) and ("capability.switch" in app2Capab or - "capability.switchLevel" in app2Capab): + "capability.switchLevel" in app2Capab or "capability.colorControl" in app2Capab): print ("\nWARNING: Potential PHYSICAL CONFLICT (light) detected between App1 and App2!\n") #Motion - if ("capability.motionSensor" in app1Capab): + # TODO: Technically this is not entirely precise since we need to be able to detect that the other app creates motion + if ("capability.motionSensor" in app1Capab) or ("capability.accelerationSensor" in app1Capab): print ("\nWARNING: Potential PHYSICAL CONFLICT (motion) detected between App1 and App2!\n") #Water if ("capability.waterSensor" in app1Capab) and ("capability.valve" in app2Capab or @@ -118,43 +167,69 @@ def AnalyzePhysicalInteraction(app1Capab, app2Capab): print ("\nWARNING: Potential PHYSICAL CONFLICT (sound) detected between App1 and App2!\n") def ExtractEvents(extractedEvents): - global eventMap + global eventList + global eventVarMap + global capabilityMap + global eventVarCounterMap extractedEvents.write("while(true) {\n") - extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventMap) - 1)) + extractedEvents.write("\tdef eventNumber = Verify.getInt(0,%d)\n" % (len(eventList) - 1)) extractedEvents.write("\tswitch(eventNumber) {\n") - for i in range(len(eventMap)): + for i in range(len(eventList)): extractedEvents.write("\t\tcase %d:\n" % i) - if eventMap[i] == "lock": - event = open("eventSimulator/lockEvent.groovy", "r") + if eventList[i] == "lock": + #Write two events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/lockLockedEvent.groovy", "r") for line in event: - extractedEvents.write(line) + extractedEvents.write("\t\t" + line) event.close() - elif eventMap[i] == "unlock": + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/lockUnlockedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "unlock": event = open("eventSimulator/unlockEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventMap[i] == "contact.open": + elif eventList[i] == "contact.open": event = open("eventSimulator/contactOpenEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventMap[i] == "contact.closed": + elif eventList[i] == "contact.closed": event = open("eventSimulator/contactClosedEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventMap[i] == "nfcTouch": + elif eventList[i] == "tamper.tampered": + #Write two events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/tamperTamperedOpenEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/tamperTamperedClosedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "nfcTouch": event = open("eventSimulator/nfcTouchEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventMap[i] == "app": #Case for Touched event + elif eventList[i] == "app": #Case for Touched event event = open("eventSimulator/appTouchEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventMap[i] == "button": + elif eventList[i] == "button": #Write two events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") @@ -168,21 +243,69 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "presence": + elif eventList[i] == "water": #Write two events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") - event = open("eventSimulator/presencePresentEvent.groovy", "r") + event = open("eventSimulator/waterDryEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t} else {\n") - event = open("eventSimulator/presenceLeftEvent.groovy", "r") + event = open("eventSimulator/waterWetEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "doorState": + elif eventList[i] == "water.dry": + event = open("eventSimulator/waterDefaultDryEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "water.wet": + event = open("eventSimulator/waterDefaultWetEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "presence": + #Check which capability + variable = eventVarMap[eventList[i]] + 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 + 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") + elif capability == "capability.beacon": + event = open("eventSimulator/beaconPresentEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 1) {\n") + if capability == "capability.presenceSensor": + event = open("eventSimulator/presenceLeftEvent.groovy", "r") + elif capability == "capability.beacon": + event = open("eventSimulator/beaconLeftEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + + extractedEvents.write("\t\t\t}\n") + event.close() + elif eventList[i] == "presence.present": #Case for Touched event + event = open("eventSimulator/presencePresencePresentEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "doorState": #Write two events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") @@ -196,7 +319,7 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "motion": + elif eventList[i] == "motion": #Write two events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") @@ -210,7 +333,17 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "smoke": + elif eventList[i] == "motion.active": + event = open("eventSimulator/motionDefaultActiveEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "motion.inactive": + event = open("eventSimulator/motionDefaultInactiveEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "smoke": #Write three events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") @@ -229,31 +362,100 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "carbonMonoxide": + elif eventList[i] == "smoke.clear": + event = open("eventSimulator/smokeDefaultClearEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "smoke.detected": + event = open("eventSimulator/smokeDefaultDetectedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "smoke.tested": + event = open("eventSimulator/smokeDefaultTestedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "carbonMonoxide": + #Check which capability + variable = eventVarMap[eventList[i]] + 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") - event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r") + extractedEvents.write("\t\t\tif (event == 0) {\n") + if capability == "capability.smokeDetector": + event = open("eventSimulator/smokeCarbonMonoxideClearEvent.groovy", "r") + elif capability == "capability.carbonMonoxideDetector": + event = open("eventSimulator/carbonMonoxideClearEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t} else if (event == 1) {\n") - event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r") + if capability == "capability.smokeDetector": + event = open("eventSimulator/smokeCarbonMonoxideDetectedEvent.groovy", "r") + elif capability == "capability.carbonMonoxideDetector": + event = open("eventSimulator/carbonMonoxideDetectedEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t} else {\n") - event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r") + if capability == "capability.smokeDetector": + event = open("eventSimulator/smokeCarbonMonoxideTestedEvent.groovy", "r") + elif capability == "capability.carbonMonoxideDetector": + event = open("eventSimulator/carbonMonoxideTestedEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "battery": - event = open("eventSimulator/batteryChargeEvent.groovy", "r") + elif eventList[i] == "carbonMonoxide.clear": + if capability == "capability.smokeDetector": + event = open("eventSimulator/smokeCarbonMonoxideDefaultClearEvent.groovy", "r") + elif capability == "capability.carbonMonoxideDetector": + event = open("eventSimulator/carbonMonoxideDefaultClearEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "carbonMonoxide.detected": + if capability == "capability.smokeDetector": + event = open("eventSimulator/smokeCarbonMonoxideDefaultDetectedEvent.groovy", "r") + elif capability == "capability.carbonMonoxideDetector": + event = open("eventSimulator/carbonMonoxideDefaultDetectedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "carbonMonoxide.tested": + if capability == "capability.smokeDetector": + event = open("eventSimulator/smokeCarbonMonoxideDefaultTestedEvent.groovy", "r") + elif capability == "capability.carbonMonoxideDetector": + event = open("eventSimulator/carbonMonoxideDefaultTestedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "battery": + #Check which capability + variable = eventVarMap[eventList[i]] + 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": + event = open("eventSimulator/batteryBatteryEvent.groovy", "r") for line in event: extractedEvents.write(line) event.close() - elif eventMap[i] == "thermostatMode": + elif eventList[i] == "thermostatMode": #Write five events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") @@ -282,21 +484,102 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "switch": + elif eventList[i] == "thermostatFanMode": + #Write five events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/thermostatAutoFanModeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 1) {\n") + event = open("eventSimulator/thermostatFanCirculateFanModeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 2) {\n") + event = open("eventSimulator/thermostatCirculateFanModeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 3) {\n") + event = open("eventSimulator/thermostatFanOnFanModeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/thermostatOnFanModeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "thermostatOperatingState": + #Write five events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,4)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/thermostatOperatingStateAutoEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 1) {\n") + event = open("eventSimulator/thermostatOperatingStateCoolEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 2) {\n") + event = open("eventSimulator/thermostatOperatingStateOffEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 3) {\n") + event = open("eventSimulator/thermostatOperatingStateEmergencyHeatEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/thermostatOperatingStateHeatEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "switch": + #Check which capability + variable = eventVarMap[eventList[i]] + 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") - event = open("eventSimulator/switchOnEvent.groovy", "r") + if capability == "capability.switch": + event = open("eventSimulator/switchOnEvent.groovy", "r") + elif capability == "capability.switchLevel": + event = open("eventSimulator/switchLevelOnEvent.groovy", "r") + elif capability == "capability.relaySwitch": + event = open("eventSimulator/relaySwitchOnEvent.groovy", "r") + elif capability == "capability.colorControl": + event = open("eventSimulator/colorControlSwitchOnEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t} else {\n") - event = open("eventSimulator/switchOffEvent.groovy", "r") + if capability == "capability.switch": + event = open("eventSimulator/switchOffEvent.groovy", "r") + elif capability == "capability.switchLevel": + event = open("eventSimulator/switchLevelOffEvent.groovy", "r") + elif capability == "capability.relaySwitch": + event = open("eventSimulator/relaySwitchOffEvent.groovy", "r") + elif capability == "capability.colorControl": + event = open("eventSimulator/colorControlSwitchOffEvent.groovy", "r") for line in event: extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - elif eventMap[i] == "location": #Case for Location event + elif eventList[i] == "location": #Case for Location event #Write three events subsequently extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") extractedEvents.write("\t\t\tif (event == 0) {\n") @@ -315,23 +598,279 @@ def ExtractEvents(extractedEvents): extractedEvents.write("\t\t" + line) event.close() extractedEvents.write("\t\t\t}\n") - + elif eventList[i] == "mode": + #Write three events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/modeHomeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 1) {\n") + event = open("eventSimulator/modeAwayEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/modeNightEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "acceleration": + #Write two events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/accelerationActiveEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/accelerationInactiveEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "acceleration.active": + event = open("eventSimulator/accelerationDefaultActiveEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "acceleration.inactive": + event = open("eventSimulator/accelerationDefaultInactiveEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + elif eventList[i] == "sleeping": + #Write two events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/sleepSleepingEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/sleepNotSleepingEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "goal": + event = open("eventSimulator/stepGoalEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "steps": + event = open("eventSimulator/stepStepsEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "color": + event = open("eventSimulator/colorChangeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "colorTemperature": + event = open("eventSimulator/colorTemperatureEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "hue": + event = open("eventSimulator/hueChangeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "saturation": + event = open("eventSimulator/saturationChangeEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "energy": + event = open("eventSimulator/energyMeterEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "power": + event = open("eventSimulator/powerMeterEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "illuminance": + event = open("eventSimulator/illuminanceMeasurementEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "humidity": + event = open("eventSimulator/humidityMeasurementEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "alarm": + #Write four events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,3)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/alarmBothEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 1) {\n") + event = open("eventSimulator/alarmSirenEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 2) {\n") + event = open("eventSimulator/alarmStrobeEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/alarmOffEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "contact": + #Check which capability + variable = eventVarMap[eventList[i]] + 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") + if capability == "capability.contactSensor": + event = open("eventSimulator/contactDefaultClosedEvent.groovy", "r") + elif capability == "capability.valve": + event = open("eventSimulator/valveClosedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + if capability == "capability.contactSensor": + event = open("eventSimulator/contactDefaultOpenEvent.groovy", "r") + elif capability == "capability.valve": + event = open("eventSimulator/valveOpenEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "status": + #Write three events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,2)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/musicPlayerPlayingEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else if (event == 1) {\n") + event = open("eventSimulator/musicPlayerStoppedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/musicPlayerPausedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "level": + #Check which capability + variable = eventVarMap[eventList[i]] + 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": + event = open("eventSimulator/switchLevelEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "trackDescription": + event = open("eventSimulator/musicPlayerTrackDescriptionEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "trackData": + event = open("eventSimulator/musicPlayerTrackDataEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "mute": + #Write two events subsequently + extractedEvents.write("\t\t\tdef event = Verify.getInt(0,1)\n") + extractedEvents.write("\t\t\tif (event == 0) {\n") + event = open("eventSimulator/musicPlayerUnmutedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t} else {\n") + event = open("eventSimulator/musicPlayerMutedEvent.groovy", "r") + for line in event: + extractedEvents.write("\t\t" + line) + event.close() + extractedEvents.write("\t\t\t}\n") + elif eventList[i] == "temperature": + #Check which capability + variable = eventVarMap[eventList[i]] + 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": + event = open("eventSimulator/temperatureMeasurementEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "heatingSetpoint": + event = open("eventSimulator/heatingSetpointEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "coolingSetpoint": + event = open("eventSimulator/coolingSetpointEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + elif eventList[i] == "thermostatSetpoint": + event = open("eventSimulator/thermostatSetpointEvent.groovy", "r") + for line in event: + extractedEvents.write(line) + event.close() + ###TODO: Add more events later extractedEvents.write("\t\t\tbreak\n") extractedEvents.write("\t}\n") - #extractedEvents.write("\tcounter--\n") extractedEvents.write("}\n") def CheckIfOnlyTouchEvents(): #Check and throw an error if it is all touch events #This is called Direct-Direct interaction and we do not model-check for this case onlyTouchEvents = True - for item in eventMap: + for item in eventList: if item != "nfcTouch" and item != "app": onlyTouchEvents = False if onlyTouchEvents is True and app1Subscribe is True and app2Subscribe is True: + # Write error log file + extractError = open("appCreationError.log", "w+") + extractError.write("Direct-Direct Interaction detected: we are skipping this pair...\n") + extractError.close() raise Exception("\n\nDirect-Direct Interaction detected: we are skipping this pair...\n\n") - + + #Extract objects to call functions from App1 F1 = open("Extractor/App1/App1.groovy", "r") extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+") @@ -368,7 +907,7 @@ extractorFile.close() Extractor.close() F1.close() #Run the file to extract the objects -os.system("groovy Extractor/extractorFile.groovy") +os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy") #Save the extracted methods and app2 in a same file to extract information @@ -389,8 +928,6 @@ for line in F2: extractorFile.close() Extractor.close() F2.close() -os.system("groovy Extractor/extractorFile.groovy") - - +os.system("groovy -classpath lib/jpf.jar Extractor/extractorFile.groovy")