Adding Locks group in run.sh
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayers.groovy
index 9968595e27ba6fa88bb7cbac2261c262aa4e0f34..bce3fc7d40612d6139e29c67317e41163df47b3a 100644 (file)
@@ -2,6 +2,8 @@
 package MusicPlayer
 import Timer.SimulatedTimer
 
+//JPF's Verify API
+import gov.nasa.jpf.vm.Verify
 
 public class MusicPlayers {
        private int deviceNumbers
@@ -14,9 +16,10 @@ public class MusicPlayers {
        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"
 
        
                
@@ -25,7 +28,72 @@ public class MusicPlayers {
                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
@@ -47,37 +115,71 @@ public class MusicPlayers {
 
        //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) {