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