486feeac79a9f468c945db62ec22eb3081d44322
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayers.groovy
1 //Create a class for music player
2 package MusicPlayer
3 import Timer.SimulatedTimer
4
5 //JPF's Verify API
6 import gov.nasa.jpf.vm.Verify
7
8 public class MusicPlayers {
9         private int deviceNumbers
10         private List musicPlayers
11         def sendEvent
12
13         //For one device(We cannot have obj.id)-> We should have obj[0].id
14         private String id = "musicPlayerID0"
15         private String label = "musicPlayer0"
16         private String displayName = "musicPlayer0"
17         private int level = 20
18         private String mute = "unmuted"
19         private String status = "paused"
20         private int trackNumber = 1
21         private String trackData = "someTrack"
22         private String trackDescription = "someDescriptions"
23
24         
25                 
26         MusicPlayers(Closure sendEvent, int deviceNumbers) {
27                 this.sendEvent = sendEvent
28                 this.deviceNumbers = deviceNumbers
29                 this.musicPlayers = []
30
31                 /*def initLevel = Verify.getIntFromList(10, 20, 30)
32                 this.level = initLevel
33                 def initMute = Verify.getBoolean()
34                 if (initMute) {
35                         this.mute = "unmuted"
36                 } else {
37                         this.mute = "muted"
38                 }
39                 def initStatus = Verify.getInt(0,2)
40                 if (initStatus == 0) {
41                         this.status = "paused"
42                 } else if (initStatus == 1) {
43                         this.status = "playing"
44                 } else {
45                         this.status = "stopped"
46                 }
47 <<<<<<< HEAD
48
49 =======
50                 def initTrack = Verify.getIntFromList(1, 2, 3)
51                 this.trackNumber = initTrack 
52                 def initData = Verify.getBoolean()
53                 if (initData) {
54                         this.trackData = "someTrack"
55                 } else {
56                         this.trackData = "someOtherTrack"
57                 }
58                 def initDesc = Verify.getBoolean()
59                 if (initDesc) {
60                         this.trackDescription = "someDescriptions"
61                 } else {
62                         this.trackDescription = "someOtherDescriptions"
63                 }*/
64 >>>>>>> a02c9807815a35c0f57241ee6510a3d312499049
65                 musicPlayers.add(new MusicPlayer(sendEvent, id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
66         }
67
68         //By model checker
69         def setValue(LinkedHashMap eventDataMap) {
70                 if (eventDataMap["name"] == "status") {
71                         if (eventDataMap["value"] != musicPlayers[0].status) {
72                                 this.status = eventDataMap["value"]
73                                 musicPlayers[0].setValue(eventDataMap["value"], "status")
74                                 sendEvent(eventDataMap)
75                         }       
76                 } else if (eventDataMap["name"] == "level") {
77                         if (eventDataMap["value"].toInteger() != musicPlayers[0].level) {
78                                 this.level = eventDataMap["value"].toInteger()
79                                 musicPlayers[0].setValue(eventDataMap["value"], "level")
80                                 sendEvent(eventDataMap)
81                         }
82                 } else if (eventDataMap["name"] == "trackDescription") {
83                         if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
84                                 this.trackDescription = eventDataMap["value"]
85                                 musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
86                                 sendEvent(eventDataMap)
87                         }
88                 } else if (eventDataMap["name"] == "trackData") {
89                         if (eventDataMap["value"] != musicPlayers[0].trackData) {
90                                 this.trackData = eventDataMap["value"]
91                                 musicPlayers[0].setValue(eventDataMap["value"], "trackData")                            
92                                 sendEvent(eventDataMap)
93                         }
94                 } else if (eventDataMap["name"] == "mute") {
95                         if (eventDataMap["value"] != musicPlayers[0].mute) {
96                                 this.mute = eventDataMap["value"]
97                                 musicPlayers[0].setValue(eventDataMap["value"], "mute")
98                                 sendEvent(eventDataMap)
99                         }
100                 }
101         }
102
103         //Methods for closures
104         def count(Closure Input) {
105                 musicPlayers.count(Input)
106         }
107         def size() {
108                 musicPlayers.size()
109         }
110         def each(Closure Input) {
111                 musicPlayers.each(Input)
112         }
113         def find(Closure Input) {
114                 musicPlayers.find(Input)
115         }
116         def sort(Closure Input) {
117                 musicPlayers.sort(Input)
118         }
119         def collect(Closure Input) {
120                 musicPlayers.collect(Input)
121         }
122
123         //methods
124         def mute() {
125                 if (mute != "muted") {
126                         this.mute = "muted"
127                         musicPlayers[0].mute()
128                 }
129         }
130         def nextTrack() {
131                 if (status != "playing") {
132                         this.status = "playing"
133                 }
134                 this.trackNumber = this.trackNumber+1
135                 musicPlayers[0].nextTrack()
136         }
137         def pause() {
138                 if (status != "paused") {
139                         this.status = "paused"
140                         musicPlayers[0].pause()                 
141                 }
142         }
143         def play() {
144                 if (status != "playing") {
145                         this.status = "playing"
146                         musicPlayers[0].play()
147                 }
148         }
149         def playTrack(String trackToPlay) {
150                 if (status != "playing") {
151                         this.status = "playing"
152                 }
153                 musicPlayers[0].playTrack(trackToPlay)
154         }
155         def previousTrack() {
156                 if (status != "playing") {
157                         this.status = "playing"
158                 }
159                 if (this.trackNumber != 1)
160                         this.trackNumber = this.trackNumber-1
161                 musicPlayers[0].previousTrack()
162         }
163         def restoreTrack(String trackToRestore) {
164                 musicPlayers[0].restoreTrack(trackToRestore)
165         }
166         def resumeTrack(String trackToResume) {
167                 if (status != "playing") {
168                         this.status = "playing"
169                 }
170                 musicPlayers[0].resumeTrack(trackToResume)
171         }
172         def setLevel(int level) {
173                 if (level != this.level) {
174                         this.level = level      
175                         musicPlayers[0].setLevel(level)
176                 }
177         }
178         def setTrack(String trackToSet) {
179                 if (status != "playing") {
180                         this.status = "playing"
181                 }
182                 musicPlayers[0].setTrack(trackToSet)
183         }
184         def stop() {
185                 if (status != "stopped") {
186                         this.status = "stopped"
187                         musicPlayers[0].stop()
188                 }
189         }
190         def playText(String text) {
191                 if (status != "playing") {
192                         this.status = "playing"
193                 }
194                 musicPlayers[0].playText(text)
195         }
196
197         def currentValue(String deviceFeature) {
198                 musicPlayers[0].currentValue(deviceFeature)
199         }
200
201         def latestValue(String deviceFeature) {
202                 musicPlayers[0].latestValue(deviceFeature)
203         }
204
205         def getAt(int ix) {
206                 musicPlayers[ix]
207         }
208 }