Adding jpf.jar to enable the compilation of apps with the gov.nasa.jpf.vm.Verify...
[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 int id = 20
13         private String label = "lock"
14         private String displayName = "lock"
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                 for (int i = 0;i < deviceNumbers;i++) {
25                         locks.add(new Lock(sendEvent, i+20, label+i.toString(), displayName+i.toString(), this.lockState, this.lockLatestValue))
26                 }
27         }
28
29         //By Apps
30         def lock() {
31                 locks*.lock()
32         }
33
34         def lock(LinkedHashMap metaData) {
35                 def task = timers.runAfter(metaData["delay"]) {
36                         locks*.lock()
37                 }
38         }
39
40         def unlock() {
41                 locks*.unlock()
42         }
43
44
45         def unlock(LinkedHashMap metaData) {
46                 def task = timers.runAfter(metaData["delay"]) {
47                         locks*.unlock()
48                 }
49         }
50
51         //Methods for closures
52         def count(Closure Input) {
53                 locks.count(Input)
54         }
55         def size() {
56                 locks.size()
57         }
58         def each(Closure Input) {
59                 locks.each(Input)
60         }
61
62         //By Model Checker
63         def setValue(LinkedHashMap eventDataMap) {
64                 locks[eventDataMap["deviceId"]].setValue(eventDataMap["value"])
65                 if (deviceNumbers == 1)
66                         this.lockState = locks[eventDataMap["deviceId"]].lockState
67                         this.currentLock = locks[eventDataMap["deviceId"]].lockState
68                         this.lockLatestValue = locks[eventDataMap["deviceId"]].lockLatestValue
69                 sendEvent(eventDataMap)
70         }
71
72         def currentValue(String deviceFeature) {
73                 if (deviceNumbers == 1) 
74                         locks[0].currentValue(deviceFeature)
75                 else 
76                         locks*.currentValue(deviceFeature)
77         }
78
79         def latestValue(String deviceFeature) {
80                 if (deviceNumbers == 1)
81                         locks[0].latestValue(deviceFeature)
82                 else
83                         locks*.latestValue(deviceFeature)
84         }
85
86         def getAt(int ix) {
87                 locks[ix]
88         }
89 }
90