Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / Lock / Locks.groovy
1 //Create a class for lock device
2 package Lock
3 import Timer.SimulatedTimer
4
5 public class Locks{
6         int deviceNumbers       
7         List locks      
8         def sendEvent   
9         def timers
10
11         //When we have only one device
12         private String id = "lockID0"
13         private String label = "lock0"
14         private String displayName = "lock0"
15         private String lockState = "locked"
16         private String currentLock = "locked"
17         private String lockLatestValue = "locked"
18
19         Locks(Closure sendEvent, int deviceNumbers) {
20                 this.sendEvent = sendEvent
21                 this.timers = new SimulatedTimer()
22                 this.deviceNumbers = deviceNumbers
23                 this.locks = []
24
25                 locks.add(new Lock(sendEvent,id, label, displayName, this.lockState, this.lockLatestValue))
26         }
27
28         //By Apps
29         def lock() {
30                 locks[0].lock()
31                 lockLatestValue = lockState
32                 lockState = "locked"
33                 currentLock = "locked"
34         }
35
36         def lock(LinkedHashMap metaData) {
37                 def task = timers.runAfter(metaData["delay"]) {
38                         locks[0].lock()
39                         lockLatestValue = lockState
40                         lockState = "locked"
41                         currentLock = "locked"
42                 }
43         }
44
45         def unlock() {
46                 locks[0].unlock()
47                 lockLatestValue = lockState
48                 lockState = "unlocked"
49                 currentLock = "unlocked"
50         }
51
52
53         def unlock(LinkedHashMap metaData) {
54                 def task = timers.runAfter(metaData["delay"]) {
55                         locks[0].unlock()
56                         lockLatestValue = lockState
57                         lockState = "unlocked"
58                         currentLock = "unlocked"
59                 }
60         }
61
62         //Methods for closures
63         def count(Closure Input) {
64                 locks.count(Input)
65         }
66         def size() {
67                 locks.size()
68         }
69         def each(Closure Input) {
70                 locks.each(Input)
71         }
72         def find(Closure Input) {
73                 locks.find(Input)
74         }
75         def collect(Closure Input) {
76                 locks.collect(Input)
77         }
78
79         //By Model Checker
80         def setValue(LinkedHashMap eventDataMap) {
81                 if (eventDataMap["value"] != locks[0].lockState) {
82                         locks[0].setValue(eventDataMap["value"])
83                         this.lockState = locks[0].lockState
84                         this.currentLock = locks[0].lockState
85                         this.lockLatestValue = locks[0].lockLatestValue
86                         sendEvent(eventDataMap)
87                 }
88         }
89
90         def currentValue(String deviceFeature) {
91                 locks[0].currentValue(deviceFeature)
92         }
93
94         def latestValue(String deviceFeature) {
95                 locks[0].latestValue(deviceFeature)
96         }
97
98         def getAt(int ix) {
99                 locks[ix]
100         }
101 }
102