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.getInt(0,2)
40 if (initStatus == 0) {
41 this.status = "paused"
42 } else if (initStatus == 1) {
43 this.status = "playing"
45 this.status = "stopped"
47 def initTrack = Verify.getIntFromList(1, 2, 3)
48 this.trackNumber = initTrack
49 def initData = Verify.getBoolean()
51 this.trackData = "someTrack"
53 this.trackData = "someOtherTrack"
55 def initDesc = Verify.getBoolean()
57 this.trackDescription = "someDescriptions"
59 this.trackDescription = "someOtherDescriptions"
61 musicPlayers.add(new MusicPlayer(sendEvent, id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
65 def setValue(LinkedHashMap eventDataMap) {
66 if (eventDataMap["name"] == "status") {
67 if (eventDataMap["value"] != musicPlayers[0].status) {
68 musicPlayers[0].setValue(eventDataMap["value"], "status")
69 this.status = musicPlayers[0].status
70 sendEvent(eventDataMap)
72 } else if (eventDataMap["name"] == "level") {
73 if (eventDataMap["value"] != musicPlayers[0].level) {
74 musicPlayers[0].setValue(eventDataMap["value"], "level")
75 this.level = musicPlayers[0].level
76 sendEvent(eventDataMap)
78 } else if (eventDataMap["name"] == "trackDescription") {
79 if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
80 musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
81 this.trackDescription = musicPlayers[0].trackDescription
82 sendEvent(eventDataMap)
84 } else if (eventDataMap["name"] == "trackData") {
85 if (eventDataMap["value"] != musicPlayers[0].trackData) {
86 musicPlayers[0].setValue(eventDataMap["value"], "trackData")
87 this.trackData = musicPlayers[0].trackData
88 sendEvent(eventDataMap)
90 } else if (eventDataMap["name"] == "mute") {
91 if (eventDataMap["value"] != musicPlayers[0].mute) {
92 musicPlayers[0].setValue(eventDataMap["value"], "mute")
93 this.mute = musicPlayers[0].mute
94 sendEvent(eventDataMap)
99 //Methods for closures
100 def count(Closure Input) {
101 musicPlayers.count(Input)
106 def each(Closure Input) {
107 musicPlayers.each(Input)
109 def find(Closure Input) {
110 musicPlayers.find(Input)
112 def collect(Closure Input) {
113 musicPlayers.collect(Input)
118 if (mute != "muted") {
119 musicPlayers[0].mute()
124 musicPlayers[0].nextTrack()
125 if (status != "playing") {
126 this.status = "playing"
128 this.trackNumber = musicPlayers[0].trackNumber
131 if (status != "paused") {
132 musicPlayers[0].pause()
133 this.status = "paused"
137 if (status != "playing") {
138 musicPlayers[0].play()
139 this.status = "playing"
142 def playTrack(String trackToPlay) {
143 musicPlayers[0].playTrack(trackToPlay)
144 if (status != "playing") {
145 this.status = "playing"
147 this.trackNumber = musicPlayers[0].trackNumber
149 def previousTrack() {
150 musicPlayers[0].previousTrack()
151 if (status != "playing") {
152 this.status = "playing"
154 this.trackNumber = musicPlayers[0].trackNumber
156 def restoreTrack(String trackToRestore) {
157 musicPlayers[0].restoreTrack(trackToRestore)
159 def resumeTrack(String trackToResume) {
160 musicPlayers[0].resumeTrack(trackToResume)
161 if (status != "playing") {
162 this.status = "playing"
165 def setLevel(int level) {
166 if (level != this.level) {
167 musicPlayers[0].setLevel(level)
171 def setTrack(String trackToSet) {
172 musicPlayers[0].setTrack(trackToSet)
173 if (status != "playing") {
174 this.status = "playing"
176 this.trackNumber = musicPlayers[0].trackNumber
179 if (status != "stopped") {
180 musicPlayers[0].stop()
181 this.status = "stopped"
185 def currentValue(String deviceFeature) {
186 musicPlayers[0].currentValue(deviceFeature)