Infrastructure that works for all the locks' group!
[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) {
19                 this.sendEvent = sendEvent
20                 this.timers = new SimulatedTimer()
21                 this.deviceNumbers = deviceNumbers
22                 this.valves = []
23                 
24                 valves.add(new Valve(sendEvent, id, label, displayName, this.valve, this.valveLatestValue))
25         }
26
27         //Methods for closures
28         def count(Closure Input) {
29                 valves.count(Input)
30         }
31         def size() {
32                 valves.size()
33         }
34         def each(Closure Input) {
35                 valves.each(Input)
36         }
37         def find(Closure Input) {
38                 valves.find(Input)
39         }
40         def collect(Closure Input) {
41                 valves.collect(Input)
42         }
43
44         //By Apps
45         def open() {
46                 if (valve != "open")
47                         valves[0].open()
48         }
49
50         def open(LinkedHashMap metaData) {
51                 if (valve != "open") {
52                         def task = timers.runAfter(metaData["delay"]) {
53                                 valves[0].open()
54                         }
55                 }
56         }
57
58         def close() {
59                 if (valve != "closed")
60                         valves[0].close()
61         }
62
63         def close(LinkedHashMap metaData) {
64                 if (valve != "closed") {
65                         def task = timers.runAfter(metaData["delay"]) {
66                                 valves[0].close()
67                         }
68                 }
69         }
70
71         //By Model Checker
72         def setValue(LinkedHashMap eventDataMap) {
73                 if (eventDataMap["value"] != valves[0].valve) {
74                         valves[0].setValue(eventDataMap["value"])
75                         this.valve = valves[0].valve
76                 }
77         }
78
79
80         def currentValue(String deviceFeature) {
81                 valves[0].currentValue(deviceFeature)
82         }
83
84         def latestValue(String deviceFeature) {
85                 valves[0].latestValue(deviceFeature)
86         }
87
88         def getAt(int ix) {
89                 valves[ix]
90         }
91 }