Commit #5
[smartthings-infrastructure.git] / Lock / Locking.groovy
1 //Create a class for lock device
2 package Lock
3
4 public class Locking{
5         int deviceNumbers       
6         List locks      
7         def sendEvent   
8         def timers
9
10         Locking(Closure sendEvent, int deviceNumbers) {
11                 this.sendEvent = sendEvent
12                 this.timers = new Timer()
13                 timers.cancel() //Timer is ready to use
14                 this.deviceNumbers = deviceNumbers
15                 this.locks = []
16                 if (deviceNumbers == 1) {
17                         locks = [new Locks(sendEvent, 0, "lock0", "locked", "locked")]
18                 } else if (deviceNumbers == 2) {
19                         locks = [new Locks(sendEvent, 0, "lock0", "locked", "locked"), new Locks(sendEvent, 1, "lock1", "locked", "locked")]
20                 } else if (deviceNumbers == 3) {
21                         locks = [new Locks(sendEvent, 0, "lock0", "locked", "locked"), new Locks(sendEvent, 1, "lock1", "locked", "locked")
22                                 ,new Locks(sendEvent, 2, "lock2", "locked", "locked")]
23                 }
24         }
25
26         //By Apps
27         def lock() {
28                 locks*.lock()
29         }
30
31         def lock(LinkedHashMap metaData) {
32                 def task = timers.runAfter(metaData["delay"]) {
33                         locks*.lock()
34                 }
35         }
36
37         def unlock() {
38                 locks*.unlock()
39         }
40
41         def unlock(LinkedHashMap metaData) {
42                 def task = timers.runAfter(metaData["delay"]) {
43                         locks*.unlock()
44                 }
45         }
46
47         //By Model Checker
48         def setValue(LinkedHashMap eventDataMap) {
49                 locks[eventDataMap["deviceId"]].setValue(eventDataMap["value"])
50                 sendEvent(eventDataMap)
51         }
52
53         def currentValue(String deviceFeature) {
54                 if (deviceNumbers == 1) 
55                         locks[0].currentValue(deviceFeature)
56                 else 
57                         locks*.currentValue(deviceFeature)
58         }
59
60         def latestValue(String deviceFeature) {
61                 if (deviceNumbers == 1)
62                         locks[0].latestValue(deviceFeature)
63                 else
64                         locks*.latestValue(deviceFeature)
65         }
66
67         def getAt(int ix) {
68                 locks[ix]
69         }
70 }
71