Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / Battery / Batteries.groovy
1 //Create a class for battery
2 package Battery
3 import Timer.SimulatedTimer
4
5 //JPF's Verify API
6 import gov.nasa.jpf.vm.Verify
7
8 public class Batteries {
9         private int deviceNumbers
10         private List batteries
11         def sendEvent
12
13         //For one device(We cannot have obj.id)-> We should have obj[0].id
14         private String id = "batteryID0"
15         private String label = "battery0"
16         private String displayName = "battery0"
17         private int battery = 50
18         private int currentBattery = 50
19         private int batteryLatestValue = 50
20
21                 
22         Batteries(Closure sendEvent, int deviceNumbers) {
23                 this.sendEvent = sendEvent              
24                 this.deviceNumbers = deviceNumbers
25                 this.batteries = []
26
27                 //def init = Verify.getIntFromList(30, 50, 70)
28                 //this.battery = init
29
30                 batteries.add(new Battery(id, label, displayName, this.battery))
31         }
32
33         //By Model Checker
34         def setValue(LinkedHashMap eventDataMap) {
35                 if (eventDataMap["value"].toInteger() != batteries[0].battery) {
36                         this.battery = eventDataMap["value"].toInteger()
37                         this.currentBattery = eventDataMap["value"].toInteger()
38                         this.batteryLatestValue = eventDataMap["value"].toInteger()
39                         batteries[0].setValue(eventDataMap["value"])
40                         sendEvent(eventDataMap)
41                 }
42         }
43
44         //Methods for closures
45         def count(Closure Input) {
46                 batteries.count(Input)
47         }
48         def size() {
49                 batteries.size()
50         }
51         def each(Closure Input) {
52                 batteries.each(Input)
53         }
54         def sort(Closure Input) {
55                 batteries.sort(Input)
56         }
57         def find(Closure Input) {
58                 batteries.find(Input)
59         }
60         def collect(Closure Input) {
61                 batteries.collect(Input)
62         }
63
64
65         def currentValue(String deviceFeature) {
66                 batteries[0].currentValue(deviceFeature)//It is called if we have only one device
67         }
68
69         def latestValue(String deviceFeature) {
70                 batteries[0].latestValue(deviceFeature)//It is called if we have only one device
71         }
72
73         def getAt(int ix) {
74                 batteries[ix]
75         }
76 }