1 //Create a class for door control device
3 import Timer.SimulatedTimer
6 import gov.nasa.jpf.vm.Verify
8 public class DoorControls {
14 //If we have only one device
15 private String id = "DoorControlID0"
16 private String label = "DoorControl0"
17 private String displayName = "DoorControl0"
18 private String doorState = "closed"
19 private String doorLatestValue = "closed"
21 DoorControls(Closure sendEvent, int deviceNumbers) {
22 this.sendEvent = sendEvent
23 this.timers = new SimulatedTimer()
24 this.deviceNumbers = deviceNumbers
25 this.doorControls = []
27 def init = Verify.getBoolean()
29 this.doorState = "closed"
30 this.doorLatestValue = "closed"
32 this.doorState = "open"
33 this.doorLatestValue = "open"
35 doorControls.add(new DoorControl(sendEvent, id, label, displayName, this.doorState, this.doorLatestValue))
38 //Methods for closures
39 def count(Closure Input) {
40 doorControls.count(Input)
45 def each(Closure Input) {
46 doorControls.each(Input)
48 def find(Closure Input) {
49 doorControls.find(Input)
51 def sort(Closure Input) {
52 doorControls.sort(Input)
54 def collect(Closure Input) {
55 doorControls.collect(Input)
60 if (doorState != "open")
61 doorControls[0].open()
64 def open(LinkedHashMap metaData) {
65 if (doorState != "open") {
66 def task = timers.runAfter(metaData["delay"]) {
67 doorControls[0].open()
73 if (doorState != "closed")
74 doorControls[0].close()
77 def close(LinkedHashMap metaData) {
78 if (doorState != "closed") {
79 def task = timers.runAfter(metaData["delay"]) {
80 doorControls[0].close()
86 def setValue(LinkedHashMap eventDataMap) {
87 if (eventDataMap["value"] != doorControls[0].doorState) {
88 this.doorState = eventDataMap["value"]
89 this.doorLatestValue = eventDataMap["value"]
90 doorControls[0].setValue(eventDataMap["value"])
91 sendEvent(eventDataMap)
96 def currentValue(String deviceFeature) {
97 doorControls[0].currentValue(deviceFeature)
100 def latestValue(String deviceFeature) {
101 doorControls[0].latestValue(deviceFeature)