X-Git-Url: http://plrg.eecs.uci.edu/git/?p=smartthings-infrastructure.git;a=blobdiff_plain;f=Extractor%2FExtractor.groovy;h=cf19c458f1c4857d547bce7c8d4b9a947d3fa311;hp=c8c7019118e6b22e62a929ef5b22c78a7eb6de07;hb=02242ecda5f522e8301d02da14a1b46dff5606d1;hpb=fdeb12e78476b60c4c3c0d5d33e55dddcf98578e diff --git a/Extractor/Extractor.groovy b/Extractor/Extractor.groovy index c8c7019..cf19c45 100644 --- a/Extractor/Extractor.groovy +++ b/Extractor/Extractor.groovy @@ -76,10 +76,13 @@ import Button.Button import Button.Buttons import ThreeAxis.ThreeAxis import ThreeAxis.ThreeAxises +import Momentary.Momentary +import Momentary.Momentaries +import RemainingDevices.RemainingDevices 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] @@ -99,15 +102,21 @@ import Timer.SimulatedTimer @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy") @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy") - +//Set this to true for global-state variable conflict +@Field assignDifferentModes = true +@Field chooseMode = 0 //Empty the files if (App == "App1") { globalObjects.write("") extractedObjectsApp1.write("") extractedObjectsConstructorApp1.write("") + if (assignDifferentModes) + chooseMode = 0 } else if (App == "App2") { extractedObjectsApp2.write("") extractedObjectsConstructorApp2.write("") + if (assignDifferentModes) + chooseMode = 2 } @@ -295,6 +304,11 @@ def timeToday(String time, Object timeZone) { @Field def threeAxisObject0 @Field def threeAxisObject1 @Field def threeAxisObject2 +//Global Object for class momentary switch device! +@Field momentaryObjects = 0 +@Field def momentaryObject0 +@Field def momentaryObject1 +@Field def momentaryObject2 //Global variables @@ -404,6 +418,15 @@ def input(LinkedHashMap metaData) { println "Options: "+metaData['options'] } def contains = 0 + def List = ["capability.carbonDioxideMeasurement", "capability.consumable", "capability.pHMeasurement", "capability.shockSensor", + "capability.signalStrength", "capability.soundSensor", "capability.soundPressureLevel", "capability.tamperAlert", + "capability.ultravioletIndex", "capability.voltageMeasurement", "capability.windowShade", "capability.sensor"] + String thisCapability = "" + if (metaData['type'] in List) { + int dot = metaData['type'].indexOf('.') + thisCapability = metaData['type'].substring(dot + 1) + metaData['type'] = "capability.remainingDevices" + } switch(metaData['type']) { case "capability.lock": globalObjects.eachLine { line -> @@ -413,22 +436,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def lockObject = new Locks(sendEvent, 1)\n") + globalObjects.append("@Field def lockObject = new Locks(sendEvent, 1, init)\n") if (lockObjects == 0) { lockObject0 = metaData['name'] - this[lockObject0] = new Locks({}, 1) + this[lockObject0] = new Locks({}, 1, true) } else if (lockObjects == 1) { lockObject1 = metaData['name'] - this[lockObject1] = new Locks({}, 1) + this[lockObject1] = new Locks({}, 1, true) } else if (lockObjects == 2) { lockObject2 = metaData['name'] - this[lockObject2] = new Locks({}, 1) + this[lockObject2] = new Locks({}, 1, true) } lockObjects=lockObjects+1 - settings.put(metaData['name'], new Locks({}, 1)) + settings.put(metaData['name'], new Locks({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class lock!\n") @@ -448,22 +471,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def alarmObject = new Alarms(sendEvent, 1)\n") + globalObjects.append("@Field def alarmObject = new Alarms(sendEvent, 1, init)\n") if (alarmObjects == 0) { alarmObject0 = metaData['name'] - this[alarmObject0] = new Alarms({}, 1) + this[alarmObject0] = new Alarms({}, 1, true) } else if (alarmObjects == 1) { alarmObject1 = metaData['name'] - this[alarmObject1] = new Alarms({}, 1) + this[alarmObject1] = new Alarms({}, 1, true) } else if (alarmObjects == 2) { alarmObject2 = metaData['name'] - this[alarmObject2] = new Alarms({}, 1) + this[alarmObject2] = new Alarms({}, 1, true) } alarmObjects=alarmObjects+1 - settings.put(metaData['name'], new Alarms({}, 1)) + settings.put(metaData['name'], new Alarms({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class alarm!\n") @@ -483,22 +506,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def buttonObject = new Buttons(sendEvent, 1)\n") + globalObjects.append("@Field def buttonObject = new Buttons(sendEvent, 1, init)\n") if (buttonObjects == 0) { buttonObject0 = metaData['name'] - this[buttonObject0] = new Buttons({}, 1) + this[buttonObject0] = new Buttons({}, 1, true) } else if (buttonObjects == 1) { buttonObject1 = metaData['name'] - this[buttonObject1] = new Buttons({}, 1) + this[buttonObject1] = new Buttons({}, 1, true) } else if (buttonObjects == 2) { buttonObject2 = metaData['name'] - this[buttonObject2] = new Buttons({}, 1) + this[buttonObject2] = new Buttons({}, 1, true) } buttonObjects=buttonObjects+1 - settings.put(metaData['name'], new Buttons({}, 1)) + settings.put(metaData['name'], new Buttons({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class Button!\n") @@ -518,22 +541,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def batteryObject = new Batteries(sendEvent, 1)\n") + globalObjects.append("@Field def batteryObject = new Batteries(sendEvent, 1, init)\n") if (batteryObjects == 0) { batteryObject0 = metaData['name'] - this[batteryObject0] = new Batteries({}, 1) + this[batteryObject0] = new Batteries({}, 1, true) } else if (batteryObjects == 1) { batteryObject1 = metaData['name'] - this[batteryObject1] = new Batteries({}, 1) + this[batteryObject1] = new Batteries({}, 1, true) } else if (batteryObjects == 2) { batteryObject2 = metaData['name'] - this[batteryObject2] = new Batteries({}, 1) + this[batteryObject2] = new Batteries({}, 1, true) } batteryObjects=batteryObjects+1 - settings.put(metaData['name'], new Batteries({}, 1)) + settings.put(metaData['name'], new Batteries({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class Battery!\n") @@ -553,22 +576,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def beaconSensorObject = new BeaconSensors(sendEvent, 1)\n") + globalObjects.append("@Field def beaconSensorObject = new BeaconSensors(sendEvent, 1, init)\n") if (beaconSensorObjects == 0) { beaconSensorObject0 = metaData['name'] - this[beaconSensorObject0] = new BeaconSensors({}, 1) + this[beaconSensorObject0] = new BeaconSensors({}, 1, true) } else if (beaconSensorObjects == 1) { beaconSensorObject1 = metaData['name'] - this[beaconSensorObject1] = new BeaconSensors({}, 1) + this[beaconSensorObject1] = new BeaconSensors({}, 1, true) } else if (beaconSensorObjects == 2) { beaconSensorObject2 = metaData['name'] - this[beaconSensorObject2] = new BeaconSensors({}, 1) + this[beaconSensorObject2] = new BeaconSensors({}, 1, true) } beaconSensorObjects=beaconSensorObjects+1 - settings.put(metaData['name'], new BeaconSensors({}, 1)) + settings.put(metaData['name'], new BeaconSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class beacon sensor!\n") @@ -588,22 +611,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def carbonMonoxideDetectorObject = new CarbonMonoxideDetectors(sendEvent, 1)\n") + globalObjects.append("@Field def carbonMonoxideDetectorObject = new CarbonMonoxideDetectors(sendEvent, 1, init)\n") if (carbonMonoxideDetectorObjects == 0) { carbonMonoxideDetectorObject0 = metaData['name'] - this[carbonMonoxideDetectorObject0] = new CarbonMonoxideDetectors({}, 1) + this[carbonMonoxideDetectorObject0] = new CarbonMonoxideDetectors({}, 1, true) } else if (carbonMonoxideDetectorObjects == 1) { carbonMonoxideDetectorObject1 = metaData['name'] - this[carbonMonoxideDetectorObject1] = new CarbonMonoxideDetectors({}, 1) + this[carbonMonoxideDetectorObject1] = new CarbonMonoxideDetectors({}, 1, true) } else if (carbonMonoxideDetectorObjects == 2) { carbonMonoxideDetectorObject2 = metaData['name'] - this[carbonMonoxideDetectorObject2] = new CarbonMonoxideDetectors({}, 1) + this[carbonMonoxideDetectorObject2] = new CarbonMonoxideDetectors({}, 1, true) } carbonMonoxideDetectorObjects=carbonMonoxideDetectorObjects+1 - settings.put(metaData['name'], new CarbonMonoxideDetectors({}, 1)) + settings.put(metaData['name'], new CarbonMonoxideDetectors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class carbon monoxide detector!\n") @@ -623,22 +646,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def colorTemperatureObject = new ColorTemperatures(sendEvent, 1)\n") + globalObjects.append("@Field def colorTemperatureObject = new ColorTemperatures(sendEvent, 1, init)\n") if (colorTemperatureObjects == 0) { colorTemperatureObject0 = metaData['name'] - this[colorTemperatureObject0] = new ColorTemperatures({}, 1) + this[colorTemperatureObject0] = new ColorTemperatures({}, 1, true) } else if (colorTemperatureObjects == 1) { colorTemperatureObject1 = metaData['name'] - this[colorTemperatureObject1] = new ColorTemperatures({}, 1) + this[colorTemperatureObject1] = new ColorTemperatures({}, 1, true) } else if (colorTemperatureObjects == 2) { colorTemperatureObject2 = metaData['name'] - this[colorTemperatureObject2] = new ColorTemperatures({}, 1) + this[colorTemperatureObject2] = new ColorTemperatures({}, 1, true) } colorTemperatureObjects=colorTemperatureObjects+1 - settings.put(metaData['name'], new ColorTemperatures({}, 1)) + settings.put(metaData['name'], new ColorTemperatures({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class color temperature!\n") @@ -658,22 +681,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def colorControlObject = new ColorControls(sendEvent, 1)\n") + globalObjects.append("@Field def colorControlObject = new ColorControls(sendEvent, 1, init)\n") if (colorControlObjects == 0) { colorControlObject0 = metaData['name'] - this[colorControlObject0] = new ColorControls({}, 1) + this[colorControlObject0] = new ColorControls({}, 1, true) } else if (colorControlObjects == 1) { colorControlObject1 = metaData['name'] - this[colorControlObject1] = new ColorControls({}, 1) + this[colorControlObject1] = new ColorControls({}, 1, true) } else if (colorControlObjects == 2) { colorControlObject2 = metaData['name'] - this[colorControlObject2] = new ColorControls({}, 1) + this[colorControlObject2] = new ColorControls({}, 1, true) } colorControlObjects=colorControlObjects+1 - settings.put(metaData['name'], new ColorControls({}, 1)) + settings.put(metaData['name'], new ColorControls({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class color control!\n") @@ -693,22 +716,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def contactObject = new ContactSensors(sendEvent, 1)\n") + globalObjects.append("@Field def contactObject = new ContactSensors(sendEvent, 1, init)\n") if (contactObjects == 0) { contactObject0 = metaData['name'] - this[contactObject0] = new ContactSensors({}, 1) + this[contactObject0] = new ContactSensors({}, 1, true) } else if (contactObjects == 1) { contactObject1 = metaData['name'] - this[contactObject1] = new ContactSensors({}, 1) + this[contactObject1] = new ContactSensors({}, 1, true) } else if (contactObjects == 2) { contactObject2 = metaData['name'] - this[contactObject2] = new ContactSensors({}, 1) + this[contactObject2] = new ContactSensors({}, 1, true) } contactObjects=contactObjects+1 - settings.put(metaData['name'], new ContactSensors({}, 1)) + settings.put(metaData['name'], new ContactSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class contactSensor!\n") @@ -728,22 +751,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def threeAxisObject = new ThreeAxises(sendEvent, 1)\n") + globalObjects.append("@Field def threeAxisObject = new ThreeAxises(sendEvent, 1, init)\n") if (threeAxisObjects == 0) { threeAxisObject0 = metaData['name'] - this[threeAxisObject0] = new ThreeAxises({}, 1) + this[threeAxisObject0] = new ThreeAxises({}, 1, true) } else if (threeAxisObjects == 1) { threeAxisObject1 = metaData['name'] - this[threeAxisObject1] = new ThreeAxises({}, 1) + this[threeAxisObject1] = new ThreeAxises({}, 1, true) } else if (threeAxisObjects == 2) { threeAxisObject2 = metaData['name'] - this[threeAxisObject2] = new ThreeAxises({}, 1) + this[threeAxisObject2] = new ThreeAxises({}, 1, true) } threeAxisObjects=threeAxisObjects+1 - settings.put(metaData['name'], new ThreeAxises({}, 1)) + settings.put(metaData['name'], new ThreeAxises({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class three axis!\n") @@ -763,22 +786,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def doorControlObject = new DoorControls(sendEvent, 1)\n") + globalObjects.append("@Field def doorControlObject = new DoorControls(sendEvent, 1, init)\n") if (doorControlObjects == 0) { doorControlObject0 = metaData['name'] - this[doorControlObject0] = new DoorControls({}, 1) + this[doorControlObject0] = new DoorControls({}, 1, true) } else if (doorControlObjects == 1) { doorControlObject1 = metaData['name'] - this[doorControlObject1] = new DoorControls({}, 1) + this[doorControlObject1] = new DoorControls({}, 1, true) } else if (doorControlObjects == 2) { doorControlObject2 = metaData['name'] - this[doorControlObject2] = new DoorControls({}, 1) + this[doorControlObject2] = new DoorControls({}, 1, true) } doorControlObjects=doorControlObjects+1 - settings.put(metaData['name'], new DoorControls({}, 1)) + settings.put(metaData['name'], new DoorControls({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class door control!\n") @@ -798,22 +821,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def energyMeterObject = new EnergyMeters(sendEvent, 1)\n") + globalObjects.append("@Field def energyMeterObject = new EnergyMeters(sendEvent, 1, init)\n") if (energyMeterObjects == 0) { energyMeterObject0 = metaData['name'] - this[energyMeterObject0] = new EnergyMeters({}, 1) + this[energyMeterObject0] = new EnergyMeters({}, 1, true) } else if (energyMeterObjects == 1) { energyMeterObject1 = metaData['name'] - this[energyMeterObject1] = new EnergyMeters({}, 1) + this[energyMeterObject1] = new EnergyMeters({}, 1, true) } else if (energyMeterObjects == 2) { energyMeterObject2 = metaData['name'] - this[energyMeterObject2] = new EnergyMeters({}, 1) + this[energyMeterObject2] = new EnergyMeters({}, 1, true) } energyMeterObjects=energyMeterObjects+1 - settings.put(metaData['name'], new EnergyMeters({}, 1)) + settings.put(metaData['name'], new EnergyMeters({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class energy meter!\n") @@ -833,22 +856,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def illuminanceMeasurementObject = new IlluminanceMeasurements(sendEvent, 1)\n") + globalObjects.append("@Field def illuminanceMeasurementObject = new IlluminanceMeasurements(sendEvent, 1, init)\n") if (illuminanceMeasurementObjects == 0) { illuminanceMeasurementObject0 = metaData['name'] - this[illuminanceMeasurementObject0] = new IlluminanceMeasurements({}, 1) + this[illuminanceMeasurementObject0] = new IlluminanceMeasurements({}, 1, true) } else if (illuminanceMeasurementObjects == 1) { illuminanceMeasurementObject1 = metaData['name'] - this[illuminanceMeasurementObject1] = new IlluminanceMeasurements({}, 1) + this[illuminanceMeasurementObject1] = new IlluminanceMeasurements({}, 1, true) } else if (illuminanceMeasurementObjects == 2) { illuminanceMeasurementObject2 = metaData['name'] - this[illuminanceMeasurementObject2] = new IlluminanceMeasurements({}, 1) + this[illuminanceMeasurementObject2] = new IlluminanceMeasurements({}, 1, true) } illuminanceMeasurementObjects=illuminanceMeasurementObjects+1 - settings.put(metaData['name'], new IlluminanceMeasurements({}, 1)) + settings.put(metaData['name'], new IlluminanceMeasurements({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class illuminance measurement!\n") @@ -868,22 +891,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def accelerationSensorObject = new AccelerationSensors(sendEvent, 1)\n") + globalObjects.append("@Field def accelerationSensorObject = new AccelerationSensors(sendEvent, 1, init)\n") if (accelerationSensorObjects == 0) { accelerationSensorObject0 = metaData['name'] - this[accelerationSensorObject0] = new AccelerationSensors({}, 1) + this[accelerationSensorObject0] = new AccelerationSensors({}, 1, true) } else if (accelerationSensorObjects == 1) { accelerationSensorObject1 = metaData['name'] - this[accelerationSensorObject1] = new AccelerationSensors({}, 1) + this[accelerationSensorObject1] = new AccelerationSensors({}, 1, true) } else if (accelerationSensorObjects == 2) { accelerationSensorObject2 = metaData['name'] - this[accelerationSensorObject2] = new AccelerationSensors({}, 1) + this[accelerationSensorObject2] = new AccelerationSensors({}, 1, true) } accelerationSensorObjects=accelerationSensorObjects+1 - settings.put(metaData['name'], new AccelerationSensors({}, 1)) + settings.put(metaData['name'], new AccelerationSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class Acceleration Sensor!\n") @@ -895,6 +918,41 @@ def input(LinkedHashMap metaData) { extractedObjectsConstructorApp2.append(metaData['name']+" = obj.accelerationSensorObject\n") } break + case "capability.momentary": + globalObjects.eachLine { line -> + if(line.contains("momentoryObject")){ + contains = 1 + } + } + + if (contains == 0) + globalObjects.append("@Field def momentaryObject = new Momentaries(sendEvent, 1)\n") + + if (momentaryObjects == 0) { + momentaryObject0 = metaData['name'] + this[momentaryObject0] = new Momentaries({}, 1) + } else if (momentaryObjects == 1) { + momentaryObject1 = metaData['name'] + this[momentaryObject1] = new Momentaries({}, 1) + } else if (momentaryObjects == 2) { + momentaryObject2 = metaData['name'] + this[momentaryObject2] = new Momentaries({}, 1) + } + + momentaryObjects=momentaryObjects+1 + + settings.put(metaData['name'], new Momentaries({}, 1)) + + if (App == "App1") { + extractedObjectsApp1.append("//Object for class momentory switch class!\n") + extractedObjectsApp1.append("def "+metaData['name']+"\n") + extractedObjectsConstructorApp1.append(metaData['name']+" = obj.momentaryObject\n") + } else { + extractedObjectsApp2.append("//Object for class momentory Sensor!\n") + extractedObjectsApp2.append("def "+metaData['name']+"\n") + extractedObjectsConstructorApp2.append(metaData['name']+" = obj.momentaryObject\n") + } + break case "capability.motionSensor": globalObjects.eachLine { line -> if(line.contains("motionSensorObject")){ @@ -903,22 +961,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def motionSensorObject = new MotionSensors(sendEvent, 1)\n") + globalObjects.append("@Field def motionSensorObject = new MotionSensors(sendEvent, 1, init)\n") if (motionSensorObjects == 0) { motionSensorObject0 = metaData['name'] - this[motionSensorObject0] = new MotionSensors({}, 1) + this[motionSensorObject0] = new MotionSensors({}, 1, true) } else if (motionSensorObjects == 1) { motionSensorObject1 = metaData['name'] - this[motionSensorObject1] = new MotionSensors({}, 1) + this[motionSensorObject1] = new MotionSensors({}, 1, true) } else if (motionSensorObjects == 2) { motionSensorObject2 = metaData['name'] - this[motionSensorObject2] = new MotionSensors({}, 1) + this[motionSensorObject2] = new MotionSensors({}, 1, true) } motionSensorObjects=motionSensorObjects+1 - settings.put(metaData['name'], new MotionSensors({}, 1)) + settings.put(metaData['name'], new MotionSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class Motion Sensor!\n") @@ -938,22 +996,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def musicPlayerObject = new MusicPlayers(sendEvent, 1)\n") + globalObjects.append("@Field def musicPlayerObject = new MusicPlayers(sendEvent, 1, init)\n") if (musicPlayerObjects == 0) { musicPlayerObject0 = metaData['name'] - this[musicPlayerObject0] = new MusicPlayers({}, 1) + this[musicPlayerObject0] = new MusicPlayers({}, 1, true) } else if (musicPlayerObjects == 1) { musicPlayerObject1 = metaData['name'] - this[musicPlayerObject1] = new MusicPlayers({}, 1) + this[musicPlayerObject1] = new MusicPlayers({}, 1, true) } else if (musicPlayerObjects == 2) { musicPlayerObject2 = metaData['name'] - this[musicPlayerObject2] = new MusicPlayers({}, 1) + this[musicPlayerObject2] = new MusicPlayers({}, 1, true) } musicPlayerObjects=musicPlayerObjects+1 - settings.put(metaData['name'], new MusicPlayers({}, 1)) + settings.put(metaData['name'], new MusicPlayers({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class music player!\n") @@ -973,22 +1031,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def powerMeterObject = new PowerMeters(sendEvent, 1)\n") + globalObjects.append("@Field def powerMeterObject = new PowerMeters(sendEvent, 1, init)\n") if (powerMeterObjects == 0) { powerMeterObject0 = metaData['name'] - this[powerMeterObject0] = new PowerMeters({}, 1) + this[powerMeterObject0] = new PowerMeters({}, 1, true) } else if (powerMeterObjects == 1) { powerMeterObject1 = metaData['name'] - this[powerMeterObject1] = new PowerMeters({}, 1) + this[powerMeterObject1] = new PowerMeters({}, 1, true) } else if (powerMeterObjects == 2) { powerMeterObject2 = metaData['name'] - this[powerMeterObject2] = new PowerMeters({}, 1) + this[powerMeterObject2] = new PowerMeters({}, 1, true) } powerMeterObjects=powerMeterObjects+1 - settings.put(metaData['name'], new PowerMeters({}, 1)) + settings.put(metaData['name'], new PowerMeters({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class power meter!\n") @@ -1008,22 +1066,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def presenceSensorObject = new PresenceSensors(sendEvent, 1)\n") + globalObjects.append("@Field def presenceSensorObject = new PresenceSensors(sendEvent, 1, init)\n") if (presenceSensorObjects == 0) { presenceSensorObject0 = metaData['name'] - this[presenceSensorObject0] = new PresenceSensors({}, 1) + this[presenceSensorObject0] = new PresenceSensors({}, 1, true) } else if (presenceSensorObjects == 1) { presenceSensorObject1 = metaData['name'] - this[presenceSensorObject1] = new PresenceSensors({}, 1) + this[presenceSensorObject1] = new PresenceSensors({}, 1, true) } else if (presenceSensorObjects == 2) { presenceSensorObject2 = metaData['name'] - this[presenceSensorObject2] = new PresenceSensors({}, 1) + this[presenceSensorObject2] = new PresenceSensors({}, 1, true) } presenceSensorObjects=presenceSensorObjects+1 - settings.put(metaData['name'], new PresenceSensors({}, 1)) + settings.put(metaData['name'], new PresenceSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class presence sensor!\n") @@ -1043,22 +1101,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def humidityMeasurementObject = new RelativeHumidityMeasurements(sendEvent, 1)\n") + globalObjects.append("@Field def humidityMeasurementObject = new RelativeHumidityMeasurements(sendEvent, 1, init)\n") if (humidityMeasurementObjects == 0) { humidityMeasurementObject0 = metaData['name'] - this[humidityMeasurementObject0] = new RelativeHumidityMeasurements({}, 1) + this[humidityMeasurementObject0] = new RelativeHumidityMeasurements({}, 1, true) } else if (humidityMeasurementObjects == 1) { humidityMeasurementObject1 = metaData['name'] - this[humidityMeasurementObject1] = new RelativeHumidityMeasurements({}, 1) + this[humidityMeasurementObject1] = new RelativeHumidityMeasurements({}, 1, true) } else if (humidityMeasurementObjects == 2) { humidityMeasurementObject2 = metaData['name'] - this[humidityMeasurementObject2] = new RelativeHumidityMeasurements({}, 1) + this[humidityMeasurementObject2] = new RelativeHumidityMeasurements({}, 1, true) } humidityMeasurementObjects=humidityMeasurementObjects+1 - settings.put(metaData['name'], new RelativeHumidityMeasurements({}, 1)) + settings.put(metaData['name'], new RelativeHumidityMeasurements({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class humidity measurement!\n") @@ -1078,22 +1136,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def relaySwitchObject = new RelaySwitches(sendEvent, 1)\n") + globalObjects.append("@Field def relaySwitchObject = new RelaySwitches(sendEvent, 1, init)\n") if (relaySwitchObjects == 0) { relaySwitchObject0 = metaData['name'] - this[relaySwitchObject0] = new RelaySwitches({}, 1) + this[relaySwitchObject0] = new RelaySwitches({}, 1, true) } else if (relaySwitchObjects == 1) { relaySwitchObject1 = metaData['name'] - this[relaySwitchObject1] = new RelaySwitches({}, 1) + this[relaySwitchObject1] = new RelaySwitches({}, 1, true) } else if (relaySwitchObjects == 2) { relaySwitchObject2 = metaData['name'] - this[relaySwitchObject2] = new RelaySwitches({}, 1) + this[relaySwitchObject2] = new RelaySwitches({}, 1, true) } relaySwitchObjects=relaySwitchObjects+1 - settings.put(metaData['name'], new RelaySwitches({}, 1)) + settings.put(metaData['name'], new RelaySwitches({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class relay switch!\n") @@ -1113,22 +1171,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def sleepSensorObject = new SleepSensors(sendEvent, 1)\n") + globalObjects.append("@Field def sleepSensorObject = new SleepSensors(sendEvent, 1, init)\n") if (sleepSensorObjects == 0) { sleepSensorObject0 = metaData['name'] - this[sleepSensorObject0] = new SleepSensors({}, 1) + this[sleepSensorObject0] = new SleepSensors({}, 1, true) } else if (sleepSensorObjects == 1) { sleepSensorObject1 = metaData['name'] - this[sleepSensorObject1] = new SleepSensors({}, 1) + this[sleepSensorObject1] = new SleepSensors({}, 1, true) } else if (sleepSensorObjects == 2) { sleepSensorObject2 = metaData['name'] - this[sleepSensorObject2] = new SleepSensors({}, 1) + this[sleepSensorObject2] = new SleepSensors({}, 1, true) } sleepSensorObjects=sleepSensorObjects+1 - settings.put(metaData['name'], new SleepSensors({}, 1)) + settings.put(metaData['name'], new SleepSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class sleep sensor!\n") @@ -1148,22 +1206,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def smokeDetectorObject = new SmokeDetectors(sendEvent, 1)\n") + globalObjects.append("@Field def smokeDetectorObject = new SmokeDetectors(sendEvent, 1, init)\n") if (smokeDetectorObjects == 0) { smokeDetectorObject0 = metaData['name'] - this[smokeDetectorObject0] = new SmokeDetectors({}, 1) + this[smokeDetectorObject0] = new SmokeDetectors({}, 1, true) } else if (smokeDetectorObjects == 1) { smokeDetectorObject1 = metaData['name'] - this[smokeDetectorObject1] = new SmokeDetectors({}, 1) + this[smokeDetectorObject1] = new SmokeDetectors({}, 1, true) } else if (smokeDetectorObjects == 2) { smokeDetectorObject2 = metaData['name'] - this[smokeDetectorObject2] = new SmokeDetectors({}, 1) + this[smokeDetectorObject2] = new SmokeDetectors({}, 1, true) } smokeDetectorObjects=smokeDetectorObjects+1 - settings.put(metaData['name'], new SmokeDetectors({}, 1)) + settings.put(metaData['name'], new SmokeDetectors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class smoke detector!\n") @@ -1183,22 +1241,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def stepSensorObject = new StepSensors(sendEvent, 1)\n") + globalObjects.append("@Field def stepSensorObject = new StepSensors(sendEvent, 1, init)\n") if (stepSensorObjects == 0) { stepSensorObject0 = metaData['name'] - this[stepSensorObject0] = new StepSensors({}, 1) + this[stepSensorObject0] = new StepSensors({}, 1, true) } else if (stepSensorObjects == 1) { stepSensorObject1 = metaData['name'] - this[stepSensorObject1] = new StepSensors({}, 1) + this[stepSensorObject1] = new StepSensors({}, 1, true) } else if (stepSensorObjects == 2) { stepSensorObject2 = metaData['name'] - this[stepSensorObject2] = new StepSensors({}, 1) + this[stepSensorObject2] = new StepSensors({}, 1, true) } stepSensorObjects=stepSensorObjects+1 - settings.put(metaData['name'], new StepSensors({}, 1)) + settings.put(metaData['name'], new StepSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class step sensor!\n") @@ -1218,22 +1276,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def switchObject = new Switches(sendEvent, 1)\n") + globalObjects.append("@Field def switchObject = new Switches(sendEvent, 1, init)\n") if (switchObjects == 0) { switchObject0 = metaData['name'] - this[switchObject0] = new Switches({}, 1) + this[switchObject0] = new Switches({}, 1, true) } else if (switchObjects == 1) { switchObject1 = metaData['name'] - this[switchObject1] = new Switches({}, 1) + this[switchObject1] = new Switches({}, 1, true) } else if (switchObjects == 2) { switchObject2 = metaData['name'] - this[switchObject2] = new Switches({}, 1) + this[switchObject2] = new Switches({}, 1, true) } switchObjects=switchObjects+1 - settings.put(metaData['name'], new Switches({}, 1)) + settings.put(metaData['name'], new Switches({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class switch!\n") @@ -1253,22 +1311,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def switchLevelObject = new SwitchLevels(sendEvent, 1)\n") + globalObjects.append("@Field def switchLevelObject = new SwitchLevels(sendEvent, 1, init)\n") if (switchLevelObjects == 0) { switchLevelObject0 = metaData['name'] - this[switchLevelObject0] = new SwitchLevels({}, 1) + this[switchLevelObject0] = new SwitchLevels({}, 1, true) } else if (switchLevelObjects == 1) { switchLevelObject1 = metaData['name'] - this[switchLevelObject1] = new SwitchLevels({}, 1) + this[switchLevelObject1] = new SwitchLevels({}, 1, true) } else if (switchLevelObjects == 2) { switchLevelObject2 = metaData['name'] - this[switchLevelObject2] = new SwitchLevels({}, 1) + this[switchLevelObject2] = new SwitchLevels({}, 1, true) } switchLevelObjects=switchLevelObjects+1 - settings.put(metaData['name'], new SwitchLevels({}, 1)) + settings.put(metaData['name'], new SwitchLevels({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class switch level!\n") @@ -1288,22 +1346,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def temperatureMeasurementObject = new TemperatureMeasurements(sendEvent, 1)\n") + globalObjects.append("@Field def temperatureMeasurementObject = new TemperatureMeasurements(sendEvent, 1, init)\n") if (temperatureMeasurementObjects == 0) { temperatureMeasurementObject0 = metaData['name'] - this[temperatureMeasurementObject0] = new TemperatureMeasurements({}, 1) + this[temperatureMeasurementObject0] = new TemperatureMeasurements({}, 1, true) } else if (temperatureMeasurementObjects == 1) { temperatureMeasurementObject1 = metaData['name'] - this[temperatureMeasurementObject1] = new TemperatureMeasurements({}, 1) + this[temperatureMeasurementObject1] = new TemperatureMeasurements({}, 1, true) } else if (temperatureMeasurementObjects == 2) { temperatureMeasurementObject2 = metaData['name'] - this[temperatureMeasurementObject2] = new TemperatureMeasurements({}, 1) + this[temperatureMeasurementObject2] = new TemperatureMeasurements({}, 1, true) } temperatureMeasurementObjects=temperatureMeasurementObjects+1 - settings.put(metaData['name'], new TemperatureMeasurements({}, 1)) + settings.put(metaData['name'], new TemperatureMeasurements({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class temperature measurement!\n") @@ -1323,22 +1381,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def thermostatObject = new Thermostats(sendEvent, 1)\n") + globalObjects.append("@Field def thermostatObject = new Thermostats(sendEvent, 1, init)\n") if (thermostatObjects == 0) { thermostatObject0 = metaData['name'] - this[thermostatObject0] = new Thermostats({}, 1) + this[thermostatObject0] = new Thermostats({}, 1, true) } else if (thermostatObjects == 1) { thermostatObject1 = metaData['name'] - this[thermostatObject1] = new Thermostats({}, 1) + this[thermostatObject1] = new Thermostats({}, 1, true) } else if (thermostatObjects == 2) { thermostatObject2 = metaData['name'] - this[thermostatObject2] = new Thermostats({}, 1) + this[thermostatObject2] = new Thermostats({}, 1, true) } thermostatObjects=thermostatObjects+1 - settings.put(metaData['name'], new Thermostats({}, 1)) + settings.put(metaData['name'], new Thermostats({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class thermostat!\n") @@ -1358,22 +1416,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def valveObject = new Valves(sendEvent, 1)\n") + globalObjects.append("@Field def valveObject = new Valves(sendEvent, 1, init)\n") if (valveObjects == 0) { valveObject0 = metaData['name'] - this[valveObject0] = new Valves({}, 1) + this[valveObject0] = new Valves({}, 1, true) } else if (valveObjects == 1) { valveObject1 = metaData['name'] - this[valveObject1] = new Valves({}, 1) + this[valveObject1] = new Valves({}, 1, true) } else if (valveObjects == 2) { valveObject2 = metaData['name'] - this[valveObject2] = new Valves({}, 1) + this[valveObject2] = new Valves({}, 1, true) } valveObjects=valveObjects+1 - settings.put(metaData['name'], new Valves({}, 1)) + settings.put(metaData['name'], new Valves({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class valve!\n") @@ -1393,22 +1451,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def speechSynthesisObject = new SpeechSynthesises(sendEvent, 1)\n") + globalObjects.append("@Field def speechSynthesisObject = new SpeechSynthesises(sendEvent, 1, init)\n") if (speechSynthesisObjects == 0) { speechSynthesisObject0 = metaData['name'] - this[speechSynthesisObject0] = new SpeechSynthesises({}, 1) + this[speechSynthesisObject0] = new SpeechSynthesises({}, 1, true) } else if (speechSynthesisObjects == 1) { speechSynthesisObject1 = metaData['name'] - this[speechSynthesisObject1] = new SpeechSynthesises({}, 1) + this[speechSynthesisObject1] = new SpeechSynthesises({}, 1, true) } else if (speechSynthesisObjects == 2) { speechSynthesisObject2 = metaData['name'] - this[speechSynthesisObject2] = new SpeechSynthesises({}, 1) + this[speechSynthesisObject2] = new SpeechSynthesises({}, 1, true) } speechSynthesisObjects=speechSynthesisObjects+1 - settings.put(metaData['name'], new SpeechSynthesises({}, 1)) + settings.put(metaData['name'], new SpeechSynthesises({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class speech synthesis!\n") @@ -1428,22 +1486,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def waterSensorObject = new WaterSensors(sendEvent, 1)\n") + globalObjects.append("@Field def waterSensorObject = new WaterSensors(sendEvent, 1, init)\n") if (waterSensorObjects == 0) { waterSensorObject0 = metaData['name'] - this[waterSensorObject0] = new WaterSensors({}, 1) + this[waterSensorObject0] = new WaterSensors({}, 1, true) } else if (waterSensorObjects == 1) { waterSensorObject1 = metaData['name'] - this[waterSensorObject1] = new WaterSensors({}, 1) + this[waterSensorObject1] = new WaterSensors({}, 1, true) } else if (waterSensorObjects == 2) { waterSensorObject2 = metaData['name'] - this[waterSensorObject2] = new WaterSensors({}, 1) + this[waterSensorObject2] = new WaterSensors({}, 1, true) } waterSensorObjects=waterSensorObjects+1 - settings.put(metaData['name'], new WaterSensors({}, 1)) + settings.put(metaData['name'], new WaterSensors({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class water sensor!\n") @@ -1498,22 +1556,22 @@ def input(LinkedHashMap metaData) { } if (contains == 0) - globalObjects.append("@Field def imageCaptureObject = new ImageCaptures(sendEvent, 1)\n") + globalObjects.append("@Field def imageCaptureObject = new ImageCaptures(sendEvent, 1, init)\n") if (imageCaptureObjects == 0) { imageCaptureObject0 = metaData['name'] - this[imageCaptureObject0] = new ImageCaptures({}, 1) + this[imageCaptureObject0] = new ImageCaptures({}, 1, true) } else if (imageCaptureObjects == 1) { imageCaptureObject1 = metaData['name'] - this[imageCaptureObject1] = new ImageCaptures({}, 1) + this[imageCaptureObject1] = new ImageCaptures({}, 1, true) } else if (imageCaptureObjects == 2) { imageCaptureObject2 = metaData['name'] - this[imageCaptureObject2] = new ImageCaptures({}, 1) + this[imageCaptureObject2] = new ImageCaptures({}, 1, true) } imageCaptureObjects=imageCaptureObjects+1 - settings.put(metaData['name'], new ImageCaptures({}, 1)) + settings.put(metaData['name'], new ImageCaptures({}, 1, true)) if (App == "App1") { extractedObjectsApp1.append("//Object for class Image Capture!\n") @@ -1597,7 +1655,17 @@ 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 + if (assignDifferentModes) { + userInput = modes[chooseMode] + if (chooseMode < 3) + chooseMode++; + else + chooseMode = chooseMode%3 + } else { + userInput = modes[1] + } if (modeVariables == 0) { mode0 = metaData['name'] @@ -1993,6 +2061,29 @@ def input(LinkedHashMap metaData) { extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n") } break + case "capability.remainingDevices": + String nameOfObject = thisCapability+"Object" + globalObjects.eachLine { line -> + if(line.contains(nameOfObject)){ + contains = 1 + } + } + + if (contains == 0) + globalObjects.append("@Field def $nameOfObject = new RemainingDevices(sendEvent, 1)\n") + + settings.put(metaData['name'], new RemainingDevices({}, 1)) + + if (App == "App1") { + extractedObjectsApp1.append("//Object for class remaining devices!\n") + extractedObjectsApp1.append("def "+metaData['name']+"\n") + extractedObjectsConstructorApp1.append(metaData['name']+" = obj.$nameOfObject\n") + } else { + extractedObjectsApp2.append("//Object for class remaining devices!\n") + extractedObjectsApp2.append("def "+metaData['name']+"\n") + extractedObjectsConstructorApp2.append(metaData['name']+" = obj.$nameOfObject\n") + } + break default: break } @@ -2063,7 +2154,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 ->