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