Please review my code for JukeBox
- Jukebox is plays songs or playlists
- Each song has an Artist
- For playlist, the first song is played and other songs are added to the queue
- Relation between playlist and songs is many-to-many
- Relation between Song and Artist is Many-to-one
In particular, I am not sure about the relation between Playlist
and Song
. Suppose I want to find all the playlists that a particular song is present in..How do I change my design?. Please mention other issues too.
public class Song {
String songName;
Artist artist;
public Song(String songName, Artist artist) {
this.songName = songName;
this.artist = artist;
}
public void playSong(){
System.out.println("Playing the song "+songName);
}
public String getSongName() {
return songName;
}
public Artist getArtist() {
return artist;
}
@Override
public String toString() {
return "Song{" +
"songName='" + songName + '\'' +
", artist=" + artist +
'}';
}
}
import java.util.List;
public class PlayList {
String playlistName;
List<Song> songsInPlaylist;
public PlayList(String playlistName,List<Song> songsInPlaylist) {
this.playlistName = playlistName;
this.songsInPlaylist = songsInPlaylist;
}
public void addSong(Song song){
songsInPlaylist.add(song);
}
public String getPlaylistName() {
return playlistName;
}
public List<Song> getSongsInPlaylist() {
return songsInPlaylist;
}
}
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class JukeBox {
List<Song> allSongs;
List<PlayList> allPlayLists;
Queue<Song> currentPlayQueue;
public JukeBox(List<Song> allSongs,List<PlayList> allPlayLists) {
this.allSongs = allSongs;
this.allPlayLists = allPlayLists;
currentPlayQueue = new LinkedList<Song>();
}
//Song related methods
public Song selectSong(String songName){
Song requiredSong = null;
for(Song song : allSongs){
if(song.getSongName().equals(songName)) {
requiredSong = song;
break;
}
}
if(requiredSong == null){
throw new IllegalArgumentException("Provided song not available");
}
return requiredSong;
}
public void playSong(String songName){
Song requiredSong = selectSong(songName);
requiredSong.playSong();
}
public void queueNextSong(String songName){
Song requiredSong = selectSong(songName);
currentPlayQueue.add(requiredSong);
}
//PlayList Related Methods
public PlayList selectPlayList(String playListName){
PlayList requriedPlayList = null;
for(PlayList playList : allPlayLists){
if(playList.getPlaylistName().equals(playListName)){
requriedPlayList = playList;
}
}
if(requriedPlayList == null){
throw new IllegalArgumentException("Provided Playlist not available");
}
return requriedPlayList;
}
public void playPlayList(String playListName){
PlayList playList = selectPlayList(playListName);
List<Song> allSongsInThePlayList = playList.getSongsInPlaylist();
//Play First Song
allSongsInThePlayList.get(0).playSong();
//Add remaining songs to the queue
Song currentSong;
for(int i = 1 ; i < allSongsInThePlayList.size() ; i++){
currentSong = allSongsInThePlayList.get(i);
currentPlayQueue.add(currentSong);
}
}
}
public class Artist {
String artistName;
public Artist(String artistName) {
this.artistName = artistName;
}
@Override
public String toString() {
return "Artist{" +
"artistName='" + artistName + '\'' +
'}';
}
}
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
//In memory database of songs and play lists
List<Song> allSongs = new ArrayList<Song>();
Song song1 = new Song("Roses",new Artist("David"));
Song song2 = new Song("Ride",new Artist("21Pilots"));
allSongs.add(song1);
allSongs.add(song2);
//Playlists
List<PlayList> allPlayLists = new ArrayList<PlayList>();
List<Song> songsInThePlayList = new ArrayList<Song>();
songsInThePlayList.add(song2);
PlayList playList1 = new PlayList("Hello",songsInThePlayList);
allPlayLists.add(playList1);
JukeBox jukeBox = new JukeBox(allSongs,allPlayLists);
jukeBox.playSong("Roses");
jukeBox.playPlayList("Hello");
}
}