1 //Create a class for music player
3 import Timer.SimulatedTimer
5 public class MusicPlayers {
6 private int deviceNumbers
7 private List musicPlayers
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"
24 MusicPlayers(Closure sendEvent, int deviceNumbers, boolean init) {
25 this.sendEvent = sendEvent
26 this.deviceNumbers = deviceNumbers
27 this.musicPlayers = []
33 this.status = "paused"
35 this.trackData = "someTrack"
36 this.trackDescription = "someDescriptions"
41 this.status = "playing"
43 this.trackData = "someOtherTrack"
44 this.trackDescription = "someOtherDescriptions"
46 musicPlayers.add(new MusicPlayer(sendEvent, id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
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)
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)
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)
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)
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)
84 //Methods for closures
85 def count(Closure Input) {
86 musicPlayers.count(Input)
91 def each(Closure Input) {
92 musicPlayers.each(Input)
94 def find(Closure Input) {
95 musicPlayers.find(Input)
97 def sort(Closure Input) {
98 musicPlayers.sort(Input)
100 def collect(Closure Input) {
101 musicPlayers.collect(Input)
105 def on(LinkedHashMap metaData) {
109 if (status != "on") {
114 def off(LinkedHashMap metaData) {
118 if (status != "off") {
120 musicPlayers[0].off()
123 def mute(LinkedHashMap metaData) {
127 if (mute != "muted") {
129 musicPlayers[0].mute()
132 def nextTrack(LinkedHashMap metaData) {
136 if (status != "play") {
139 this.trackNumber = this.trackNumber+1
140 musicPlayers[0].nextTrack()
142 def pause(LinkedHashMap metaData) {
146 if (status != "pause") {
147 this.status = "pause"
148 musicPlayers[0].pause()
151 def play(LinkedHashMap metaData) {
155 if (status != "play") {
157 musicPlayers[0].play()
160 def playTrack(LinkedHashMap metaData) {
161 playTrack("someTrack")
163 def playTrackAndResume(String trackData, int duration) {
165 if (duration != this.duration) {
166 this.duration = duration
169 def playTrackAndResume(String trackData, int duration, int level) {
170 playTrackAndResume(trackData, duration)
171 if (level != this.level) {
175 def playTrackAtVolume(String trackData, int level) {
177 if (level != this.level) {
181 def playTrack(String trackToPlay) {
182 if (status != "play") {
185 musicPlayers[0].playTrack(trackToPlay)
187 def previousTrack(LinkedHashMap metaData) {
190 def previousTrack() {
191 if (status != "play") {
194 if (this.trackNumber != 1)
195 this.trackNumber = this.trackNumber-1
196 musicPlayers[0].previousTrack()
198 def restoreTrack(LinkedHashMap metaData) {
201 def restoreTrack(String trackToRestore) {
202 musicPlayers[0].restoreTrack(trackToRestore)
204 def resumeTrack(LinkedHashMap metaData) {
207 def resumeTrack(String trackToResume) {
208 if (status != "play") {
211 musicPlayers[0].resumeTrack(trackToResume)
213 def setLevel(LinkedHashMap metaData) {
216 def setLevel(int level) {
217 if (level != this.level) {
219 musicPlayers[0].setLevel(level)
222 def setTrack(LinkedHashMap metaData) {
225 def setTrack(String trackToSet) {
226 if (status != "play") {
229 musicPlayers[0].setTrack(trackToSet)
231 def stop(LinkedHashMap metaData) {
235 if (status != "stop") {
237 musicPlayers[0].stop()
240 def playText(LinkedHashMap metaData) {
243 def playText(String text) {
244 if (status != "play") {
247 musicPlayers[0].playText(text)
250 def currentValue(String deviceFeature) {
251 musicPlayers[0].currentValue(deviceFeature)
254 def latestValue(String deviceFeature) {
255 musicPlayers[0].latestValue(deviceFeature)