Question
Go back to the Song class and add to it an attribute called owner which will be a User object representing the user who happens
Go back to the Song class and add to it an attribute called owner which will be a User object representing the user who happens to own this copy of this song. Note that a Song object may only be owned by one User and that many users can have copies of the same song. Set it to null initially. In the User class, adjust the addSong() method so that it sets the owner properly.
In the User class, add a method called requestCompleteSonglist(MusicExchangeCenter m). This method should gather the list of all available songs from all users that are online at the given music exchange center (i.e., the union of all of their local song lists), and then return an ArrayList formatted as follows:
Notice that the songs are numbered and that the title, artist, time and owner are all lined up nicely. You should use the String.format() method as described in the notes. Recall that %-30s in the format string will allow you to display a left-justified 30-character string. Also, %2d and %02d will allow you to display numbers so that they take 2 places, the 0 indicating that a leading zero character is desired.
In the User class, add a method called requestSonglistByArtist(MusicExchangeCenter m, String artist). This method should gather the list of all available songs by the given artist from all users that are online at the given music exchange center (i.e., the union of all of their local song lists), and then return an ArrayList formatted similar to that shown above.
In the MusicExchangeCenter class, add a method called getSong(String title, String ownerName) which returns the Song object with the given title owned by the user with the given ownerName, provided that the user is currently online and that the song exists. Return null otherwise. (Hint: you will need to search through the centers users to find User with the matching ownerName and then search through that users songs to find the Song with the given title. It may be a good idea to write an extra helper method in the User class called songWithTitle() that you can make use of).
In the User class, add a downloadSong(MusicExchangeCenter m, String title, String ownerName) method that simulates the downloading of one of the songs in the catalog. It should use the getSong() method that you just wrote, and add the downloaded song to the users songList (if not null).
Test your code now with the following program:
import java.util.ArrayList; public class MusicExchangeTestProgram2 { public static void main(String args[]) { ArrayListcatalog; // Create a new music exchange center MusicExchangeCenter mec = new MusicExchangeCenter(); // Create some users and give them some songs User discoStew = User.DiscoStew(); User sleepingSam = User.SleepingSam(); User ronnieRocker = User.RonnieRocker(); User countryCandy = User.CountryCandy(); User peterPunk = User.PeterPunk(); // Register the users discoStew.register(mec); ronnieRocker.register(mec); sleepingSam.register(mec); countryCandy.register(mec); peterPunk.register(mec); // Log on all users discoStew.logon(mec); sleepingSam.logon(mec); ronnieRocker.logon(mec); countryCandy.logon(mec); peterPunk.logon(mec); System.out.println("Status: " + mec); // Simulate a user requesting a list of songs catalog = discoStew.requestCompleteSonglist(mec); System.out.println("Complete Song List: "); for (String s: catalog) System.out.println(" " + s); // Simulate a user downloading 3 songs from the list System.out.println(" Disco Stew before downloading: " + discoStew); discoStew.downloadSong(mec, "Bite My Arms Off", "Peter Punk"); discoStew.downloadSong(mec, "Meadows", "Sleeping Sam"); discoStew.downloadSong(mec, "If I Had a Hammer", "Country Candy"); discoStew.downloadSong(mec, "Sandy Toes", "Country Candy"); ronnieRocker.logoff(mec); // log off Ronnie, next download should fail discoStew.downloadSong(mec, "Only You Can Rock Me", "Ronnie Rocker"); System.out.println("Disco Stew after downloading: " + discoStew); ronnieRocker.logon(mec); // log on Ronnie, next download should work discoStew.downloadSong(mec, "Only You Can Rock Me", "Ronnie Rocker"); System.out.println("Disco Stew after downloading Ronnies: " + discoStew + " "); // Simulate a user requesting a list of songs by a specific artist catalog = discoStew.requestSonglistByArtist(mec, "Jaw"); System.out.println("Songs by Jaw: "); for (String s: catalog) System.out.println(" " + s); } }
// User.java
import java.util.ArrayList;
public class User {
private String userName;
private boolean online;
// array list of songs
ArrayList
public User() {
this("");
}
public User(String u) {
userName = u;
online = false;
// initializing songs list
songList = new ArrayList
}
// getter method for songs list
public ArrayList
return songList;
}
public String getUserName() {
return userName;
}
public boolean isOnline() {
return online;
}
public String toString() {
// will show the number of songs also
String s = "" + userName + ": " + songList.size() + " songs (";
if (!online)
s += "not ";
return s + "online)";
}
/**
* method to add a song to the list
*/
public void addSong(Song song) {
songList.add(song);
}
/**
* method to find the total play time of all songs in the list
*/
public int totalSongTime() {
int total = 0;
for (Song s : songList) {
// adding the duration to the total
total += s.getDuration();
}
return total;
}
/**
* method to register the current user in a MusicExchangeCenter
*/
public void register(MusicExchangeCenter m) {
m.registerUser(this);
}
/**
* method to login the current user into a MusicExchangeCenter, only if
* he/she is a member
*/
public void logon(MusicExchangeCenter m) {
if (m.userWithName(userName) != null) {
online = true;
}
}
/**
* method to logoff the current user into a MusicExchangeCenter, only if
* he/she is a member
*/
public void logoff(MusicExchangeCenter m) {
if (m.userWithName(userName) != null) {
online = false;
}
}
// Various Users for test purposes
public static User DiscoStew() {
User discoStew = new User("Disco Stew");
discoStew.addSong(new Song("Hey Jude", "The Beatles", 4, 35));
discoStew.addSong(new Song("Barbie Girl", "Aqua", 3, 54));
discoStew.addSong(new Song("Only You Can Rock Me", "UFO", 4, 59));
discoStew.addSong(new Song("Paper Soup Cats", "Jaw", 4, 18));
return discoStew;
}
public static User SleepingSam() {
User sleepingSam = new User("Sleeping Sam");
sleepingSam.addSong(new Song("Meadows", "Sleepfest", 7, 15));
sleepingSam.addSong(new Song("Calm is Good", "Waterfall", 6, 22));
return sleepingSam;
}
public static User RonnieRocker() {
User ronnieRocker = new User("Ronnie Rocker");
ronnieRocker.addSong(new Song("Rock is Cool", "Yeah", 4, 17));
ronnieRocker.addSong(new Song("My Girl is Mean to Me",
"Can't Stand Up", 3, 29));
ronnieRocker.addSong(new Song("Only You Can Rock Me", "UFO", 4, 52));
ronnieRocker.addSong(new Song("We're Not Gonna Take It",
"Twisted Sister", 3, 9));
return ronnieRocker;
}
public static User CountryCandy() {
User countryCandy = new User("Country Candy");
countryCandy.addSong(new Song("If I Had a Hammer", "Long Road", 4, 15));
countryCandy.addSong(new Song("My Man is a 4x4 Driver", "Ms. Lonely",
3, 7));
countryCandy.addSong(new Song("This Song is for Johnny", "Lone Wolf",
4, 22));
return countryCandy;
}
public static User PeterPunk() {
User peterPunk = new User("Peter Punk");
peterPunk.addSong(new Song("Bite My Arms Off", "Jaw", 4, 12));
peterPunk
.addSong(new Song("Where's My Sweater", "The Knitters", 3, 41));
peterPunk.addSong(new Song("Is that My Toenail ?", "Clip", 4, 47));
peterPunk.addSong(new Song("Anvil Headache", "Clip", 4, 34));
peterPunk.addSong(new Song("My Hair is on Fire", "Jaw", 3, 55));
return peterPunk;
}
}
// MusicExchangeCenter.java
import java.util.ArrayList;
public class MusicExchangeCenter {
// array list of all available users
private ArrayList
public MusicExchangeCenter() {
// initializing users list
users = new ArrayList
}
/**
* returns all online users
*/
public ArrayList
ArrayList
for (User u : users) {
if (u.isOnline()) {
online.add(u);
}
}
return online;
}
/**
* returns all available songs from all online users
*/
public ArrayList
ArrayList
for (User u : onlineUsers()) {
availableSongs.addAll(u.getSongList());
}
return availableSongs;
}
@Override
public String toString() {
// returning a string in proper format
return "Music Exchange Center (" + onlineUsers().size()
+ " users online, " + allAvailableSongs().size()
+ " songs available)";
}
/**
* returns the User with given name if found
*
* @param s
* - user name
* @return - User object if found, else null
*/
public User userWithName(String s) {
for (User u : users) {
if (u.getUserName().equalsIgnoreCase(s)) {
return u;
}
}
return null;
}
/**
* method to register a user, if not already exist
*/
public void registerUser(User x) {
if (userWithName(x.getUserName()) == null) {
users.add(x);
}
}
/**
* returns all available songs by a specific artist , from all online users
*/
public ArrayList
ArrayList
for (Song s : allAvailableSongs()) {
if (s.getArtist().equalsIgnoreCase(artist)) {
songsByArtist.add(s);
}
}
return songsByArtist;
}
}
// Song.java
public class Song { private String title; private String artist; private int duration; public Song() { this("", "", 0, 0); } public Song(String t, String a, int m, int s) { title = t; artist = a; duration = m * 60 + s; } public String getTitle() { return title; } public String getArtist() { return artist; } public int getDuration() { return duration; } public int getMinutes() { return duration / 60; } public int getSeconds() { return duration % 60; } public String toString() { return("\"" + title + "\" by " + artist + " " + (duration / 60) + ":" + (duration%60)); } }
TITLE ARTIST TIME OWNER 1. Hey Jude 2. Barbie Girl . Only You Can Rock Me 4. Paper Soup Cats 5. Rock is Cool 6. My Girl is Mean to Me 7. Only You Can Rock Me 8. We're Not Gonna Take It The Beatles Aqua UFO Jaw Yeah Can't Stand Up 3:29 Ronnie Rocker UFO Twisted Sister 3:09 Ronnie Rocker 4:35 Disco Stew 3:54 Disco Stew 4:59 Disco Stew 4:18 DiscoStew 4:17 Ronnie Rocker 4:52 Ronnie Rocker etc
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started