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 = "pause"
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 initTrack = Verify.getIntFromList(1, 2, 3)
34 this.trackNumber = initTrack
35 def initMute = Verify.getBoolean()
41 def initStatus = Verify.getBoolean()
47 def initTrackData = Verify.getBoolean()
49 this.trackData = "someTrack"
51 this.trackData = "someOtherTrack"
53 def initTrackDesc = Verify.getBoolean()
55 this.trackDescription = "someDescriptions"
57 this.trackDescription = "someOtherDescriptions"
60 musicPlayers.add(new MusicPlayer(id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
64 def setValue(LinkedHashMap eventDataMap) {
65 if (eventDataMap["name"] == "status") {
66 if (eventDataMap["value"] != musicPlayers[0].status) {
67 musicPlayers[0].setValue(eventDataMap["value"], "status")
68 this.status = musicPlayers[0].status
69 sendEvent(eventDataMap)
71 } else if (eventDataMap["name"] == "level") {
72 if (eventDataMap["value"] != musicPlayers[0].level) {
73 musicPlayers[0].setValue(eventDataMap["value"], "level")
74 this.level = musicPlayers[0].level
75 sendEvent(eventDataMap)
77 } else if (eventDataMap["name"] == "trackDescription") {
78 if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
79 musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
80 this.trackDescription = musicPlayers[0].trackDescription
81 sendEvent(eventDataMap)
83 } else if (eventDataMap["name"] == "trackData") {
84 if (eventDataMap["value"] != musicPlayers[0].trackData) {
85 musicPlayers[0].setValue(eventDataMap["value"], "trackData")
86 this.trackData = musicPlayers[0].trackData
87 sendEvent(eventDataMap)
89 } else if (eventDataMap["name"] == "mute") {
90 if (eventDataMap["value"] != musicPlayers[0].mute) {
91 musicPlayers[0].setValue(eventDataMap["value"], "mute")
92 this.mute = musicPlayers[0].mute
93 sendEvent(eventDataMap)
98 //Methods for closures
99 def count(Closure Input) {
100 musicPlayers.count(Input)
105 def each(Closure Input) {
106 musicPlayers.each(Input)
108 def find(Closure Input) {
109 musicPlayers.find(Input)
111 def collect(Closure Input) {
112 musicPlayers.collect(Input)
117 musicPlayers[0].mute()
121 musicPlayers[0].nextTrack()
122 this.status = "playing"
123 this.trackNumber = musicPlayers[0].trackNumber
126 musicPlayers[0].pause()
127 this.status = "paused"
130 musicPlayers[0].play()
131 this.status = "playing"
133 def playTrack(String trackToPlay) {
134 musicPlayers[0].playTrack(trackToPlay)
135 this.status = "playing"
136 this.trackNumber = musicPlayers[0].trackNumber
138 def previousTrack() {
139 musicPlayers[0].previousTrack()
140 this.status = "playing"
141 this.trackNumber = musicPlayers[0].trackNumber
143 def restoreTrack(String trackToRestore) {
144 musicPlayers[0].restoreTrack(trackToRestore)
146 def resumeTrack(String trackToResume) {
147 musicPlayers[0].resumeTrack(trackToResume)
148 this.status = "playing"
150 def setLevel(int level) {
151 musicPlayers[0].setLevel(level)
154 def setTrack(String trackToSet) {
155 musicPlayers[0].setTrack(trackToSet)
156 this.status = "playing"
157 this.trackNumber = musicPlayers[0].trackNumber
160 musicPlayers[0].stop()
161 this.status = "stopped"
164 def currentValue(String deviceFeature) {
165 musicPlayers[0].currentValue(deviceFeature)