20b0a1114c1aa222b4483279f8ca1b6759c86619
[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                 this.deviceNumbers = deviceNumbers
14                 this.locks = []
15                 int id = 0
16                 for (int i = 0;i < deviceNumbers;i++) {
17                         locks.add(new Locks(sendEvent, id, "lock"+id, "locked", "locked"))//By default locked
18                         id = id+1
19                 }
20         }
21
22         //By Apps
23         def lock() {
24                 locks*.lock()
25         }
26
27         def lock(LinkedHashMap metaData) {
28                 def task = timers.runAfter(metaData["delay"]) {
29                         locks*.lock()
30                 }
31         }
32
33         def unlock() {
34                 locks*.unlock()
35         }
36
37         def unlock(LinkedHashMap metaData) {
38                 def task = timers.runAfter(metaData["delay"]) {
39                         locks*.unlock()
40                 }
41         }
42
43         //By Model Checker
44         def setValue(LinkedHashMap eventDataMap) {
45                 locks[eventDataMap["deviceId"]].setValue(eventDataMap["value"])
46                 sendEvent(eventDataMap)
47         }
48
49         def currentValue(String deviceFeature) {
50                 if (deviceNumbers == 1) 
51                         locks[0].currentValue(deviceFeature)
52                 else 
53                         locks*.currentValue(deviceFeature)
54         }
55
56         def latestValue(String deviceFeature) {
57                 if (deviceNumbers == 1)
58                         locks[0].latestValue(deviceFeature)
59                 else
60                         locks*.latestValue(deviceFeature)
61         }
62
63         def getAt(int ix) {
64                 locks[ix]
65         }
66 }
67