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))
41 if (lockState != "locked") {
42 //lockLatestValue = lockState
43 lockLatestValue = "locked"
45 currentLock = "locked"
50 def lock(LinkedHashMap metaData) {
51 if (lockState != "locked") {
52 def task = timers.runAfter(metaData["delay"]) {
53 //lockLatestValue = lockState
54 lockLatestValue = "locked"
56 currentLock = "locked"
63 if (lockState != "unlocked") {
64 //lockLatestValue = lockState
65 lockLatestValue = "unlocked"
66 lockState = "unlocked"
67 currentLock = "unlocked"
73 def unlock(LinkedHashMap metaData) {
74 if (lockState != "unlocked") {
75 def task = timers.runAfter(metaData["delay"]) {
76 //lockLatestValue = lockState
77 lockLatestValue = "unlocked"
78 lockState = "unlocked"
79 currentLock = "unlocked"
85 //Methods for closures
86 def count(Closure Input) {
92 def each(Closure Input) {
95 def find(Closure Input) {
98 def sort(Closure Input) {
101 def collect(Closure Input) {
106 def setValue(LinkedHashMap eventDataMap) {
107 if (eventDataMap["value"] != locks[0].lockState) {
108 locks[0].setValue(eventDataMap["value"])
109 this.lockState = locks[0].lockState
110 this.currentLock = locks[0].lockState
111 this.lockLatestValue = locks[0].lockLatestValue
112 sendEvent(eventDataMap)
116 def currentValue(String deviceFeature) {
117 locks[0].currentValue(deviceFeature)
120 def latestValue(String deviceFeature) {
121 locks[0].latestValue(deviceFeature)