Commit #10: more classes
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayer.groovy
1 //Create a class for music player
2 package MusicPlayer
3 import Timer.SimulatedTimer
4
5
6 public class MusicPlayer {
7         private String id
8         private String label
9         private String displayName
10         private int level
11         private String mute
12         private String status
13         private int trackNumber
14         private String trackData
15         private String trackDescription
16         
17         MusicPlayer(String id, String label, String displayName, int level, String mute, String status, int trackNumber, String trackData, String trackDescription) {
18                 this.id = id
19                 this.label = label
20                 this.displayName = displayName
21                 this.level = level
22                 this.mute = mute
23                 this.status = status
24                 this.trackNumber = trackNumber
25                 this.trackData = trackData
26                 this.trackDescription = trackDescription
27         }
28
29         //By model checker
30         def setValue(String value, String name) {
31                 if (name == "status") {
32                         this.status = value
33                         println("the status of the music player with id:$id is changed to $value!")
34                 } else if (name == "level") {
35                         this.level = value.toInteger()
36                         println("the level sound of the music player with id:$id is changed to $value!")
37                 } else if (name == "trackDescription") {
38                         this.trackDescription = value
39                         println("the trackDescription of the music player with id:$id is changed to $value!")
40                 } else if (name == "trackData") {
41                         this.trackData = value
42                         println("the trackData of the music player with id:$id is changed to $value!")
43                 } else if (name == "mute") {
44                         this.mute = value
45                         println("the mute state of the music player with id:$id is changed to $value!")
46                 }
47         }
48
49         //methods
50         def mute() {
51                 println("the music player with id:$id is muted!")
52                 this.mute = "muted"
53                 sendEvent([name: "mute", value: "mute", deviceId: this.id, descriptionText: "",
54                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "mute"]])
55         }
56         def nextTrack() {
57                 trackNumber = trackNumber+1
58                 def trackPlaying = trackData
59                 println("the $trackPlaying is selected!")
60                 this.status = "playing"
61                 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
62                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
63                 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
64                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
65                 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
66                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
67         }
68         def pause() {
69                 println("the music player with id:$id is paused!")
70                 this.status = "paused"
71                 sendEvent([name: "status", value: "paused", deviceId: this.id, descriptionText: "",
72                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "paused"]])
73         }
74         def play() {
75                 println("the music player with id:$id is starting to play!")
76                 this.status = "playing"
77                 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
78                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
79         }
80         def playTrack(String trackToPlay) {
81                 def trackPlaying = trackData
82                 println("the $trackPlaying is selected to play!")
83                 this.status = "playing"
84                 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
85                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
86                 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
87                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
88                 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
89                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
90         }
91         def previousTrack() {
92                 if (trackNumber != 1)
93                         trackNumber = trackNumber-1
94                 def trackPlaying = trackData
95                 println("the $trackPlaying is selected!")
96                 this.status = "playing"
97                 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
98                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
99                 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
100                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
101                 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
102                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
103         }
104         /*def restoreTrack(String trackToRestore) {
105                 musicPlayers*.restoreTrack(trackToRestore)
106         }*/
107         def resumeTrack(String trackToResume) {
108                 def trackPlaying = trackData
109                 println("the $trackPlaying is resumed!")
110                 this.status = "playing"
111                 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
112                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
113         }
114         def setLevel(int level) {
115                 this.level = level
116                 println("the level of sound is changed to $level!")
117                 sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "",
118                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "$level"]])
119         }
120         def setTrack(String trackToSet) {
121                 def trackPlaying = trackData
122                 println("the $trackPlaying is set!")
123                 this.status = "playing"
124                 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
125                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "playing"]])
126                 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
127                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someDescriptions"]])
128                 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
129                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "someTrack"]])
130         }
131         def stop() {
132                 println("the music player with id:$id is stopped!")
133                 this.status = "stopped"
134                 sendEvent([name: "status", value: "stopped", deviceId: this.id, descriptionText: "",
135                            displayed: true, linkText: "", isStateChange: false, unit: "", data: [value: "stopped"]])
136         }
137
138         def currentValue(String deviceFeature) {
139                 if (deviceFeature == "musicPlayer") {
140                         return status
141                 }
142         }
143 }