//Create a class for door control device
package DoorControl
-import Timer.SimulatedTimer
+import SmartThing.SmartThings
-//JPF's Verify API
-import gov.nasa.jpf.vm.Verify
+public class DoorControls extends SmartThings {
+ List doorControls = new ArrayList()
-public class DoorControls {
- int deviceNumbers
- List doorControls
- def timers
- def sendEvent
+ DoorControls(Closure sendEvent, boolean init) {
+ // Only initialize one time since we only have one device for each capability
+ doorControls = smartThings
- //If we have only one device
- private String id = "DoorControlID0"
- private String label = "DoorControl0"
- private String displayName = "DoorControl0"
- private String doorState = "closed"
- private String doorLatestValue = "closed"
+ // Initialization
+ String id = "doorControlID0"
+ String label = "doorControl"
+ String displayName = "doorController"
+ String door
- DoorControls(Closure sendEvent, int deviceNumbers) {
- this.sendEvent = sendEvent
- this.timers = new SimulatedTimer()
- this.deviceNumbers = deviceNumbers
- this.doorControls = []
-
- def init = Verify.getBoolean()
- if (init) {
- this.doorState = "closed"
- this.doorLatestValue = "closed"
- } else {
- this.doorState = "open"
- this.doorLatestValue = "open"
- }
- doorControls.add(new DoorControl(sendEvent, id, label, displayName, this.doorState, this.doorLatestValue))
- }
+ if (init)
+ door = "open"
+ else
+ door = "closed"
- //Methods for closures
- def count(Closure Input) {
- doorControls.count(Input)
- }
- def size() {
- doorControls.size()
- }
- def each(Closure Input) {
- doorControls.each(Input)
- }
- def find(Closure Input) {
- doorControls.find(Input)
- }
- def collect(Closure Input) {
- doorControls.collect(Input)
+ doorControls.add(new DoorControl(sendEvent, id, label, displayName, door))
}
- //By Apps
+ // Methods to set values
def open() {
- if (doorState != "open")
- doorControls[0].open()
+ doorControls[0].open()
}
def open(LinkedHashMap metaData) {
- if (doorState != "open") {
- def task = timers.runAfter(metaData["delay"]) {
- doorControls[0].open()
- }
- }
+ open()
}
def close() {
- if (doorState != "closed")
- doorControls[0].close()
+ doorControls[0].close()
}
def close(LinkedHashMap metaData) {
- if (doorState != "closed") {
- def task = timers.runAfter(metaData["delay"]) {
- doorControls[0].close()
- }
- }
- }
-
- //By Model Checker
- def setValue(LinkedHashMap eventDataMap) {
- if (eventDataMap["value"] != doorControls[0].doorState) {
- doorControls[0].setValue(eventDataMap["value"])
- this.doorState = doorControls[0].doorState
- sendEvent(eventDataMap)
- }
- }
-
-
- def currentValue(String deviceFeature) {
- doorControls[0].currentValue(deviceFeature)
- }
-
- def latestValue(String deviceFeature) {
- doorControls[0].latestValue(deviceFeature)
- }
-
- def getAt(int ix) {
- doorControls[ix]
+ close()
}
}