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