Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / Alarm / Alarms.groovy
1 //Create a class for alarm device
2 package Alarm
3 import Timer.SimulatedTimer
4
5 public class Alarms {
6         int deviceNumbers       
7         List alarms
8         def timers
9         def sendEvent
10
11         //If we have only one device
12         private String id = "alarmID0"
13         private String label = "alarm0"
14         private String displayName = "alarm0"
15         private String alarm = "off"
16         private String currentAlarm = "off"
17         private String alarmLatestValue = "off"
18
19         Alarms(Closure sendEvent, int deviceNumbers) {
20                 this.sendEvent = sendEvent
21                 this.timers = new SimulatedTimer()
22                 this.deviceNumbers = deviceNumbers
23                 this.alarms = []
24
25                 alarms.add(new Alarm(sendEvent, id, label, displayName, this.alarm, this.currentAlarm, this.alarmLatestValue))
26         }
27                 
28         //By Model Checker
29         def setValue(LinkedHashMap eventDataMap) {
30                 if (eventDataMap["value"] != alarms[0].alarm) {
31                         alarms[0].setValue(eventDataMap["value"])
32                         this.alarmLatestValue = alarms[0].alarmLatestValue
33                         this.alarm = alarms[0].alarm
34                         this.currentAlarm = alarms[0].alarm
35                         sendEvent(eventDataMap)
36                 }
37         }
38
39         //Methods for closures
40         def count(Closure Input) {
41                 alarms.count(Input)
42         }
43         def size() {
44                 alarms.size()
45         }
46         def each(Closure Input) {
47                 alarms.each(Input)
48         }
49         def find(Closure Input) {
50                 alarms.find(Input)
51         }
52         def collect(Closure Input) {
53                 alarms.collect(Input)
54         }
55
56         //By Apps
57         def both() {
58                 alarms[0].both()
59                 alarmLatestValue = alarm
60                 alarm = "both"
61                 currentAlarm = "both"
62         }
63
64         def off() {
65                 alarms[0].off()
66                 alarmLatestValue = alarm
67                 alarm = "off"
68                 currentAlarm = "off"
69         }
70
71         def on() {
72                 both()
73         }
74
75         def siren() {
76                 alarms[0].siren()
77                 alarmLatestValue = alarm
78                 alarm = "siren"
79                 currentAlarm = "siren"
80         }
81
82         def strobe() {
83                 alarms[0].strobe()
84                 alarmLatestValue = alarm
85                 alarm = "strobe"
86                 currentAlarm = "strobe"
87         }
88
89         def currentValue(String deviceFeature) {
90                 alarms[0].currentValue(deviceFeature)
91         }
92
93         def latestValue(String deviceFeature) {
94                 alarms[0].latestValue(deviceFeature)
95         }
96
97         def getAt(int ix) {
98                 alarms[ix]
99         }
100 }