package MusicPlayer
import Timer.SimulatedTimer
+//JPF's Verify API
+import gov.nasa.jpf.vm.Verify
public class MusicPlayers {
private int deviceNumbers
private String displayName = "musicPlayer0"
private int level = 20
private String mute = "unmuted"
- private String status = "pause"
- private int trackNumber = 0
- private List trackData = ["track1", "track2", "track3", "track4"]
+ private String status = "paused"
+ private int trackNumber = 1
+ private String trackData = "someTrack"
+ private String trackDescription = "someDescriptions"
this.deviceNumbers = deviceNumbers
this.musicPlayers = []
- musicPlayers.add(new MusicPlayer(id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData))
+ /*def initLevel = Verify.getIntFromList(10, 20, 30)
+ this.level = initLevel
+ def initMute = Verify.getBoolean()
+ if (initMute) {
+ this.mute = "unmuted"
+ } else {
+ this.mute = "muted"
+ }
+ def initStatus = Verify.getInt(0,2)
+ if (initStatus == 0) {
+ this.status = "paused"
+ } else if (initStatus == 1) {
+ this.status = "playing"
+ } else {
+ this.status = "stopped"
+ }
+ def initTrack = Verify.getIntFromList(1, 2, 3)
+ this.trackNumber = initTrack
+ def initData = Verify.getBoolean()
+ if (initData) {
+ this.trackData = "someTrack"
+ } else {
+ this.trackData = "someOtherTrack"
+ }
+ def initDesc = Verify.getBoolean()
+ if (initDesc) {
+ this.trackDescription = "someDescriptions"
+ } else {
+ this.trackDescription = "someOtherDescriptions"
+ }*/
+ musicPlayers.add(new MusicPlayer(sendEvent, id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
+ }
+
+ //By model checker
+ def setValue(LinkedHashMap eventDataMap) {
+ if (eventDataMap["name"] == "status") {
+ if (eventDataMap["value"] != musicPlayers[0].status) {
+ musicPlayers[0].setValue(eventDataMap["value"], "status")
+ this.status = musicPlayers[0].status
+ sendEvent(eventDataMap)
+ }
+ } else if (eventDataMap["name"] == "level") {
+ if (eventDataMap["value"] != musicPlayers[0].level) {
+ musicPlayers[0].setValue(eventDataMap["value"], "level")
+ this.level = musicPlayers[0].level
+ sendEvent(eventDataMap)
+ }
+ } else if (eventDataMap["name"] == "trackDescription") {
+ if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
+ musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
+ this.trackDescription = musicPlayers[0].trackDescription
+ sendEvent(eventDataMap)
+ }
+ } else if (eventDataMap["name"] == "trackData") {
+ if (eventDataMap["value"] != musicPlayers[0].trackData) {
+ musicPlayers[0].setValue(eventDataMap["value"], "trackData")
+ this.trackData = musicPlayers[0].trackData
+ sendEvent(eventDataMap)
+ }
+ } else if (eventDataMap["name"] == "mute") {
+ if (eventDataMap["value"] != musicPlayers[0].mute) {
+ musicPlayers[0].setValue(eventDataMap["value"], "mute")
+ this.mute = musicPlayers[0].mute
+ sendEvent(eventDataMap)
+ }
+ }
}
//Methods for closures
//methods
def mute() {
- musicPlayers[0].mute()
+ if (mute != "muted") {
+ musicPlayers[0].mute()
+ this.mute = "muted"
+ }
}
def nextTrack() {
musicPlayers[0].nextTrack()
+ if (status != "playing") {
+ this.status = "playing"
+ }
+ this.trackNumber = musicPlayers[0].trackNumber
}
def pause() {
- musicPlayers[0].pause()
+ if (status != "paused") {
+ musicPlayers[0].pause()
+ this.status = "paused"
+ }
}
def play() {
- musicPlayers[0].play()
+ if (status != "playing") {
+ musicPlayers[0].play()
+ this.status = "playing"
+ }
}
def playTrack(String trackToPlay) {
musicPlayers[0].playTrack(trackToPlay)
+ if (status != "playing") {
+ this.status = "playing"
+ }
+ this.trackNumber = musicPlayers[0].trackNumber
}
def previousTrack() {
musicPlayers[0].previousTrack()
+ if (status != "playing") {
+ this.status = "playing"
+ }
+ this.trackNumber = musicPlayers[0].trackNumber
}
def restoreTrack(String trackToRestore) {
musicPlayers[0].restoreTrack(trackToRestore)
}
def resumeTrack(String trackToResume) {
musicPlayers[0].resumeTrack(trackToResume)
+ if (status != "playing") {
+ this.status = "playing"
+ }
}
def setLevel(int level) {
- musicPlayers[0].setLevel(level)
+ if (level != this.level) {
+ musicPlayers[0].setLevel(level)
+ this.level = level
+ }
}
def setTrack(String trackToSet) {
musicPlayers[0].setTrack(trackToSet)
+ if (status != "playing") {
+ this.status = "playing"
+ }
+ this.trackNumber = musicPlayers[0].trackNumber
}
def stop() {
- musicPlayers[0].stop()
+ if (status != "stopped") {
+ musicPlayers[0].stop()
+ this.status = "stopped"
+ }
}
def currentValue(String deviceFeature) {