Commit #8: New version of extractor with running the preferences method make things...
[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 int id = 40
13         private String label = "DoorControl"
14         private String displayName = "DoorControl"
15         private String doorState = "closed"
16         private String doorLatestValue = "closed"
17
18         DoorControls(Closure sendEvent, int deviceNumbers) {
19                 this.sendEvent = sendEvent
20                 this.timers = new SimulatedTimer()
21                 this.deviceNumbers = deviceNumbers
22                 this.doorControls = []
23                 for (int i = 0;i < deviceNumbers;i++) {
24                         doorControls.add(new DoorControl(sendEvent, i+60, label+i.toString(), displayName+i.toString(), this.doorState, this.doorLatestValue))
25                 }
26         }
27
28         //Methods for closures
29         def count(Closure Input) {
30                 doorControls.count(Input)
31         }
32         def size() {
33                 doorControls.size()
34         }
35         def each(Closure Input) {
36                 doorControls.each(Input)
37         }
38
39         //By Apps
40         def open() {
41                 doorControls*.on()
42         }
43
44         def open(LinkedHashMap metaData) {
45                 def task = timers.runAfter(metaData["delay"]) {
46                         doorControls*.on()
47                 }
48         }
49
50         def close() {
51                 doorControls*.off()
52         }
53
54         def close(LinkedHashMap metaData) {
55                 def task = timers.runAfter(metaData["delay"]) {
56                         doorControls*.off()
57                 }
58         }
59
60         //By Model Checker
61         def setValue(LinkedHashMap eventDataMap) {
62                 doorControls[eventDataMap["deviceId"]].setValue(eventDataMap["value"])
63                 if (deviceNumbers == 1)
64                         this.doorState = doorControls[eventDataMap["deviceId"]].doorState
65                 sendEvent(eventDataMap)
66         }
67
68
69         def currentValue(String deviceFeature) {
70                 if (deviceNumbers == 1)
71                         doorControls[0].currentValue(deviceFeature)
72                 else
73                         doorControls*.currentValue(deviceFeature)
74         }
75
76         def latestValue(String deviceFeature) {
77                 if (deviceNumbers == 1)
78                         doorControls[0].latestValue(deviceFeature)
79                 else
80                         doorControls*.latestValue(deviceFeature)
81         }
82
83         def getAt(int ix) {
84                 doorControls[ix]
85         }
86 }