Changes in classes: new concept for latest value + all types of events generated...
[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 sort(Closure Input) {
41                 valves.sort(Input)
42         }
43         def collect(Closure Input) {
44                 valves.collect(Input)
45         }
46
47         //By Apps
48         def open() {
49                 if (valve != "open") {
50                         this.valve = "open"
51                         this.valveLatestValue = "open"
52                         valves[0].open()
53                 }
54         }
55
56         def open(LinkedHashMap metaData) {
57                 if (valve != "open") {
58                         def task = timers.runAfter(metaData["delay"]) {
59                                 this.valve = "open"
60                                 this.valveLatestValue = "open"
61                                 valves[0].open()
62                         }
63                 }
64         }
65
66         def close() {
67                 if (valve != "closed") {
68                         this.valve = "closed"
69                         this.valveLatestValue = "closed"                        
70                         valves[0].close()
71                 }
72         }
73
74         def close(LinkedHashMap metaData) {
75                 if (valve != "closed") {
76                         def task = timers.runAfter(metaData["delay"]) {
77                                 this.valve = "closed"
78                                 this.valveLatestValue = "closed"
79                                 valves[0].close()
80                         }
81                 }
82         }
83
84         //By Model Checker
85         def setValue(LinkedHashMap eventDataMap) {
86                 if (eventDataMap["value"] != valves[0].valve) {
87                         this.valve = eventDataMap["value"]
88                         valves[0].setValue(eventDataMap["value"])
89                 }
90         }
91
92
93         def currentValue(String deviceFeature) {
94                 valves[0].currentValue(deviceFeature)
95         }
96
97         def latestValue(String deviceFeature) {
98                 valves[0].latestValue(deviceFeature)
99         }
100
101         def getAt(int ix) {
102                 valves[ix]
103         }
104 }