1 //Create a class for lock device
3 import Timer.SimulatedTimer
6 import gov.nasa.jpf.vm.Verify
14 //When we have only one device
15 private String id = "lockID0"
16 private String label = "lock0"
17 private String displayName = "lock0"
18 private String lockState = "locked"
19 private String currentLock = "locked"
20 private String lockLatestValue = "locked"
22 Locks(Closure sendEvent, int deviceNumbers) {
23 this.sendEvent = sendEvent
24 this.timers = new SimulatedTimer()
25 this.deviceNumbers = deviceNumbers
28 def init = Verify.getBoolean()
30 this.lockState = "locked"
31 this.lockLatestValue = "locked"
33 this.lockState = "unlocked"
34 this.lockLatestValue = "unlocked"
36 locks.add(new Lock(sendEvent,id, label, displayName, this.lockState, this.lockLatestValue))
42 lockLatestValue = lockState
44 currentLock = "locked"
47 def lock(LinkedHashMap metaData) {
48 def task = timers.runAfter(metaData["delay"]) {
50 lockLatestValue = lockState
52 currentLock = "locked"
58 lockLatestValue = lockState
59 lockState = "unlocked"
60 currentLock = "unlocked"
64 def unlock(LinkedHashMap metaData) {
65 def task = timers.runAfter(metaData["delay"]) {
67 lockLatestValue = lockState
68 lockState = "unlocked"
69 currentLock = "unlocked"
73 //Methods for closures
74 def count(Closure Input) {
80 def each(Closure Input) {
83 def find(Closure Input) {
86 def collect(Closure Input) {
91 def setValue(LinkedHashMap eventDataMap) {
92 if (eventDataMap["value"] != locks[0].lockState) {
93 locks[0].setValue(eventDataMap["value"])
94 this.lockState = locks[0].lockState
95 this.currentLock = locks[0].lockState
96 this.lockLatestValue = locks[0].lockLatestValue
97 sendEvent(eventDataMap)
101 def currentValue(String deviceFeature) {
102 locks[0].currentValue(deviceFeature)
105 def latestValue(String deviceFeature) {
106 locks[0].latestValue(deviceFeature)