92f6c550a9db80f957165d58bc7b713a946d99de
[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 playSoundAndTrack(String trackData, int duration, int trackNumber, int level) {
176                 playTrackAndResume(trackData, duration)
177                 if (level != this.level) {
178                         this.level = level
179                 }
180                 if (trackNumber!= this.trackNumber) {
181                         this.trackNumber = trackNumber
182                 }
183         }
184         def playTrackAtVolume(String trackData, int level) {
185                 playTrack(trackData)
186                 if (level != this.level) {
187                         this.level = level
188                 }
189         }
190         def playTrack(String trackToPlay) {
191                 if (status != "play") {
192                         this.status = "play"
193                 }
194                 musicPlayers[0].playTrack(trackToPlay)
195         }
196         def previousTrack(LinkedHashMap metaData) {
197                 previousTrack()
198         }
199         def previousTrack() {
200                 if (status != "play") {
201                         this.status = "play"
202                 }
203                 if (this.trackNumber != 1)
204                         this.trackNumber = this.trackNumber-1
205                 musicPlayers[0].previousTrack()
206         }
207         def restoreTrack(LinkedHashMap metaData) {
208                 restoreTrack()
209         }
210         def restoreTrack(String trackToRestore) {
211                 musicPlayers[0].restoreTrack(trackToRestore)
212         }
213         def resumeTrack(LinkedHashMap metaData) {
214                 resumeTrack()
215         }
216         def resumeTrack(String trackToResume) {
217                 if (status != "play") {
218                         this.status = "play"
219                 }
220                 musicPlayers[0].resumeTrack(trackToResume)
221         }
222         def setLevel(LinkedHashMap metaData) {
223                 setLevel()
224         }
225         def setLevel(int level) {
226                 if (level != this.level) {
227                         this.level = level      
228                         musicPlayers[0].setLevel(level)
229                 }
230         }
231         def setTrack(LinkedHashMap metaData) {
232                 setTrack()
233         }
234         def setTrack(String trackToSet) {
235                 if (status != "play") {
236                         this.status = "play"
237                 }
238                 musicPlayers[0].setTrack(trackToSet)
239         }
240         def stop(LinkedHashMap metaData) {
241                 stop()
242         }
243         def stop() {
244                 if (status != "stop") {
245                         this.status = "stop"
246                         musicPlayers[0].stop()
247                 }
248         }
249         def statesSince(String info, Date dateObj, LinkedHashMap map) {
250                 return musicPlayers[0].statesSince()
251         }
252         def playText(LinkedHashMap metaData) {
253                 playText()
254         }
255         def playText(String text) {
256                 if (status != "play") {
257                         this.status = "play"
258                 }
259                 musicPlayers[0].playText(text)
260         }
261
262         def currentValue(String deviceFeature) {
263                 musicPlayers[0].currentValue(deviceFeature)
264         }
265
266         def latestValue(String deviceFeature) {
267                 musicPlayers[0].latestValue(deviceFeature)
268         }
269
270         def getAt(int ix) {
271                 musicPlayers[ix]
272         }
273 }