aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClyhtsuriva <aimeric@adjutor.xyz>2020-12-19 23:21:05 +0100
committerClyhtsuriva <aimeric@adjutor.xyz>2020-12-19 23:21:05 +0100
commitfe4f2ee0f70b7b35113062538a51bf5444131196 (patch)
treead0d0e54bf0c9ee536e96aac2c45c622e73def92
parent4c37298e054dc1681875a71b181ce0478c577349 (diff)
Adding AudioBooks
Finishing AudioBook class, adding list and save for the audiobooks. Adding extract method for both audiobooks and songs. Resolving the id incremention issue.
-rw-r--r--AudioBook.java10
-rw-r--r--MusicalElement.java3
-rw-r--r--Pair.java11
-rw-r--r--Song.java27
-rw-r--r--audiobooksbin0 -> 470 bytes
-rw-r--r--jMusicHub.java222
-rw-r--r--songsbin0 -> 460 bytes
7 files changed, 225 insertions, 48 deletions
diff --git a/AudioBook.java b/AudioBook.java
index 03c6b0e..9f6ba56 100644
--- a/AudioBook.java
+++ b/AudioBook.java
@@ -1,5 +1,9 @@
public class AudioBook extends MusicalElement {
+
+ private static final long serialVersionUID = -7145972304319088676L;
+
private String author, language, category;
+
public AudioBook(String title, int duration, String content, String author, Language language, Category category) {
super(title, duration, content);
this.author=author;
@@ -15,4 +19,10 @@ public class AudioBook extends MusicalElement {
public void setGenre(Language language){this.language=language.name();}
public void setCategory(Category category){this.category=category.name();}
+
+
+public String toString() {
+ return "Id : "+getId()+"\nTitle : "+getTitle()+"\nDuration : "+getDuration()+"\nContent : "+getContent()+"\nAuthor : "+getAuthor()+"\nLanguage : "+getLanguage()+"\nCategory : "+getCategory();
+}
+
}
diff --git a/MusicalElement.java b/MusicalElement.java
index 9dbb044..e748281 100644
--- a/MusicalElement.java
+++ b/MusicalElement.java
@@ -1,6 +1,6 @@
import java.io.Serializable;
-/** The MusicalElement contains the base of songs and audibooks.
+/** The MusicalElement contains the base of songs and audiobooks.
* It is the abstract class they will take.
* We use the classical get and set here.
* Get is used to return the said value.
@@ -15,7 +15,6 @@ public abstract class MusicalElement implements Serializable {
public MusicalElement(String title, int duration, String content) {
- this.setId(idCount++);
this.title=title;
this.duration=duration;
this.content=content;
diff --git a/Pair.java b/Pair.java
new file mode 100644
index 0000000..d7648d0
--- /dev/null
+++ b/Pair.java
@@ -0,0 +1,11 @@
+public class Pair<S, T> {
+ public final S x;
+ public final T y;
+
+ public Pair(S x, T y) {
+ this.x = x;
+ this.y = y;
+ }
+ public S getX(){return x;}
+ public T getY(){return y;}
+}
diff --git a/Song.java b/Song.java
index 6e26332..2dd07d5 100644
--- a/Song.java
+++ b/Song.java
@@ -16,32 +16,5 @@ public class Song extends MusicalElement{
public String toString() {
return "Id : "+getId()+"\nTitle : "+getTitle()+"\nDuration : "+getDuration()+"\nContent : "+getContent()+"\nArtist : "+getArtist()+"\nGenre : "+getGenre();
-// return getTitle()+";"+getDuration()+";"+getContent()+";"+getArtist()+";"+getGenre();
}
-
-/* public static void save(){
- String filename="songs.csv";
- try
- {
- //Saving of object in a file
- FileOutputStream file = new FileOutputStream(filename);
- ObjectOutputStream out = new ObjectOutputStream(file);
-
- // Method for serialization of object
- out.writeObject(this);
-
- out.close();
- file.close();
-
- System.out.println("Object has been serialized");
-
- }
-
- catch(IOException ex)
- {
- System.out.println("IOException is caught");
- }
- }*/
-
-
}
diff --git a/audiobooks b/audiobooks
new file mode 100644
index 0000000..4a6b105
--- /dev/null
+++ b/audiobooks
Binary files differ
diff --git a/jMusicHub.java b/jMusicHub.java
index 82b364b..799c715 100644
--- a/jMusicHub.java
+++ b/jMusicHub.java
@@ -52,6 +52,52 @@ public class jMusicHub {
return null;
}
}
+
+/** <h2>addAudioBook</h2>
+ * add Song is used to add songs thanks to the "c" option
+ * @param scan Scanner Object
+ */
+ public static AudioBook addAudioBook(Scanner scan){
+ System.out.println("Adding an audiobook...");
+ System.out.printf("Title : ");
+ String title = scan.nextLine();
+ System.out.printf("Duration (in seconds) : ");
+ int duration = scan.nextInt();
+ System.out.printf("Content path : ");
+ String trash = scan.nextLine(); //Using this because the content scan is skip after a nexInt
+ String content = scan.nextLine();
+ System.out.printf("Author : ");
+ String author = scan.nextLine();
+ System.out.printf("Language (FRENCH, ENGLISH, ITALIAN, SPANISH, GERMAN) : ");
+ String choosedLanguage = scan.nextLine();
+ choosedLanguage = choosedLanguage.toUpperCase();
+ Language language = Language.valueOf(choosedLanguage);
+ System.out.printf("Category (TEEN, NOVEL, THEATER, SPEECH, DOCUMENTARY) : ");
+ String choosedCategory = scan.nextLine();
+ choosedCategory = choosedCategory.toUpperCase();
+ Category category = Category.valueOf(choosedCategory);
+ System.out.println("");
+
+ System.out.println("Do you confirm the addition of the following song ?");
+ System.out.println("Title : " + title);
+ System.out.println("Duration : " + duration);
+ System.out.println("Content path : " + content);
+ System.out.println("Author : " + author);
+ System.out.println("Language : " + language);
+ System.out.println("Category : " + category);
+ System.out.println("[Y/n]");
+ String confirm = scan.nextLine();
+
+ if (confirm.equalsIgnoreCase("Y")){ //if the user is ok with what he typed, create a audiobook obj
+ AudioBook newAudioBook = new AudioBook(title, duration, content, author, language, category);
+ return newAudioBook;
+ } else {
+ System.out.println("Aborting...");
+ System.out.println("");
+ return null;
+ }
+ }
+
/**<h2>saveSongs</h2>
* saveSongs is used by the command "s"
* @param songs ArrayList<Song> Object
@@ -73,7 +119,35 @@ public class jMusicHub {
out.close();
file.close();
- System.out.println("Your songs have been serialized\n");
+ System.out.println("Your songs have been saved.\n");
+ }
+ catch (IOException ex) {
+ System.out.println("IOException is caught");
+ }
+ }
+
+/**<h2>saveAudioBooks</h2>
+ * saveAudioBooks is used by the command "l"
+ * @param audiobooks ArrayList<AudioBook> Object
+ * */
+ public static void saveAudioBooks(ArrayList<AudioBook> audiobooks){
+
+ String filename = "audiobooks";
+
+ // Serialization
+ try {
+
+ // Saving of object in a file
+ FileOutputStream file = new FileOutputStream(filename);
+ ObjectOutputStream out = new ObjectOutputStream(file);
+
+ // Method for serialization of object
+ out.writeObject(audiobooks);
+
+ out.close();
+ file.close();
+
+ System.out.println("Your audiobooks have been saved.\n");
}
catch (IOException ex) {
System.out.println("IOException is caught");
@@ -96,19 +170,108 @@ public class jMusicHub {
@SuppressWarnings("unchecked")
// Method for deserialization of object
- ArrayList<Song> songs = (ArrayList<Song>)in.readObject();
+ ArrayList<Song> songsInFile = (ArrayList<Song>)in.readObject();
in.close();
file.close();
- System.out.println("Object has been deserialized");
- for (Song s : songs ){
+ System.out.println("\nSaved songs :\n");
+ for (Song s : songsInFile ){
System.out.println(s);
}
}
- catch (IOException ex) {System.out.println("IOException is caught");}
+ catch (IOException ex) {System.out.println("listSongs : Audio file missing.");}
catch (ClassNotFoundException ex) {System.out.println("ClassNotFoundException is caught");}
}
+/**<h2>listAudioBooks</h2>
+ * listAudioBooks is called when using the "AB" command in order to list the songs inside the "audiobooks" file.
+ * */
+
+ public static void listAudioBooks(){
+ String filename="audiobooks";
+
+ // Deserialization
+ try {
+ // Reading the object from a file
+ FileInputStream file = new FileInputStream(filename);
+ ObjectInputStream in = new ObjectInputStream(file);
+
+ @SuppressWarnings("unchecked")
+ // Method for deserialization of object
+ ArrayList<AudioBook> audiobooks = (ArrayList<AudioBook>)in.readObject();
+
+ in.close();
+ file.close();
+
+ System.out.println("\nSaved audiobooks :\n");
+ for (AudioBook s : audiobooks ){
+ System.out.println(s);
+ }
+ }
+ catch (IOException ex) {System.out.println("listAudioBooks : AudioBook file missing.");}
+ catch (ClassNotFoundException ex) {System.out.println("ClassNotFoundException is caught");}
+ }
+
+/**<h2>extractSongs</h2>
+ * Extraction is used to print the content of the files and put them in the ArrayList used to add elements.
+ * */
+
+ public static ArrayList<Song> extractSongs(){
+
+ // Deserialization
+ try {
+
+ String songFileName="songs";
+ FileInputStream songFile = new FileInputStream(songFileName);
+ ObjectInputStream inSong = new ObjectInputStream(songFile);
+
+ @SuppressWarnings("unchecked")
+ ArrayList<Song> songs = (ArrayList<Song>)inSong.readObject();
+ //used to temporarly save the songs before any "s" command
+
+ inSong.close();
+ songFile.close();
+
+ return new ArrayList<Song>(songs);
+ //Here will be the number of playlist, albums, songs and audiobook extracted
+
+
+ }
+ catch (IOException ex) { //mainly occur bc file is missing, leading to an empty ListArray
+ System.out.println("\nextractSongs : Songs file missing.\n");
+ return new ArrayList<Song>() ;}
+ catch (ClassNotFoundException ex) {System.out.println("ClassNotFoundException is caught");return null;}
+}
+
+/**<h2>extractAudioBooks</h2>
+ * Extraction is used to print the content of the files and put them in the ArrayList used to add elements.
+ * */
+
+ public static ArrayList<AudioBook> extractAudioBooks(){
+
+ // Deserialization
+ try {
+
+ String audiobookFileName="audiobooks";
+ FileInputStream audiobookFile = new FileInputStream(audiobookFileName);
+ ObjectInputStream inAudioBook = new ObjectInputStream(audiobookFile);
+
+ @SuppressWarnings("unchecked")
+ ArrayList<AudioBook> audiobooks = (ArrayList<AudioBook>)inAudioBook.readObject();
+
+ inAudioBook.close();
+ audiobookFile.close();
+
+ return new ArrayList<AudioBook>(audiobooks);
+ //Here will be the number of playlist, albums, songs and audiobook extracted
+
+
+ }
+ catch (IOException ex) { //mainly occur bc file is missing, leading to an empty ListArray
+ System.out.println("\nextractAudioBooks : AudioBooks file missing.\n");
+ return new ArrayList<AudioBook>() ;}
+ catch (ClassNotFoundException ex) {System.out.println("ClassNotFoundException is caught");return null;}
+}
public jMusicHub() {
@@ -117,30 +280,30 @@ public class jMusicHub {
Scanner scan = new Scanner(System.in);
String userInput; //Used to get the user's inputs.
- ArrayList<Song> songs = new ArrayList<Song>();
- //used to temporarly save the songs before any "s" command
-
- System.out.println("Starting extraction");
- System.out.println("Extraction done\n");
- //Here will be the number of playlist, albums, songs and auidobook extracted
+ ArrayList<Song> songs = extractSongs();
+ ArrayList<AudioBook> audiobooks = extractAudioBooks();
+ listSongs();
+ listAudioBooks();
do {
System.out.println("What do you want to do? [h for help]");
userInput = scan.nextLine();
switch(userInput) {
case "h" : //page help
- System.out.printf("c: add a new song\na: add a new album\n+: add an existing song to an album\nl: add a new audiobook\np: create a new playlist from existing songs and audiobooks\n-: delete a playlist\ns: save playlists, albums, songs and audiobooks into the concerned files\nS: List all your songs\nh: print this help screen\nq: quit the program\n");
+ System.out.printf("c: add a new song\na: add a new album\n+: add an existing song to an album\nl: add a new audiobook\np: create a new playlist from existing songs and audiobooks\n-: delete a playlist\ns: save playlists, albums, songs and audiobooks into the concerned files\nS: List all your saved songs\nAB : List all your saved audiobooks\nh: print this help screen\nq: quit the program\n");
break;
- case "q" :
+ case "q" : //quit
System.out.println("Goodbye !");
break;
- case "c":
+ case "c": //add a new song
try { //If something goes wrong, abort
Song newSong=addSong(scan);
if (newSong != null){
+ int songsSize = songs.size();
+ newSong.setId(songsSize);
songs.add(newSong);
- System.out.println("Actual content of your songs list (you must save it (s) to do anything else with your songs) :");
+ System.out.println("\nActual content of your songs list (you must save it (s) to do anything else with your songs) :");
for (Song iSong : songs){
System.out.println(iSong);
}
@@ -153,22 +316,43 @@ public class jMusicHub {
}
break;
- case "a":
+ case "a": //add a new album
break;
case "+":
break;
- case "l":
+ case "l": //add a new audiobook
+ try { //If something goes wrong, abort
+ AudioBook newAudioBook=addAudioBook(scan);
+ if (newAudioBook != null){
+ int audiobookSize = audiobooks.size();
+ newAudioBook.setId(audiobookSize);
+ audiobooks.add(newAudioBook);
+ System.out.println("\nActual content of your audiobook list (you must save it (s) to do anything else with your audiobooks) :");
+ for (AudioBook iAudioBook : audiobooks){
+ System.out.println(iAudioBook);
+ }
+ System.out.println("");
+
+ }
+ } catch (InputMismatchException | IllegalArgumentException e) {
+ System.out.println("You typed something wrong... I'm aborting..");
+ System.out.println("");
+ }
break;
case "p":
break;
case "-":
break;
- case "s":
+ case "s": //save songs, audiobooks, playlist and albums
saveSongs(songs);
+ saveAudioBooks(audiobooks);
break;
- case "S":
+ case "S": //print songs contained in songs
listSongs();
break;
+ case "AB": //print audiobooks containd in audiobooks
+ listAudioBooks();
+ break;
default :
System.out.println("Unknown command. Type h for help.");
diff --git a/songs b/songs
new file mode 100644
index 0000000..df468f2
--- /dev/null
+++ b/songs
Binary files differ