Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayers.groovy
1 //Create a class for music player
2 package MusicPlayer
3 import Timer.SimulatedTimer
4
5
6 public class MusicPlayers {
7         private int deviceNumbers
8         private List musicPlayers
9         def sendEvent
10
11         //For one device(We cannot have obj.id)-> We should have obj[0].id
12         private String id = "musicPlayerID0"
13         private String label = "musicPlayer0"
14         private String displayName = "musicPlayer0"
15         private int level = 20
16         private String mute = "unmuted"
17         private String status = "pause"
18         private int trackNumber = 1
19         private String trackData = "someTrack"
20         private String trackDescription = "someDescriptions"
21
22         
23                 
24         MusicPlayers(Closure sendEvent, int deviceNumbers) {
25                 this.sendEvent = sendEvent
26                 this.deviceNumbers = deviceNumbers
27                 this.musicPlayers = []
28
29                 musicPlayers.add(new MusicPlayer(id, label, displayName, this.level, this.mute, this.status, this.trackNumber, this.trackData, this.trackDescription))
30         }
31
32         //By model checker
33         def setValue(LinkedHashMap eventDataMap) {
34                 if (eventDataMap["name"] == "status") {
35                         if (eventDataMap["value"] != musicPlayers[0].status) {
36                                 musicPlayers[0].setValue(eventDataMap["value"], "status")
37                                 this.status = musicPlayers[0].status
38                                 sendEvent(eventDataMap)
39                         }       
40                 } else if (eventDataMap["name"] == "level") {
41                         if (eventDataMap["value"] != musicPlayers[0].level) {
42                                 musicPlayers[0].setValue(eventDataMap["value"], "level")
43                                 this.level = musicPlayers[0].level
44                                 sendEvent(eventDataMap)
45                         }
46                 } else if (eventDataMap["name"] == "trackDescription") {
47                         if (eventDataMap["value"] != musicPlayers[0].trackDescription) {
48                                 musicPlayers[0].setValue(eventDataMap["value"], "trackDescription")
49                                 this.trackDescription = musicPlayers[0].trackDescription
50                                 sendEvent(eventDataMap)
51                         }
52                 } else if (eventDataMap["name"] == "trackData") {
53                         if (eventDataMap["value"] != musicPlayers[0].trackData) {
54                                 musicPlayers[0].setValue(eventDataMap["value"], "trackData")
55                                 this.trackData = musicPlayers[0].trackData
56                                 sendEvent(eventDataMap)
57                         }
58                 } else if (eventDataMap["name"] == "mute") {
59                         if (eventDataMap["value"] != musicPlayers[0].mute) {
60                                 musicPlayers[0].setValue(eventDataMap["value"], "mute")
61                                 this.mute = musicPlayers[0].mute
62                                 sendEvent(eventDataMap)
63                         }
64                 }
65         }
66
67         //Methods for closures
68         def count(Closure Input) {
69                 musicPlayers.count(Input)
70         }
71         def size() {
72                 musicPlayers.size()
73         }
74         def each(Closure Input) {
75                 musicPlayers.each(Input)
76         }
77         def find(Closure Input) {
78                 musicPlayers.find(Input)
79         }
80         def collect(Closure Input) {
81                 musicPlayers.collect(Input)
82         }
83
84         //methods
85         def mute() {
86                 musicPlayers[0].mute()
87                 this.mute = "muted"
88         }
89         def nextTrack() {
90                 musicPlayers[0].nextTrack()
91                 this.status = "playing"
92                 this.trackNumber = musicPlayers[0].trackNumber
93         }
94         def pause() {
95                 musicPlayers[0].pause()
96                 this.status = "paused"
97         }
98         def play() {
99                 musicPlayers[0].play()
100                 this.status = "playing"
101         }
102         def playTrack(String trackToPlay) {
103                 musicPlayers[0].playTrack(trackToPlay)
104                 this.status = "playing"
105                 this.trackNumber = musicPlayers[0].trackNumber
106         }
107         def previousTrack() {
108                 musicPlayers[0].previousTrack()
109                 this.status = "playing"
110                 this.trackNumber = musicPlayers[0].trackNumber
111         }
112         def restoreTrack(String trackToRestore) {
113                 musicPlayers[0].restoreTrack(trackToRestore)
114         }
115         def resumeTrack(String trackToResume) {
116                 musicPlayers[0].resumeTrack(trackToResume)
117                 this.status = "playing"
118         }
119         def setLevel(int level) {
120                 musicPlayers[0].setLevel(level)
121                 this.level = level
122         }
123         def setTrack(String trackToSet) {
124                 musicPlayers[0].setTrack(trackToSet)
125                 this.status = "playing"
126                 this.trackNumber = musicPlayers[0].trackNumber
127         }
128         def stop() {
129                 musicPlayers[0].stop()
130                 this.status = "stopped"
131         }
132
133         def currentValue(String deviceFeature) {
134                 musicPlayers[0].currentValue(deviceFeature)
135         }
136
137         def getAt(int ix) {
138                 musicPlayers[ix]
139         }
140 }