Completing model-check automation script with result extraction.
[smartthings-infrastructure.git] / DoorControl / DoorControls.groovy
1 //Create a class for door control device
2 package DoorControl
3 import Timer.SimulatedTimer
4
5 //JPF's Verify API
6 import gov.nasa.jpf.vm.Verify
7
8 public class DoorControls {
9         int deviceNumbers       
10         List doorControls
11         def timers
12         def sendEvent
13
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"
20
21         DoorControls(Closure sendEvent, int deviceNumbers) {
22                 this.sendEvent = sendEvent
23                 this.timers = new SimulatedTimer()
24                 this.deviceNumbers = deviceNumbers
25                 this.doorControls = []
26
27                 def init = Verify.getBoolean()
28                 if (init) {
29                         this.doorState = "closed"
30                         this.doorLatestValue = "closed"
31                 } else {
32                         this.doorState = "open"
33                         this.doorLatestValue = "open"
34                 }
35                 doorControls.add(new DoorControl(sendEvent, id, label, displayName, this.doorState, this.doorLatestValue))
36         }
37
38         //Methods for closures
39         def count(Closure Input) {
40                 doorControls.count(Input)
41         }
42         def size() {
43                 doorControls.size()
44         }
45         def each(Closure Input) {
46                 doorControls.each(Input)
47         }
48         def find(Closure Input) {
49                 doorControls.find(Input)
50         }
51         def collect(Closure Input) {
52                 doorControls.collect(Input)
53         }
54
55         //By Apps
56         def open() {
57                 doorControls[0].on()
58         }
59
60         def open(LinkedHashMap metaData) {
61                 def task = timers.runAfter(metaData["delay"]) {
62                         doorControls[0].on()
63                 }
64         }
65
66         def close() {
67                 doorControls[0].off()
68         }
69
70         def close(LinkedHashMap metaData) {
71                 def task = timers.runAfter(metaData["delay"]) {
72                         doorControls[0].off()
73                 }
74         }
75
76         //By Model Checker
77         def setValue(LinkedHashMap eventDataMap) {
78                 if (eventDataMap["value"] != doorControls[0].doorState) {
79                         doorControls[0].setValue(eventDataMap["value"])
80                         this.doorState = doorControls[0].doorState
81                         sendEvent(eventDataMap)
82                 }
83         }
84
85
86         def currentValue(String deviceFeature) {
87                 doorControls[0].currentValue(deviceFeature)
88         }
89
90         def latestValue(String deviceFeature) {
91                 doorControls[0].latestValue(deviceFeature)
92         }
93
94         def getAt(int ix) {
95                 doorControls[ix]
96         }
97 }