Some minor changes!
[smartthings-infrastructure.git] / Switch / Switches.groovy
index 4071de52c0dacdcda365bb8f57dd0dcaea264db4..152096db303471cfc66dfece1098095c9ea6e478 100644 (file)
 package Switch
 import Timer.SimulatedTimer
 
+//JPF's Verify API
+import gov.nasa.jpf.vm.Verify
+
+
 public class Switches {
-       private int id = 0      
-       private String displayName
-       private String switchState
-       private String switchLatestValue
-       def sendEvent   
+       int deviceNumbers       
+       List switches
        def timers
-       
+       def sendEvent
 
-       Switches(Closure sendEvent, int id, String displayName, String switchState, String switchLatestValue) {
+       //If we have only one device
+       private String id = "switchID0"
+       private String label = "switch0"
+       private String displayName = "switch0"
+       private String switchState = "off"
+       private String currentSwitch = "off"
+       private int currentLevel = 50
+       private String switchLatestValue = "off"
+
+       Switches(Closure sendEvent, int deviceNumbers, boolean init) {
                this.sendEvent = sendEvent
                this.timers = new SimulatedTimer()
+               this.deviceNumbers = deviceNumbers
+               this.switches = []
+
+               if (init) {
+                       this.switchState = "off"
+                       this.currentSwitch = "off"
+                       this.switchLatestValue = "off"
+                       this.currentLevel = 50
+               } else {
+                       this.switchState = "on"
+                       this.currentSwitch = "on"
+                       this.switchLatestValue = "on"
+                       this.currentLevel = 60
+               }
+               switches.add(new Switch(sendEvent, id, label, displayName, this.switchState, this.currentSwitch, this.currentLevel, this.switchLatestValue))
+       }
 
-               this.id = id
-               this.displayName = displayName
-               this.switchState = switchState
-               this.switchLatestValue = switchLatestValue
+       //Methods for closures
+       def count(Closure Input) {
+               switches.count(Input)
+       }
+       def size() {
+               switches.size()
+       }
+       def each(Closure Input) {
+               switches.each(Input)
+       }
+       def eachWithIndex(Closure Input) {
+               switches.eachWithIndex(Input)
+       }
+       def find(Closure Input) {
+               switches.find(Input)
+       }
+       def sort(Closure Input) {
+               switches.sort(Input)
+       }
+       def collect(Closure Input) {
+               switches.collect(Input)
        }
 
        //By Apps
+       def eventsSince(Date dateObj, LinkedHashMap metaData) {
+               return switches[0].eventsSince()
+       }
+
+       def setLevel(int level) {
+               currentLevel = level
+               switches[0].setLevel(level)
+       }
+
        def on() {
-               println("the switch with id:$id is on!")
-               this.switchLatestValue = this.switchState
-               this.switchState = "on"
-               sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "",
-                   displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+               switchLatestValue = "on"
+               switchState = "on"
+               currentSwitch = "on"
+               switches[0].on()
        }
 
        def on(LinkedHashMap metaData) {
                def task = timers.runAfter(metaData["delay"]) {
-                       println("the switch with id:$id is on!")
-                       this.switchLatestValue = this.switchState
-                       this.switchState = "on"
-                       sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "",
-                           displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+                       switchLatestValue = "on"
+                       switchState = "on"
+                       currentSwitch = "on"
+                       switches[0].on()
                }
        }
 
        def off() {
-               println("the switch with id:$id is off!")
-               this.switchLatestValue = this.switchState
-               this.switchState = "off"
-               sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "",
-                   displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+               switchLatestValue = "off"
+               switchState = "off"
+               currentSwitch = "off"
+               switches[0].off()
        }
 
        def off(LinkedHashMap metaData) {
                def task = timers.runAfter(metaData["delay"]) {
-                       println("the switch with id:$id is off!")
-                       this.switchLatestValue = this.switchState
-                       this.switchState = "off"
-                       sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "",
-                           displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+                       switchLatestValue = "off"
+                       switchState = "off"
+                       currentSwitch = "off"
+                       switches[0].off()
                }
        }
 
        //By Model Checker
-       def setValue(String value) {
-               println("the switch with id:$id is $value!")
-               this.switchLatestValue = this.switchState
-               this.switchState = value
+       def setValue(LinkedHashMap eventDataMap) {
+               if (eventDataMap["value"] != switches[0].switchState) {
+                       this.switchState = eventDataMap["value"]
+                       this.switchLatestValue = eventDataMap["value"]
+                       switches[0].setValue(eventDataMap["value"])
+                       sendEvent(eventDataMap)
+               }
        }
-       
+
+
        def currentValue(String deviceFeature) {
-               if (deviceFeature == "switch") {
-                       return switchState
-               }
+               switches[0].currentValue(deviceFeature)
        }
 
        def latestValue(String deviceFeature) {
-               if (deviceFeature == "switch") {
-                       return switchLatestValue
-               }
+               switches[0].latestValue(deviceFeature)
+       }
+
+       def getAt(int ix) {
+               switches[ix]
        }
 }