From 03a440398988fb06278b520824d6aa3be9b39d65 Mon Sep 17 00:00:00 2001 From: rtrimana Date: Thu, 8 Aug 2019 12:52:42 -0700 Subject: [PATCH 1/1] Adjusting setLocationMode for global-variable conflict detection. --- Extractor/Extractor.groovy | 14 +++++++++--- Location/LocationVar.groovy | 40 ++++++++++++++++++++++++---------- Methods/setLocationMode.groovy | 2 ++ Runner.py | 4 ++++ 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/Extractor/Extractor.groovy b/Extractor/Extractor.groovy index 16038e3..4607b7c 100644 --- a/Extractor/Extractor.groovy +++ b/Extractor/Extractor.groovy @@ -81,7 +81,7 @@ import Momentary.Momentaries import Timer.SimulatedTimer //GlobalVariables -@Field def location = new LocationVar() +@Field def location = new LocationVar({}, true) //Settings variable defined to settings on purpose @Field def settings = [app: "app"] //Global variable for state[mode] @@ -402,6 +402,8 @@ def input(LinkedHashMap metaData, String name, String type, Closure Input) { find(Input) } +@Field chooseMode = 0 + //input linkedHashMap def input(LinkedHashMap metaData) { if (metaData.containsKey('title')) { @@ -1639,7 +1641,13 @@ def input(LinkedHashMap metaData) { case "mode": //def randomVariable = Math.abs(new Random().nextInt() % 3) def modes = ["away", "home", "night"] - def userInput = modes[1] + // Always assign a different mode to each app + //def userInput = modes[1] + def userInput = modes[chooseMode] + if (chooseMode < 3) + chooseMode++; + else + chooseMode = chooseMode%3 if (modeVariables == 0) { mode0 = metaData['name'] @@ -2105,7 +2113,7 @@ def preferences(Closure inputData) { GlobalVariablesBothApps.write("") GlobalVariablesBothApps.append("//Creating Global variables for both apps\n") GlobalVariablesBothApps.append("@Field def sendEvent = {eventDataMap -> eventHandler(eventDataMap)}\n") - GlobalVariablesBothApps.append("@Field def locationObject = new LocationVar(sendEvent)\n") + GlobalVariablesBothApps.append("@Field def locationObject = new LocationVar(sendEvent, init)\n") GlobalVariablesBothApps.append("@Field def appObject = new Touched(sendEvent, 0)\n") globalObjects.withReader { reader -> diff --git a/Location/LocationVar.groovy b/Location/LocationVar.groovy index 3f28a0b..a114c1f 100644 --- a/Location/LocationVar.groovy +++ b/Location/LocationVar.groovy @@ -15,18 +15,34 @@ class LocationVar { private Phrase helloHome - LocationVar(Closure sendEvent) { - this.hubs = [[id:0, localIP:"128.195.204.105"]] - this.modes = [[name: "home"],[name: "away"],[name: "night"]] - this.mode = "home" - this.helloHome = new Phrase() - this.contactBookEnabled = 1 - this.contacts = ['AJ'] - this.phoneNumbers = [9495379373] - this.sendEvent = sendEvent - this.timeZone = TimeZone.getTimeZone("America/New_York") - this.name = "hub0" - this.temperatureScale = "F" + LocationVar(Closure sendEvent, boolean init) { + + if (init) { + this.hubs = [[id:0, localIP:"128.195.204.105"]] + this.modes = [[name: "home"],[name: "away"],[name: "night"]] + this.mode = "away" + this.helloHome = new Phrase() + this.contactBookEnabled = 1 + this.contacts = ['AJ'] + this.phoneNumbers = [9495379373] + this.sendEvent = sendEvent + this.timeZone = TimeZone.getTimeZone("America/New_York") + this.name = "hub0" + this.temperatureScale = "F" + } else { + this.hubs = [[id:0, localIP:"128.195.204.105"]] + this.modes = [[name: "home"],[name: "away"],[name: "night"]] + this.mode = "home" + this.helloHome = new Phrase() + this.contactBookEnabled = 1 + this.contacts = ['AJ'] + this.phoneNumbers = [9495379373] + this.sendEvent = sendEvent + this.timeZone = TimeZone.getTimeZone("America/New_York") + this.name = "hub0" + this.temperatureScale = "F" + + } } //By Model Checker diff --git a/Methods/setLocationMode.groovy b/Methods/setLocationMode.groovy index aa7424b..12433ab 100644 --- a/Methods/setLocationMode.groovy +++ b/Methods/setLocationMode.groovy @@ -1,8 +1,10 @@ ///////////////////////////////////////////////////////////////////// def setLocationMode(String mode) { + log.debug "DEBUG: setLocationMode is called. Current mode is: ${location_mode} and new mode is: ${mode}" location.setValue([name: "Location", value: "$mode", deviceId: "locationID0", descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) location.setValue([name: "mode", value: "$mode", deviceId: "locationID0", descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + location_mode = mode } diff --git a/Runner.py b/Runner.py index ad8dff0..81efa7a 100644 --- a/Runner.py +++ b/Runner.py @@ -142,6 +142,8 @@ Out.write("//Application #1\n") Out.write("class App1 {\n") Out.write("\tdef reference\n") Out.write("\tdef location\n") +Out.write("\t// A local variable added for conflict detection tool\n") +Out.write("\tdef location_mode\n") Out.write("\tdef app\n") Out.write("\n") Out.write("\t//Extracted objects for App1\n") @@ -251,6 +253,8 @@ Out.write("//Application #2\n") Out.write("class App2 {\n") Out.write("\tdef reference\n") Out.write("\tdef location\n") +Out.write("\t// A local variable added for conflict detection tool\n") +Out.write("\tdef location_mode\n") Out.write("\tdef app\n") Out.write("\n") Out.write("\t//Extracted objects for App2\n") -- 2.34.1