1 //Create a class for music player
3 import Timer.SimulatedTimer
6 import gov.nasa.jpf.vm.Verify
8 public class MusicPlayers {
9 private int deviceNumbers
10 private List musicPlayers
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"
26 MusicPlayers(Closure sendEvent, int deviceNumbers) {
27 this.sendEvent = sendEvent
28 this.deviceNumbers = deviceNumbers
29 this.musicPlayers = []
31 def initLevel = Verify.getIntFromList(10, 20, 30)
32 this.level = initLevel
33 def initMute = Verify.getBoolean()
39 def initStatus = Verify.getBoolean()
41 this.status = "paused"
43 this.status = "playing"
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)
106 if (mute != "muted") {
108 musicPlayers[0].mute()
112 if (status != "playing") {
113 this.status = "playing"
115 this.trackNumber = this.trackNumber+1
116 musicPlayers[0].nextTrack()
119 if (status != "paused") {
120 this.status = "paused"
121 musicPlayers[0].pause()
125 if (status != "playing") {
126 this.status = "playing"
127 musicPlayers[0].play()
130 def playTrack(String trackToPlay) {
131 if (status != "playing") {
132 this.status = "playing"
134 musicPlayers[0].playTrack(trackToPlay)
136 def previousTrack() {
137 if (status != "playing") {
138 this.status = "playing"
140 if (this.trackNumber != 1)
141 this.trackNumber = this.trackNumber-1
142 musicPlayers[0].previousTrack()
144 def restoreTrack(String trackToRestore) {
145 musicPlayers[0].restoreTrack(trackToRestore)
147 def resumeTrack(String trackToResume) {
148 if (status != "playing") {
149 this.status = "playing"
151 musicPlayers[0].resumeTrack(trackToResume)
153 def setLevel(int level) {
154 if (level != this.level) {
156 musicPlayers[0].setLevel(level)
159 def setTrack(String trackToSet) {
160 if (status != "playing") {
161 this.status = "playing"
163 musicPlayers[0].setTrack(trackToSet)
166 if (status != "stopped") {
167 this.status = "stopped"
168 musicPlayers[0].stop()
171 def playText(String text) {
172 if (status != "playing") {
173 this.status = "playing"
175 musicPlayers[0].playText(text)
178 def currentValue(String deviceFeature) {
179 musicPlayers[0].currentValue(deviceFeature)
182 def latestValue(String deviceFeature) {
183 musicPlayers[0].latestValue(deviceFeature)