Changing Verify API call scheme for device handlers.
[smartthings-infrastructure.git] / Valve / Valves.groovy
1 //Create a class for valve
2 package Valve
3 import Timer.SimulatedTimer
4
5 public class Valves {
6         int deviceNumbers       
7         List valves
8         def timers
9         def sendEvent
10
11         //If we have only one device
12         private String id = "ValveID0"
13         private String label = "Valve0"
14         private String displayName = "Valve0"
15         private String valve = "closed"
16         private String valveLatestValue = "closed"
17
18         Valves(Closure sendEvent, int deviceNumbers, boolean init) {
19                 this.sendEvent = sendEvent
20                 this.timers = new SimulatedTimer()
21                 this.deviceNumbers = deviceNumbers
22                 this.valves = []
23                 
24                 if (init) {
25                         this.valve = "closed"
26                         this.valveLatestValue = "closed"
27                 } else {
28                         this.valve = "open"
29                         this.valveLatestValue = "open"
30                 }
31                 valves.add(new Valve(sendEvent, id, label, displayName, this.valve, this.valveLatestValue))
32         }
33
34         //Methods for closures
35         def count(Closure Input) {
36                 valves.count(Input)
37         }
38         def size() {
39                 valves.size()
40         }
41         def each(Closure Input) {
42                 valves.each(Input)
43         }
44         def find(Closure Input) {
45                 valves.find(Input)
46         }
47         def sort(Closure Input) {
48                 valves.sort(Input)
49         }
50         def collect(Closure Input) {
51                 valves.collect(Input)
52         }
53
54         //By Apps
55         def open() {
56                 if (valve != "open") {
57                         this.valve = "open"
58                         this.valveLatestValue = "open"
59                         valves[0].open()
60                 }
61         }
62
63         def open(LinkedHashMap metaData) {
64                 if (valve != "open") {
65                         def task = timers.runAfter(metaData["delay"]) {
66                                 this.valve = "open"
67                                 this.valveLatestValue = "open"
68                                 valves[0].open()
69                         }
70                 }
71         }
72
73         def close() {
74                 if (valve != "closed") {
75                         this.valve = "closed"
76                         this.valveLatestValue = "closed"                        
77                         valves[0].close()
78                 }
79         }
80
81         def close(LinkedHashMap metaData) {
82                 if (valve != "closed") {
83                         def task = timers.runAfter(metaData["delay"]) {
84                                 this.valve = "closed"
85                                 this.valveLatestValue = "closed"
86                                 valves[0].close()
87                         }
88                 }
89         }
90
91         //By Model Checker
92         def setValue(LinkedHashMap eventDataMap) {
93                 if (eventDataMap["value"] != valves[0].valve) {
94                         this.valve = eventDataMap["value"]
95                         valves[0].setValue(eventDataMap["value"])
96                 }
97         }
98
99
100         def currentValue(String deviceFeature) {
101                 valves[0].currentValue(deviceFeature)
102         }
103
104         def latestValue(String deviceFeature) {
105                 valves[0].latestValue(deviceFeature)
106         }
107
108         def getAt(int ix) {
109                 valves[ix]
110         }
111 }