Infrastruction modification
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayers.groovy
index 92f6c550a9db80f957165d58bc7b713a946d99de..14c8ecb9e3c27b8a0a5119705aadeb50fb9e7775 100644 (file)
 //Create a class for music player
 package MusicPlayer
-import Timer.SimulatedTimer
-
-public class MusicPlayers {
-       private int deviceNumbers
-       private List musicPlayers
-       def sendEvent
-
-       //For one device(We cannot have obj.id)-> We should have obj[0].id
-       private String id = "musicPlayerID0"
-       private String label = "musicPlayer0"
-       private String displayName = "musicPlayer0"
-       private int level = 20
-       private int duration = 10
-       private String mute = "unmuted"
-       private String status = "pause"
-       private int trackNumber = 1
-       private String trackData = "someTrack"
-       private String trackDescription = "someDescriptions"
+import SmartThing.SmartThings
 
+public class MusicPlayers extends SmartThings {
+       List musicPlayers = new ArrayList()
        
-               
-       MusicPlayers(Closure sendEvent, int deviceNumbers, boolean init) {
-               this.sendEvent = sendEvent
-               this.deviceNumbers = deviceNumbers
-               this.musicPlayers = []
-               
+       MusicPlayers(Closure sendEvent, boolean init) {
+               // Only initialize one time since we only have one device for each capability
+               musicPlayers = smartThings
+
+               // Initialization
+               StringBuilder id = new StringBuilder("musicPlayerID0")
+               StringBuilder label = new StringBuilder("status")
+               StringBuilder displayName = new StringBuilder("musicPlayer0")
+               StringBuilder mute = new StringBuilder()
+               StringBuilder status = new StringBuilder()
+               StringBuilder trackData = new StringBuilder()
+               StringBuilder trackDescription = new StringBuilder()
+               MutableInteger level = new MutableInteger()
+
                if (init) {
-                       this.level = 20
-                       this.duration = 10
-                       this.mute = "unmuted"
-                       this.status = "paused"
-                       this.trackNumber = 1
-                       this.trackData = "someTrack"
-                       this.trackDescription = "someDescriptions"
+                       level.setValue(20)
+                       mute.append("unmuted")
+                       status.append("paused")
+                       trackData.append("someTrack")
+                       trackDescription.append("someDescriptions")
                } else {
-                       this.level = 30
-                       this.duration = 20
-                       this.mute = "muted"
-                       this.status = "playing"
-                       this.trackNumber = 2
-                       this.trackData = "someOtherTrack"
-                       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) {
-                               this.status = eventDataMap["value"]
-                               musicPlayers[0].setValue(eventDataMap["value"], "status")
-                               sendEvent(eventDataMap)
-                       }       
-               } else if (eventDataMap["name"] == "level") {
-                       if (eventDataMap["value"].toInteger() != musicPlayers[0].level) {
-                               this.level = eventDataMap["value"].toInteger()
-                               musicPlayers[0].setValue(eventDataMap["value"], "level")
-                               sendEvent(eventDataMap)
-                       }
-               } else if (eventDataMap["name"] == "trackDescription") {
-                       if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
-                               this.trackDescription = eventDataMap["value"]
-                               musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
-                               sendEvent(eventDataMap)
-                       }
-               } else if (eventDataMap["name"] == "trackData") {
-                       if (eventDataMap["value"] != musicPlayers[0].trackData) {
-                               this.trackData = eventDataMap["value"]
-                               musicPlayers[0].setValue(eventDataMap["value"], "trackData")                            
-                               sendEvent(eventDataMap)
-                       }
-               } else if (eventDataMap["name"] == "mute") {
-                       if (eventDataMap["value"] != musicPlayers[0].mute) {
-                               this.mute = eventDataMap["value"]
-                               musicPlayers[0].setValue(eventDataMap["value"], "mute")
-                               sendEvent(eventDataMap)
-                       }
+                       level.setValue(30)
+                       mute.append("muted")
+                       status.append("play")
+                       trackData.append("someTrack")
+                       trackDescription.append("someDescriptions")
                }
-       }
 
-       //Methods for closures
-       def count(Closure Input) {
-               musicPlayers.count(Input)
-       }
-       def size() {
-               musicPlayers.size()
-       }
-       def each(Closure Input) {
-               musicPlayers.each(Input)
-       }
-       def find(Closure Input) {
-               musicPlayers.find(Input)
-       }
-       def sort(Closure Input) {
-               musicPlayers.sort(Input)
-       }
-       def collect(Closure Input) {
-               musicPlayers.collect(Input)
+               musicPlayers.add(new MusicPlayer(sendEvent, id, label, displayName, level, mute, status, trackData, trackDescription))
        }
 
-       //methods
+       // Methods to set values
        def on(LinkedHashMap metaData) {
                on()
        }
+
        def on() {
-               if (status != "on") {
-                       this.status = "on"
-                       musicPlayers[0].on()
-               }
+               musicPlayers[0].on()
        }
+
        def off(LinkedHashMap metaData) {
                off()
        }
+
        def off() {
-               if (status != "off") {
-                       this.status = "off"
-                       musicPlayers[0].off()
-               }
+               musicPlayers[0].off()
        }
+
        def mute(LinkedHashMap metaData) {
                mute()
        }
+
        def mute() {
-               if (mute != "muted") {
-                       this.mute = "muted"
-                       musicPlayers[0].mute()
-               }
+               musicPlayers[0].mute()
        }
+
+       def unmute(LinkedHashMap metaData) {
+               unmute()
+       }
+
+       def unmute() {
+               musicPlayers[0].unmute()
+       }
+
        def nextTrack(LinkedHashMap metaData) {
                nextTrack()
        }
+
        def nextTrack() {
-               if (status != "play") {
-                       this.status = "play"
-               }
-               this.trackNumber = this.trackNumber+1
                musicPlayers[0].nextTrack()
        }
+
        def pause(LinkedHashMap metaData) {
                pause()
        }
+
        def pause() {
-               if (status != "pause") {
-                       this.status = "pause"
-                       musicPlayers[0].pause()                 
-               }
+               musicPlayers[0].pause()
        }
+
        def play(LinkedHashMap metaData) {
                play()
        }
+
        def play() {
-               if (status != "play") {
-                       this.status = "play"
-                       musicPlayers[0].play()
-               }
+               musicPlayers[0].play()
        }
+
        def playTrack(LinkedHashMap metaData) {
                playTrack("someTrack")
        }
-       def playTrackAndResume(String trackData, int duration) {
-               playTrack(trackData)
-               if (duration != this.duration) {
-                       this.duration = duration
-               }
-       }
-       def playTrackAndResume(String trackData, int duration, int level) {
-               playTrackAndResume(trackData, duration)
-               if (level != this.level) {
-                       this.level = level
-               }
-       }
-       def playSoundAndTrack(String trackData, int duration, int trackNumber, int level) {
-               playTrackAndResume(trackData, duration)
-               if (level != this.level) {
-                       this.level = level
-               }
-               if (trackNumber!= this.trackNumber) {
-                       this.trackNumber = trackNumber
-               }
-       }
-       def playTrackAtVolume(String trackData, int level) {
-               playTrack(trackData)
-               if (level != this.level) {
-                       this.level = level
-               }
-       }
+       
        def playTrack(String trackToPlay) {
-               if (status != "play") {
-                       this.status = "play"
-               }
                musicPlayers[0].playTrack(trackToPlay)
        }
+
        def previousTrack(LinkedHashMap metaData) {
                previousTrack()
        }
+
        def previousTrack() {
-               if (status != "play") {
-                       this.status = "play"
-               }
-               if (this.trackNumber != 1)
-                       this.trackNumber = this.trackNumber-1
                musicPlayers[0].previousTrack()
        }
+
        def restoreTrack(LinkedHashMap metaData) {
                restoreTrack()
        }
+
        def restoreTrack(String trackToRestore) {
                musicPlayers[0].restoreTrack(trackToRestore)
        }
+
        def resumeTrack(LinkedHashMap metaData) {
                resumeTrack()
        }
+
        def resumeTrack(String trackToResume) {
-               if (status != "play") {
-                       this.status = "play"
-               }
                musicPlayers[0].resumeTrack(trackToResume)
        }
+
        def setLevel(LinkedHashMap metaData) {
                setLevel()
        }
+
        def setLevel(int level) {
-               if (level != this.level) {
-                       this.level = level      
-                       musicPlayers[0].setLevel(level)
-               }
+               musicPlayers[0].setLevel(level)
        }
+
        def setTrack(LinkedHashMap metaData) {
                setTrack()
        }
+
        def setTrack(String trackToSet) {
-               if (status != "play") {
-                       this.status = "play"
-               }
                musicPlayers[0].setTrack(trackToSet)
        }
+
        def stop(LinkedHashMap metaData) {
                stop()
        }
+
        def stop() {
-               if (status != "stop") {
-                       this.status = "stop"
-                       musicPlayers[0].stop()
-               }
-       }
-       def statesSince(String info, Date dateObj, LinkedHashMap map) {
-               return musicPlayers[0].statesSince()
-       }
-       def playText(LinkedHashMap metaData) {
-               playText()
+               musicPlayers[0].stop()
        }
-       def playText(String text) {
-               if (status != "play") {
-                       this.status = "play"
-               }
-               musicPlayers[0].playText(text)
+
+       // Methods to return values
+       def getCurrentLevel() {
+               List tmpValues = new ArrayList()
+               tmpValues.add(musicPlayers[0].getCurrentLevel())
+               return tmpValues
        }
 
-       def currentValue(String deviceFeature) {
-               musicPlayers[0].currentValue(deviceFeature)
+       def getCurrentMute() {
+               List tmpValues = new ArrayList()
+               tmpValues.add(musicPlayers[0].getCurrentMute())
+               return tmpValues
+       }
+       
+       def getCurrentStatus() {
+               List tmpValues = new ArrayList()
+               tmpValues.add(musicPlayers[0].getCurrentStatus())
+               return tmpValues
        }
 
-       def latestValue(String deviceFeature) {
-               musicPlayers[0].latestValue(deviceFeature)
+       def getCurrentTrackData() {
+               List tmpValues = new ArrayList()
+               tmpValues.add(musicPlayers[0].getCurrentTrackData())
+               return tmpValues
        }
 
-       def getAt(int ix) {
-               musicPlayers[ix]
+       def getCurrentTrackDescription() {
+               List tmpValues = new ArrayList()
+               tmpValues.add(musicPlayers[0].getCurrentTrackDescription())
+               return tmpValues
        }
 }