aboutsummaryrefslogtreecommitdiffstats
path: root/src/musichub
diff options
context:
space:
mode:
authorClyhtsuriva <61652557+clyhtsuriva@users.noreply.github.com>2021-06-28 21:40:03 +0000
committerGitHub <noreply@github.com>2021-06-28 21:40:03 +0000
commit1504d0255279133668b85f5c092f040a14fbc35f (patch)
tree0c9b9e927aa4d5f35ccc07e45e8abd973b2bad08 /src/musichub
parent48d56d9db8fe93f1e1799674fefabdfc677d2eb7 (diff)
parent49196ae84aea338dbc6cd10f4d135e4b717cdd1f (diff)
downloadSpoteezer-1504d0255279133668b85f5c092f040a14fbc35f.tar.gz
Spoteezer-1504d0255279133668b85f5c092f040a14fbc35f.tar.bz2
Spoteezer-1504d0255279133668b85f5c092f040a14fbc35f.zip
Merge pull request #23 from Said-Belhadj/developHEADmaster
Merging develop to master.
Diffstat (limited to '')
-rw-r--r--src/main/java/musichub/business/Album.java (renamed from src/musichub/business/Album.java)0
-rw-r--r--src/main/java/musichub/business/AudioBook.java (renamed from src/musichub/business/AudioBook.java)0
-rw-r--r--src/main/java/musichub/business/AudioElement.java (renamed from src/musichub/business/AudioElement.java)44
-rw-r--r--src/main/java/musichub/business/Category.java (renamed from src/musichub/business/Category.java)0
-rw-r--r--src/main/java/musichub/business/Genre.java (renamed from src/musichub/business/Genre.java)0
-rw-r--r--src/main/java/musichub/business/Language.java (renamed from src/musichub/business/Language.java)0
-rw-r--r--src/main/java/musichub/business/MusicHub.java (renamed from src/musichub/business/MusicHub.java)76
-rw-r--r--src/main/java/musichub/business/NoAlbumFoundException.java (renamed from src/musichub/business/NoAlbumFoundException.java)0
-rw-r--r--src/main/java/musichub/business/NoElementFoundException.java (renamed from src/musichub/business/NoElementFoundException.java)0
-rw-r--r--src/main/java/musichub/business/NoPlayListFoundException.java (renamed from src/musichub/business/NoPlayListFoundException.java)0
-rw-r--r--src/main/java/musichub/business/PlayList.java (renamed from src/musichub/business/PlayList.java)0
-rw-r--r--src/main/java/musichub/business/Song.java (renamed from src/musichub/business/Song.java)2
-rw-r--r--src/main/java/musichub/main/Main.java (renamed from src/musichub/main/Main.java)99
-rw-r--r--src/main/java/musichub/util/XMLHandler.java (renamed from src/musichub/util/XMLHandler.java)0
14 files changed, 216 insertions, 5 deletions
diff --git a/src/musichub/business/Album.java b/src/main/java/musichub/business/Album.java
index 01fd179..01fd179 100644
--- a/src/musichub/business/Album.java
+++ b/src/main/java/musichub/business/Album.java
diff --git a/src/musichub/business/AudioBook.java b/src/main/java/musichub/business/AudioBook.java
index 80392d6..80392d6 100644
--- a/src/musichub/business/AudioBook.java
+++ b/src/main/java/musichub/business/AudioBook.java
diff --git a/src/musichub/business/AudioElement.java b/src/main/java/musichub/business/AudioElement.java
index e0a686b..80a649a 100644
--- a/src/musichub/business/AudioElement.java
+++ b/src/main/java/musichub/business/AudioElement.java
@@ -1,8 +1,13 @@
package musichub.business;
+import musichub.util.LogHandler;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import javax.sound.sampled.*;
+import java.io.File;
+import java.io.IOException;
+import java.util.Scanner;
import java.util.UUID;
public abstract class AudioElement {
@@ -84,5 +89,44 @@ public abstract class AudioElement {
parentElement.appendChild(contentElement);
}
+
+ public void manageAudioElement() throws UnsupportedAudioFileException, IOException, LineUnavailableException {
+
+ Scanner scanner = new Scanner(System.in);
+
+ File file = new File(this.content);
+ AudioInputStream audioStream = AudioSystem.getAudioInputStream(file);
+ Clip clip = AudioSystem.getClip();
+ clip.open(audioStream);
+
+ String action = "";
+
+ while(!action.equals("Q")) {
+ System.out.println("P = Play \b S = Stop \b R = Reset \b Q = Quit");
+ System.out.println("Enter your choice");
+ action = scanner.next();
+ action = action.toUpperCase();
+
+ switch (action) {
+ case "S", "Q" -> {
+ clip.stop();
+ LogHandler.write("Music stopped", "INFO");
+ }
+ case "P" -> {
+ clip.start();
+ LogHandler.write("Music started", "INFO");
+ }
+ case "R" -> {
+ clip.setMicrosecondPosition(0);
+ LogHandler.write("Music reseted", "INFO");
+ }
+ default -> System.out.println("try again");
+ }
+ System.out.println("You stopped the Audio element");
+ }
+
+ clip.close();
+
+ }
} \ No newline at end of file
diff --git a/src/musichub/business/Category.java b/src/main/java/musichub/business/Category.java
index f676e51..f676e51 100644
--- a/src/musichub/business/Category.java
+++ b/src/main/java/musichub/business/Category.java
diff --git a/src/musichub/business/Genre.java b/src/main/java/musichub/business/Genre.java
index 18deca6..18deca6 100644
--- a/src/musichub/business/Genre.java
+++ b/src/main/java/musichub/business/Genre.java
diff --git a/src/musichub/business/Language.java b/src/main/java/musichub/business/Language.java
index 679e586..679e586 100644
--- a/src/musichub/business/Language.java
+++ b/src/main/java/musichub/business/Language.java
diff --git a/src/musichub/business/MusicHub.java b/src/main/java/musichub/business/MusicHub.java
index 38e2214..8db2f11 100644
--- a/src/musichub/business/MusicHub.java
+++ b/src/main/java/musichub/business/MusicHub.java
@@ -6,6 +6,9 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.UnsupportedAudioFileException;
+import java.io.IOException;
import java.util.*;
class SortByDate implements Comparator<Album> {
@@ -326,4 +329,77 @@ public class MusicHub {
}
xmlHandler.createXMLFile(document, ELEMENTS_FILE_PATH);
}
+
+ public void getAudioElement(List<AudioElement> audios, String elementTitle) throws NoAlbumFoundException, UnsupportedAudioFileException, IOException, LineUnavailableException {
+ for (AudioElement el : audios) {
+ if (el.getTitle().equalsIgnoreCase(elementTitle)) {
+ el.manageAudioElement();
+ }
+ }
+
+ }
+
+ public void searchAudioElement() throws UnsupportedAudioFileException, NoAlbumFoundException, LineUnavailableException, IOException, NoElementFoundException {
+ Scanner scanner = new Scanner(System.in);
+ System.out.println("Entrez le titre ou l'artiste de la musique que vous souhaitez chercher dans la base de données");
+ String word = scanner.next().toLowerCase(Locale.ROOT);
+ List<AudioElement> searchResult = new ArrayList<>();
+ for(AudioElement el : elements){
+ if(el.getTitle().toLowerCase(Locale.ROOT).contains(word) || el.getArtist().toLowerCase(Locale.ROOT).contains(word)){
+ searchResult.add(el);
+ System.out.println(el);
+ }
+ }
+
+ if (searchResult.isEmpty()) {
+ throw new NoElementFoundException("Any result for your search");
+ }
+ if (searchResult.size() == 1) {
+ this.getAudioElement(searchResult, searchResult.get(0).getTitle());
+ }
+ }
+
+ /**
+ * Method getting a list of playlists
+ *
+ * @return a list of playlist titles
+ * @author Anthony BOULANT
+ */
+ public String getPlayListsTitles() {
+ StringBuilder titleList = new StringBuilder();
+
+ for (PlayList pl : playlists)
+ titleList.append(pl.getTitle()).append("\n");
+ return titleList.toString();
+ }
+
+ /**
+ * Method checking the songs contained in a chosen playlist and returning them if found.
+ *
+ * @param playListTitle the title of a (chosen) playlist
+ * @return a list of songs from a playlist
+ * @throws NoPlayListFoundException if the chosen playlist doesn't exist
+ * @author Anthony BOULANT
+ */
+ public List<AudioElement> getPlayListSongs(String playListTitle) throws NoPlayListFoundException {
+ PlayList thePlayList = null;
+ ArrayList<AudioElement> songsInPlayList = new ArrayList<>();
+ for (PlayList pl : playlists) {
+ if (pl.getTitle().equalsIgnoreCase(playListTitle)) {
+ thePlayList = pl;
+ break;
+ }
+ }
+ if (thePlayList == null) throw new NoPlayListFoundException("No playlist with this title in the MusicHub!");
+
+ List<UUID> songIDs = thePlayList.getElements();
+ for (UUID id : songIDs)
+ for (AudioElement el : elements) {
+ if (el instanceof Song) {
+ if (el.getUUID().equals(id)) songsInPlayList.add(el);
+ }
+ }
+ return songsInPlayList;
+
+ }
} \ No newline at end of file
diff --git a/src/musichub/business/NoAlbumFoundException.java b/src/main/java/musichub/business/NoAlbumFoundException.java
index 04cbfcd..04cbfcd 100644
--- a/src/musichub/business/NoAlbumFoundException.java
+++ b/src/main/java/musichub/business/NoAlbumFoundException.java
diff --git a/src/musichub/business/NoElementFoundException.java b/src/main/java/musichub/business/NoElementFoundException.java
index a9b0d76..a9b0d76 100644
--- a/src/musichub/business/NoElementFoundException.java
+++ b/src/main/java/musichub/business/NoElementFoundException.java
diff --git a/src/musichub/business/NoPlayListFoundException.java b/src/main/java/musichub/business/NoPlayListFoundException.java
index c5eb413..c5eb413 100644
--- a/src/musichub/business/NoPlayListFoundException.java
+++ b/src/main/java/musichub/business/NoPlayListFoundException.java
diff --git a/src/musichub/business/PlayList.java b/src/main/java/musichub/business/PlayList.java
index 4180a62..4180a62 100644
--- a/src/musichub/business/PlayList.java
+++ b/src/main/java/musichub/business/PlayList.java
diff --git a/src/musichub/business/Song.java b/src/main/java/musichub/business/Song.java
index 3e9011b..564b7c5 100644
--- a/src/musichub/business/Song.java
+++ b/src/main/java/musichub/business/Song.java
@@ -53,4 +53,6 @@ public class Song extends AudioElement {
parentElement.appendChild(song);
}
+
+
} \ No newline at end of file
diff --git a/src/musichub/main/Main.java b/src/main/java/musichub/main/Main.java
index f917b01..07786d9 100644
--- a/src/musichub/main/Main.java
+++ b/src/main/java/musichub/main/Main.java
@@ -1,12 +1,22 @@
package musichub.main;
import musichub.business.*;
+import musichub.util.LogHandler;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.UnsupportedAudioFileException;
+import java.io.IOException;
import java.util.Iterator;
+import java.util.List;
import java.util.Scanner;
+import static musichub.util.PathValidation.isPathValid;
+import static musichub.util.Policy.showTerm;
+
public class Main {
- public static void main(String[] args) {
+ public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException, NoAlbumFoundException {
+
+ showTerm();
MusicHub theHub = new MusicHub();
@@ -20,8 +30,10 @@ public class Main {
if (choice.length() == 0) System.exit(0);
- while (choice.charAt(0) != 'q') {
+ while (!choice.equals("")) { //if the user puts nothing, quit the loop/system
switch (choice.charAt(0)) {
+ case 'q': //added the option directly in the switch instead of the loop
+ System.exit(0);
case 'h':
printAvailableCommands();
choice = scan.nextLine();
@@ -39,8 +51,10 @@ public class Main {
albumTitle = scan.nextLine();
try {
- System.out.println(theHub.getAlbumSongsSortedByGenre(albumTitle));
+ List<Song> songs = theHub.getAlbumSongsSortedByGenre(albumTitle);
+ System.out.println(songs);
} catch (NoAlbumFoundException ex) {
+ LogHandler.write("No album found with the requested title", "WARNING");
System.out.println("No album found with the requested title " + ex.getMessage());
}
printAvailableCommands();
@@ -53,8 +67,12 @@ public class Main {
albumTitle = scan.nextLine();
try {
+ List<AudioElement> songs = theHub.getAlbumSongs(albumTitle);
System.out.println(theHub.getAlbumSongs(albumTitle));
+ String song = scan.nextLine();
+ theHub.getAudioElement(songs, song);
} catch (NoAlbumFoundException ex) {
+ LogHandler.write("No album found with the requested title", "WARNING");
System.out.println("No album found with the requested title " + ex.getMessage());
}
printAvailableCommands();
@@ -75,15 +93,37 @@ public class Main {
String genre = scan.nextLine();
System.out.println("Song artist: ");
String artist = scan.nextLine();
- System.out.println("Song length in seconds: ");
- int length = Integer.parseInt(scan.nextLine());
+
+ int length;
+ try {
+ System.out.println("Song length in seconds: ");
+ length = Integer.parseInt(scan.nextLine());
+ } catch (NumberFormatException ex) {
+ String logMsg = "You've not provided a number for the length.";
+ LogHandler.write(logMsg, "ERROR"); //write a line in the log file
+ System.err.println(logMsg);
+ System.out.println("Type h for available commands");
+ choice = scan.nextLine();
+ break;
+ }
+
System.out.println("Song content: ");
String content = scan.nextLine();
+ if (!isPathValid(content)) {
+ String logMsg = "The music file cannot be found with the path you've provided or the extension is not .wav";
+ LogHandler.write(logMsg, "ERROR"); //write a line in the log file
+ System.err.println(logMsg);
+ System.out.println("Type h for available commands");
+ choice = scan.nextLine();
+ break;
+ }
+
Song s = new Song(title, artist, length, content, genre);
theHub.addElement(s);
System.out.println("New element list: ");
Iterator<AudioElement> it = theHub.elements();
while (it.hasNext()) System.out.println(it.next().getTitle());
+ LogHandler.write("Song successfully created", "INFO");
System.out.println("Song created!");
printAvailableCommands();
choice = scan.nextLine();
@@ -104,6 +144,7 @@ public class Main {
System.out.println("New list of albums: ");
Iterator<Album> ita = theHub.albums();
while (ita.hasNext()) System.out.println(ita.next().getTitle());
+ LogHandler.write("Album successfully created", "INFO");
System.out.println("Album created!");
printAvailableCommands();
choice = scan.nextLine();
@@ -131,6 +172,7 @@ public class Main {
} catch (NoAlbumFoundException | NoElementFoundException ex) {
System.out.println(ex.getMessage());
}
+ LogHandler.write("Song successfully added to the album", "INFO");
System.out.println("Song added to the album!");
printAvailableCommands();
choice = scan.nextLine();
@@ -152,6 +194,7 @@ public class Main {
String bLanguage = scan.nextLine();
AudioBook b = new AudioBook(bTitle, bArtist, bLength, bContent, bLanguage, bCategory);
theHub.addElement(b);
+ LogHandler.write("Audiobook successfully created", "INFO");
System.out.println("Audiobook created! New element list: ");
Iterator<AudioElement> itl = theHub.elements();
while (itl.hasNext()) System.out.println(itl.next().getTitle());
@@ -190,6 +233,7 @@ public class Main {
System.out.println("Type y to add a new one, n to end");
choice = scan.nextLine();
}
+ LogHandler.write("Playlist successfully created", "INFO");
System.out.println("Playlist created!");
printAvailableCommands();
choice = scan.nextLine();
@@ -208,6 +252,7 @@ public class Main {
} catch (NoPlayListFoundException ex) {
System.out.println(ex.getMessage());
}
+ LogHandler.write("Playlist successfully deleted", "INFO");
System.out.println("Playlist deleted!");
printAvailableCommands();
choice = scan.nextLine();
@@ -217,10 +262,50 @@ public class Main {
theHub.saveElements();
theHub.saveAlbums();
theHub.savePlayLists();
+ LogHandler.write("Elements, albums and playlists successfully saved", "INFO");
System.out.println("Elements, albums and playlists saved!");
printAvailableCommands();
choice = scan.nextLine();
break;
+ case 'r':
+ //search a music
+ try {
+ theHub.searchAudioElement();
+ }
+ catch (NoElementFoundException e){
+ System.err.println(e.getMessage());
+ }
+ catch (java.io.FileNotFoundException e){
+ LogHandler.write("Please create a file with the extension .wav inside the song folder at root of the app", "ERROR");
+ System.err.println(e.getMessage() + " Please create a file with the extension .wav inside the song folder at root of the app");
+ }
+ printAvailableCommands();
+ choice = scan.nextLine();
+ break;
+ case 'o':
+ //consult the app logs
+ LogHandler.read();
+ System.out.println("Type h for available commands");
+ choice = scan.nextLine();
+ break;
+ case 'm':
+ //songs of a playlist
+ System.out.println("Songs of a playlist will be displayed; enter the playlist name, available playlists are:");
+ System.out.println(theHub.getPlayListsTitles());
+
+ playListTitle = scan.nextLine();
+ try {
+ List<AudioElement> songs = theHub.getPlayListSongs(playListTitle);
+ System.out.println(theHub.getPlayListSongs(playListTitle));
+ String song = scan.nextLine();
+ theHub.getAudioElement(songs, song);
+ } catch (NoPlayListFoundException ex) {
+ LogHandler.write("No playlist found with the requested title", "WARNING");
+ System.out.println("No playlist found with the requested title " + ex.getMessage());
+ }
+ printAvailableCommands();
+ choice = scan.nextLine();
+ break;
default:
break;
@@ -234,13 +319,17 @@ public class Main {
System.out.println("g: display songs of an album, ordered by genre");
System.out.println("d: display songs of an album");
System.out.println("u: display audiobooks ordered by author");
+ System.out.println("r: search audio elements");
System.out.println("c: add a new song");
System.out.println("a: add a new album");
System.out.println("+: add a song to an album");
System.out.println("l: add a new audiobook");
System.out.println("p: create a new playlist from existing songs and audio books");
+ System.out.println("m: display songs of a playlist");
System.out.println("-: delete an existing playlist");
System.out.println("s: save elements, albums, playlists");
+ System.out.println("o: consult the app logs");
System.out.println("q: quit program");
}
+
} \ No newline at end of file
diff --git a/src/musichub/util/XMLHandler.java b/src/main/java/musichub/util/XMLHandler.java
index 4b61842..4b61842 100644
--- a/src/musichub/util/XMLHandler.java
+++ b/src/main/java/musichub/util/XMLHandler.java