Commit #10: more classes
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayer.groovy
index 6de93c1b8b96c168beb3a890291c7d4c063018aa..1e4d62c9031fe2daeff27c23534379bfe3a64ddd 100644 (file)
@@ -11,9 +11,10 @@ public class MusicPlayer {
        private String mute
        private String status
        private int trackNumber
-       private List trackData
+       private String trackData
+       private String trackDescription
        
-       MusicPlayer(String id, String label, String displayName, int level, String mute, String status, int trackNumber, List trackData) {
+       MusicPlayer(String id, String label, String displayName, int level, String mute, String status, int trackNumber, String trackData, String trackDescription) {
                this.id = id
                this.label = label
                this.displayName = displayName
@@ -22,67 +23,116 @@ public class MusicPlayer {
                this.status = status
                this.trackNumber = trackNumber
                this.trackData = trackData
+               this.trackDescription = trackDescription
+       }
+
+       //By model checker
+       def setValue(String value, String name) {
+               if (name == "status") {
+                       this.status = value
+                       println("the status of the music player with id:$id is changed to $value!")
+               } else if (name == "level") {
+                       this.level = value.toInteger()
+                       println("the level sound of the music player with id:$id is changed to $value!")
+               } else if (name == "trackDescription") {
+                       this.trackDescription = value
+                       println("the trackDescription of the music player with id:$id is changed to $value!")
+               } else if (name == "trackData") {
+                       this.trackData = value
+                       println("the trackData of the music player with id:$id is changed to $value!")
+               } else if (name == "mute") {
+                       this.mute = value
+                       println("the mute state of the music player with id:$id is changed to $value!")
+               }
        }
 
        //methods
        def mute() {
                println("the music player with id:$id is muted!")
                this.mute = "muted"
+               sendEvent([name: "mute", value: "mute", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "mute"]])
        }
        def nextTrack() {
-               if (trackNumber != trackData.size()-1)
-                       trackNumber = trackNumber+1
-               else
-                       trackNumber = 0
-               def trackPlaying = trackData[trackNumber] 
+               trackNumber = trackNumber+1
+               def trackPlaying = trackData
                println("the $trackPlaying is selected!")
                this.status = "playing"
+               sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
+               sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
+               sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
        }
        def pause() {
                println("the music player with id:$id is paused!")
                this.status = "paused"
+               sendEvent([name: "status", value: "paused", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "paused"]])
        }
        def play() {
                println("the music player with id:$id is starting to play!")
                this.status = "playing"
+               sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
        }
        def playTrack(String trackToPlay) {
-               trackNumber = list.indexOf(trackToPlay)
-               def trackPlaying = trackData[trackNumber]
+               def trackPlaying = trackData
                println("the $trackPlaying is selected to play!")
                this.status = "playing"
+               sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
+               sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
+               sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
        }
        def previousTrack() {
-               if (trackNumber != 0)
+               if (trackNumber != 1)
                        trackNumber = trackNumber-1
-               else
-                       trackNumber = trackData.size()-1
-               def trackPlaying = trackData[trackNumber] 
+               def trackPlaying = trackData
                println("the $trackPlaying is selected!")
                this.status = "playing"
+               sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
+               sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
+               sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
        }
        /*def restoreTrack(String trackToRestore) {
                musicPlayers*.restoreTrack(trackToRestore)
        }*/
        def resumeTrack(String trackToResume) {
-               trackNumber = list.indexOf(trackToResume)
-               def trackPlaying = trackData[trackNumber]
+               def trackPlaying = trackData
                println("the $trackPlaying is resumed!")
                this.status = "playing"
+               sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
        }
        def setLevel(int level) {
                this.level = level
                println("the level of sound is changed to $level!")
+               sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "$level"]])
        }
        def setTrack(String trackToSet) {
-               trackNumber = list.indexOf(trackToSet)
-               def trackPlaying = trackData[trackNumber]
+               def trackPlaying = trackData
                println("the $trackPlaying is set!")
                this.status = "playing"
+               sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
+               sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
+               sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
        }
        def stop() {
                println("the music player with id:$id is stopped!")
                this.status = "stopped"
+               sendEvent([name: "status", value: "stopped", deviceId: this.id, descriptionText: "",
+                          displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "stopped"]])
        }
 
        def currentValue(String deviceFeature) {