5a8aed073d13e4cd3fac2b96b5c88f395f70caca
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayers.groovy
1 //Create a class for music player
2 package MusicPlayer
3 import Timer.SimulatedTimer
4
5 public class MusicPlayers {
6         private int deviceNumbers
7         private List musicPlayers
8         def sendEvent
9
10         //For one device(We cannot have obj.id)-> We should have obj[0].id
11         private String id = "musicPlayerID0"
12         private String label = "musicPlayer0"
13         private String displayName = "musicPlayer0"
14         private int level = 20
15         private int duration = 10
16         private String mute = "unmuted"
17         private String status = "pause"
18         private int trackNumber = 1
19         private String trackData = "someTrack"
20         private String trackDescription = "someDescriptions"
21
22         
23                 
24         MusicPlayers(Closure sendEvent, int deviceNumbers, boolean init) {
25                 this.sendEvent = sendEvent
26                 this.deviceNumbers = deviceNumbers
27                 this.musicPlayers = []
28                 
29                 if (init) {
30                         this.level = 20
31                         this.duration = 10
32                         this.mute = "unmuted"
33                         this.status = "paused"
34                         this.trackNumber = 1
35                         this.trackData = "someTrack"
36                         this.trackDescription = "someDescriptions"
37                 } else {
38                         this.level = 30
39                         this.duration = 20
40                         this.mute = "muted"
41                         this.status = "playing"
42                         this.trackNumber = 2
43                         this.trackData = "someOtherTrack"
44                         this.trackDescription = "someOtherDescriptions"
45                 }
46                 musicPlayers.add(new MusicPlayer(sendEvent, id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
47         }
48
49         //By model checker
50         def setValue(LinkedHashMap eventDataMap) {
51                 if (eventDataMap["name"] == "status") {
52                         if (eventDataMap["value"] != musicPlayers[0].status) {
53                                 this.status = eventDataMap["value"]
54                                 musicPlayers[0].setValue(eventDataMap["value"], "status")
55                                 sendEvent(eventDataMap)
56                         }       
57                 } else if (eventDataMap["name"] == "level") {
58                         if (eventDataMap["value"].toInteger() != musicPlayers[0].level) {
59                                 this.level = eventDataMap["value"].toInteger()
60                                 musicPlayers[0].setValue(eventDataMap["value"], "level")
61                                 sendEvent(eventDataMap)
62                         }
63                 } else if (eventDataMap["name"] == "trackDescription") {
64                         if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
65                                 this.trackDescription = eventDataMap["value"]
66                                 musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
67                                 sendEvent(eventDataMap)
68                         }
69                 } else if (eventDataMap["name"] == "trackData") {
70                         if (eventDataMap["value"] != musicPlayers[0].trackData) {
71                                 this.trackData = eventDataMap["value"]
72                                 musicPlayers[0].setValue(eventDataMap["value"], "trackData")                            
73                                 sendEvent(eventDataMap)
74                         }
75                 } else if (eventDataMap["name"] == "mute") {
76                         if (eventDataMap["value"] != musicPlayers[0].mute) {
77                                 this.mute = eventDataMap["value"]
78                                 musicPlayers[0].setValue(eventDataMap["value"], "mute")
79                                 sendEvent(eventDataMap)
80                         }
81                 }
82         }
83
84         //Methods for closures
85         def count(Closure Input) {
86                 musicPlayers.count(Input)
87         }
88         def size() {
89                 musicPlayers.size()
90         }
91         def each(Closure Input) {
92                 musicPlayers.each(Input)
93         }
94         def find(Closure Input) {
95                 musicPlayers.find(Input)
96         }
97         def sort(Closure Input) {
98                 musicPlayers.sort(Input)
99         }
100         def collect(Closure Input) {
101                 musicPlayers.collect(Input)
102         }
103
104         //methods
105         def on(LinkedHashMap metaData) {
106                 on()
107         }
108         def on() {
109                 if (status != "on") {
110                         this.status = "on"
111                         musicPlayers[0].on()
112                 }
113         }
114         def off(LinkedHashMap metaData) {
115                 off()
116         }
117         def off() {
118                 if (status != "off") {
119                         this.status = "off"
120                         musicPlayers[0].off()
121                 }
122         }
123         def mute(LinkedHashMap metaData) {
124                 mute()
125         }
126         def mute() {
127                 if (mute != "muted") {
128                         this.mute = "muted"
129                         musicPlayers[0].mute()
130                 }
131         }
132         def nextTrack(LinkedHashMap metaData) {
133                 nextTrack()
134         }
135         def nextTrack() {
136                 if (status != "play") {
137                         this.status = "play"
138                 }
139                 this.trackNumber = this.trackNumber+1
140                 musicPlayers[0].nextTrack()
141         }
142         def pause(LinkedHashMap metaData) {
143                 pause()
144         }
145         def pause() {
146                 if (status != "pause") {
147                         this.status = "pause"
148                         musicPlayers[0].pause()                 
149                 }
150         }
151         def play(LinkedHashMap metaData) {
152                 play()
153         }
154         def play() {
155                 if (status != "play") {
156                         this.status = "play"
157                         musicPlayers[0].play()
158                 }
159         }
160         def playTrack(LinkedHashMap metaData) {
161                 playTrack("someTrack")
162         }
163         def playTrackAndResume(String trackData, int duration) {
164                 playTrack(trackData)
165                 if (duration != this.duration) {
166                         this.duration = duration
167                 }
168         }
169         def playTrackAndResume(String trackData, int duration, int level) {
170                 playTrackAndResume(trackData, duration)
171                 if (level != this.level) {
172                         this.level = level
173                 }
174         }
175         def playTrackAtVolume(String trackData, int level) {
176                 playTrack(trackData)
177                 if (level != this.level) {
178                         this.level = level
179                 }
180         }
181         def playTrack(String trackToPlay) {
182                 if (status != "play") {
183                         this.status = "play"
184                 }
185                 musicPlayers[0].playTrack(trackToPlay)
186         }
187         def previousTrack(LinkedHashMap metaData) {
188                 previousTrack()
189         }
190         def previousTrack() {
191                 if (status != "play") {
192                         this.status = "play"
193                 }
194                 if (this.trackNumber != 1)
195                         this.trackNumber = this.trackNumber-1
196                 musicPlayers[0].previousTrack()
197         }
198         def restoreTrack(LinkedHashMap metaData) {
199                 restoreTrack()
200         }
201         def restoreTrack(String trackToRestore) {
202                 musicPlayers[0].restoreTrack(trackToRestore)
203         }
204         def resumeTrack(LinkedHashMap metaData) {
205                 resumeTrack()
206         }
207         def resumeTrack(String trackToResume) {
208                 if (status != "play") {
209                         this.status = "play"
210                 }
211                 musicPlayers[0].resumeTrack(trackToResume)
212         }
213         def setLevel(LinkedHashMap metaData) {
214                 setLevel()
215         }
216         def setLevel(int level) {
217                 if (level != this.level) {
218                         this.level = level      
219                         musicPlayers[0].setLevel(level)
220                 }
221         }
222         def setTrack(LinkedHashMap metaData) {
223                 setTrack()
224         }
225         def setTrack(String trackToSet) {
226                 if (status != "play") {
227                         this.status = "play"
228                 }
229                 musicPlayers[0].setTrack(trackToSet)
230         }
231         def stop(LinkedHashMap metaData) {
232                 stop()
233         }
234         def stop() {
235                 if (status != "stop") {
236                         this.status = "stop"
237                         musicPlayers[0].stop()
238                 }
239         }
240         def playText(LinkedHashMap metaData) {
241                 playText()
242         }
243         def playText(String text) {
244                 if (status != "play") {
245                         this.status = "play"
246                 }
247                 musicPlayers[0].playText(text)
248         }
249
250         def currentValue(String deviceFeature) {
251                 musicPlayers[0].currentValue(deviceFeature)
252         }
253
254         def latestValue(String deviceFeature) {
255                 musicPlayers[0].latestValue(deviceFeature)
256         }
257
258         def getAt(int ix) {
259                 musicPlayers[ix]
260         }
261 }