Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[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 <<<<<<< HEAD
27                 
28 =======
29
30 >>>>>>> e378d6a65b25030f8914dc97f04b81ddff351d9c
31                 def init = Verify.getBoolean()
32                 if (init) {
33                         this.doorState = "closed"
34                         this.doorLatestValue = "closed"
35                 } else {
36                         this.doorState = "open"
37                         this.doorLatestValue = "open"
38                 }
39                 doorControls.add(new DoorControl(sendEvent, id, label, displayName, this.doorState, this.doorLatestValue))
40         }
41
42         //Methods for closures
43         def count(Closure Input) {
44                 doorControls.count(Input)
45         }
46         def size() {
47                 doorControls.size()
48         }
49         def each(Closure Input) {
50                 doorControls.each(Input)
51         }
52         def find(Closure Input) {
53                 doorControls.find(Input)
54         }
55         def collect(Closure Input) {
56                 doorControls.collect(Input)
57         }
58
59         //By Apps
60         def open() {
61                 if (doorState != "open")
62                         doorControls[0].open()
63         }
64
65         def open(LinkedHashMap metaData) {
66                 if (doorState != "open") {
67                         def task = timers.runAfter(metaData["delay"]) {
68                                 doorControls[0].open()
69                         }
70                 }
71         }
72
73         def close() {
74                 if (doorState != "closed")
75                         doorControls[0].close()
76         }
77
78         def close(LinkedHashMap metaData) {
79                 if (doorState != "closed") {
80                         def task = timers.runAfter(metaData["delay"]) {
81                                 doorControls[0].close()
82                         }
83                 }
84         }
85
86         //By Model Checker
87         def setValue(LinkedHashMap eventDataMap) {
88                 if (eventDataMap["value"] != doorControls[0].doorState) {
89                         doorControls[0].setValue(eventDataMap["value"])
90                         this.doorState = doorControls[0].doorState
91                         sendEvent(eventDataMap)
92                 }
93         }
94
95
96         def currentValue(String deviceFeature) {
97                 doorControls[0].currentValue(deviceFeature)
98         }
99
100         def latestValue(String deviceFeature) {
101                 doorControls[0].latestValue(deviceFeature)
102         }
103
104         def getAt(int ix) {
105                 doorControls[ix]
106         }
107 }