//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
}
}