aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClyhtsuriva <61652557+clyhtsuriva@users.noreply.github.com>2021-06-26 14:54:04 +0000
committerGitHub <noreply@github.com>2021-06-26 14:54:04 +0000
commitaf3f000913ddcd6fdf4d8581c0e9dad1b1edc6a3 (patch)
treea0c875335ce68efd4959ee031dfa8671c9eaa78a
parent4ff84568723b1663b9e20f95535d3213f8d3e92e (diff)
parente9ee951e570c441151385d1ccd8c4230abf704ca (diff)
Merge pull request #6 from Said-Belhadj/feature/STZ-0002
Feature/stz 0002
-rw-r--r--src/main/java/musichub/business/PathValidation.java39
-rw-r--r--src/main/java/musichub/main/Main.java14
-rw-r--r--src/test/java/musichub/business/PathValidationTest.java26
-rw-r--r--target/classes/musichub/business/AudioElement.classbin5392 -> 5422 bytes
-rw-r--r--target/classes/musichub/business/MusicHub.classbin11543 -> 11543 bytes
-rw-r--r--target/classes/musichub/business/PathValidation.classbin0 -> 865 bytes
-rw-r--r--target/classes/musichub/business/SortByAuthor.classbin901 -> 901 bytes
-rw-r--r--target/classes/musichub/business/SortByDate.classbin854 -> 854 bytes
-rw-r--r--target/classes/musichub/business/SortByGenre.classbin858 -> 858 bytes
-rw-r--r--target/classes/musichub/main/Main.classbin9840 -> 10064 bytes
-rw-r--r--target/jacoco.execbin0 -> 80650 bytes
-rw-r--r--target/maven-archiver/pom.properties2
-rw-r--r--target/maven-javadoc-plugin-stale-data.txt39
-rw-r--r--target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst1
-rw-r--r--target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst1
-rw-r--r--target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst1
-rw-r--r--target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst1
-rw-r--r--target/original-spoteezer-0.1.0.jarbin31130 -> 31900 bytes
-rw-r--r--target/site/apidocs/allclasses-index.html14
-rw-r--r--target/site/apidocs/allpackages-index.html2
-rw-r--r--target/site/apidocs/help-doc.html2
-rw-r--r--target/site/apidocs/index-all.html14
-rw-r--r--target/site/apidocs/index.html2
-rw-r--r--target/site/apidocs/member-search-index.js2
-rw-r--r--target/site/apidocs/musichub/business/Album.html2
-rw-r--r--target/site/apidocs/musichub/business/AudioBook.html2
-rw-r--r--target/site/apidocs/musichub/business/AudioElement.html2
-rw-r--r--target/site/apidocs/musichub/business/Category.html2
-rw-r--r--target/site/apidocs/musichub/business/Genre.html2
-rw-r--r--target/site/apidocs/musichub/business/Language.html2
-rw-r--r--target/site/apidocs/musichub/business/MusicHub.html2
-rw-r--r--target/site/apidocs/musichub/business/NoAlbumFoundException.html2
-rw-r--r--target/site/apidocs/musichub/business/NoElementFoundException.html2
-rw-r--r--target/site/apidocs/musichub/business/NoPlayListFoundException.html2
-rw-r--r--target/site/apidocs/musichub/business/PathValidation.html189
-rw-r--r--target/site/apidocs/musichub/business/PlayList.html2
-rw-r--r--target/site/apidocs/musichub/business/Song.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/Album.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/AudioBook.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/AudioElement.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/Category.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/Genre.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/Language.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/MusicHub.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/NoAlbumFoundException.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/NoElementFoundException.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/NoPlayListFoundException.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/PathValidation.html65
-rw-r--r--target/site/apidocs/musichub/business/class-use/PlayList.html2
-rw-r--r--target/site/apidocs/musichub/business/class-use/Song.html2
-rw-r--r--target/site/apidocs/musichub/business/package-summary.html12
-rw-r--r--target/site/apidocs/musichub/business/package-tree.html3
-rw-r--r--target/site/apidocs/musichub/business/package-use.html2
-rw-r--r--target/site/apidocs/musichub/main/Main.html2
-rw-r--r--target/site/apidocs/musichub/main/class-use/Main.html2
-rw-r--r--target/site/apidocs/musichub/main/package-summary.html2
-rw-r--r--target/site/apidocs/musichub/main/package-tree.html2
-rw-r--r--target/site/apidocs/musichub/main/package-use.html2
-rw-r--r--target/site/apidocs/musichub/util/XMLHandler.html2
-rw-r--r--target/site/apidocs/musichub/util/class-use/XMLHandler.html2
-rw-r--r--target/site/apidocs/musichub/util/package-summary.html2
-rw-r--r--target/site/apidocs/musichub/util/package-tree.html2
-rw-r--r--target/site/apidocs/musichub/util/package-use.html2
-rw-r--r--target/site/apidocs/overview-summary.html2
-rw-r--r--target/site/apidocs/overview-tree.html3
-rw-r--r--target/site/apidocs/serialized-form.html2
-rw-r--r--target/site/apidocs/type-search-index.js2
-rw-r--r--target/site/jacoco/index.html1
-rw-r--r--target/site/jacoco/jacoco-resources/branchfc.gifbin0 -> 91 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/branchnc.gifbin0 -> 91 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/branchpc.gifbin0 -> 91 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/bundle.gifbin0 -> 709 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/class.gifbin0 -> 586 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/down.gifbin0 -> 67 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/greenbar.gifbin0 -> 91 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/group.gifbin0 -> 351 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/method.gifbin0 -> 193 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/package.gifbin0 -> 227 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/prettify.css13
-rw-r--r--target/site/jacoco/jacoco-resources/prettify.js1510
-rw-r--r--target/site/jacoco/jacoco-resources/redbar.gifbin0 -> 91 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/report.css243
-rw-r--r--target/site/jacoco/jacoco-resources/report.gifbin0 -> 363 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/session.gifbin0 -> 213 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/sort.gifbin0 -> 58 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/sort.js148
-rw-r--r--target/site/jacoco/jacoco-resources/source.gifbin0 -> 354 bytes
-rw-r--r--target/site/jacoco/jacoco-resources/up.gifbin0 -> 67 bytes
-rw-r--r--target/site/jacoco/jacoco-sessions.html1
-rw-r--r--target/site/jacoco/jacoco.csv19
-rw-r--r--target/site/jacoco/jacoco.xml1
-rw-r--r--target/site/jacoco/musichub.business/Album.html1
-rw-r--r--target/site/jacoco/musichub.business/Album.java.html146
-rw-r--r--target/site/jacoco/musichub.business/AudioBook.html1
-rw-r--r--target/site/jacoco/musichub.business/AudioBook.java.html79
-rw-r--r--target/site/jacoco/musichub.business/AudioElement.html1
-rw-r--r--target/site/jacoco/musichub.business/AudioElement.java.html133
-rw-r--r--target/site/jacoco/musichub.business/Category.html1
-rw-r--r--target/site/jacoco/musichub.business/Category.java.html15
-rw-r--r--target/site/jacoco/musichub.business/Genre.html1
-rw-r--r--target/site/jacoco/musichub.business/Genre.java.html15
-rw-r--r--target/site/jacoco/musichub.business/Language.html1
-rw-r--r--target/site/jacoco/musichub.business/Language.java.html15
-rw-r--r--target/site/jacoco/musichub.business/MusicHub.html1
-rw-r--r--target/site/jacoco/musichub.business/MusicHub.java.html343
-rw-r--r--target/site/jacoco/musichub.business/NoAlbumFoundException.html1
-rw-r--r--target/site/jacoco/musichub.business/NoAlbumFoundException.java.html9
-rw-r--r--target/site/jacoco/musichub.business/NoElementFoundException.html1
-rw-r--r--target/site/jacoco/musichub.business/NoElementFoundException.java.html9
-rw-r--r--target/site/jacoco/musichub.business/NoPlayListFoundException.html1
-rw-r--r--target/site/jacoco/musichub.business/NoPlayListFoundException.java.html9
-rw-r--r--target/site/jacoco/musichub.business/PathValidation.html1
-rw-r--r--target/site/jacoco/musichub.business/PathValidation.java.html39
-rw-r--r--target/site/jacoco/musichub.business/PlayList.html1
-rw-r--r--target/site/jacoco/musichub.business/PlayList.java.html101
-rw-r--r--target/site/jacoco/musichub.business/Song.html1
-rw-r--r--target/site/jacoco/musichub.business/Song.java.html59
-rw-r--r--target/site/jacoco/musichub.business/SortByAuthor.html1
-rw-r--r--target/site/jacoco/musichub.business/SortByDate.html1
-rw-r--r--target/site/jacoco/musichub.business/SortByGenre.html1
-rw-r--r--target/site/jacoco/musichub.business/index.html1
-rw-r--r--target/site/jacoco/musichub.business/index.source.html1
-rw-r--r--target/site/jacoco/musichub.main/Main.html1
-rw-r--r--target/site/jacoco/musichub.main/Main.java.html266
-rw-r--r--target/site/jacoco/musichub.main/index.html1
-rw-r--r--target/site/jacoco/musichub.main/index.source.html1
-rw-r--r--target/site/jacoco/musichub.util/XMLHandler.html1
-rw-r--r--target/site/jacoco/musichub.util/XMLHandler.java.html75
-rw-r--r--target/site/jacoco/musichub.util/index.html1
-rw-r--r--target/site/jacoco/musichub.util/index.source.html1
-rw-r--r--target/spoteezer-0.1.0.jarbin367000 -> 367786 bytes
-rw-r--r--target/surefire-reports/TEST-musichub.business.PathValidationTest.xml60
-rw-r--r--target/surefire-reports/musichub.business.PathValidationTest.txt4
-rw-r--r--target/test-classes/musichub/business/PathValidationTest.classbin0 -> 1190 bytes
134 files changed, 3768 insertions, 77 deletions
diff --git a/src/main/java/musichub/business/PathValidation.java b/src/main/java/musichub/business/PathValidation.java
new file mode 100644
index 0000000..b0281ba
--- /dev/null
+++ b/src/main/java/musichub/business/PathValidation.java
@@ -0,0 +1,39 @@
+package musichub.business;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Class offering a path validation method.
+ *
+ * @author Aimeric ADJUTOR
+ * @version 1.0
+ */
+
+public final class PathValidation {
+
+ /**
+ * Method that just throws an AssertionError if the class is called
+ *
+ * @throws AssertionError you can't instantiate this class
+ * @author Aimeric ADJUTOR
+ */
+
+ public PathValidation() {
+ throw new AssertionError("You just can't instantiate this class.");
+ }
+
+ /**
+ * Method that checks the validity of a given path
+ *
+ * @param inputPath the path given by the user
+ * @return a boolean
+ */
+
+ public static boolean isPathValid(String inputPath) {
+ Path path = Paths.get(inputPath);
+ return Files.exists(path);
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/musichub/main/Main.java b/src/main/java/musichub/main/Main.java
index 2876734..e2e4731 100644
--- a/src/main/java/musichub/main/Main.java
+++ b/src/main/java/musichub/main/Main.java
@@ -2,13 +2,14 @@ package musichub.main;
import musichub.business.*;
+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 javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.UnsupportedAudioFileException;
+import static musichub.business.PathValidation.isPathValid;
public class Main {
public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException {
@@ -47,7 +48,7 @@ public class Main {
albumTitle = scan.nextLine();
try {
List<Song> songs = theHub.getAlbumSongsSortedByGenre(albumTitle);
- System.out.println(songs);;
+ System.out.println(songs);
} catch (NoAlbumFoundException ex) {
System.out.println("No album found with the requested title " + ex.getMessage());
}
@@ -88,8 +89,15 @@ public class Main {
String artist = scan.nextLine();
System.out.println("Song length in seconds: ");
int length = Integer.parseInt(scan.nextLine());
+
System.out.println("Song content: ");
String content = scan.nextLine();
+ if (!isPathValid(content)) {
+ System.out.println("The music file was not found with the path you've provided.\nType 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: ");
diff --git a/src/test/java/musichub/business/PathValidationTest.java b/src/test/java/musichub/business/PathValidationTest.java
new file mode 100644
index 0000000..fffbdde
--- /dev/null
+++ b/src/test/java/musichub/business/PathValidationTest.java
@@ -0,0 +1,26 @@
+package musichub.business;
+
+
+import org.junit.jupiter.api.Test;
+
+import static musichub.business.PathValidation.isPathValid;
+import static org.junit.jupiter.api.Assertions.*;
+
+public class PathValidationTest {
+ @Test
+ void testIsPathValid() {
+ assertTrue(isPathValid("Song/Side_To_Side.wav")); //the right path
+ assertFalse(isPathValid("wrong_path/Side_To_Side.wav")); //wrong path
+ assertFalse(isPathValid("Song/Side_To_Side.mp3")); //wrong extension
+ }
+
+ @Test
+ void testPathValidationClass() {
+ try {
+ PathValidation pathValidationClass = new PathValidation();
+ } catch (Error ex) {
+ assertTrue(ex instanceof AssertionError);
+ assertEquals("You just can't instantiate this class.", ex.getMessage());
+ }
+ }
+}
diff --git a/target/classes/musichub/business/AudioElement.class b/target/classes/musichub/business/AudioElement.class
index 3579513..bb0f170 100644
--- a/target/classes/musichub/business/AudioElement.class
+++ b/target/classes/musichub/business/AudioElement.class
Binary files differ
diff --git a/target/classes/musichub/business/MusicHub.class b/target/classes/musichub/business/MusicHub.class
index 8b8b280..9554eeb 100644
--- a/target/classes/musichub/business/MusicHub.class
+++ b/target/classes/musichub/business/MusicHub.class
Binary files differ
diff --git a/target/classes/musichub/business/PathValidation.class b/target/classes/musichub/business/PathValidation.class
new file mode 100644
index 0000000..5e3ac15
--- /dev/null
+++ b/target/classes/musichub/business/PathValidation.class
Binary files differ
diff --git a/target/classes/musichub/business/SortByAuthor.class b/target/classes/musichub/business/SortByAuthor.class
index ac4474a..e366c32 100644
--- a/target/classes/musichub/business/SortByAuthor.class
+++ b/target/classes/musichub/business/SortByAuthor.class
Binary files differ
diff --git a/target/classes/musichub/business/SortByDate.class b/target/classes/musichub/business/SortByDate.class
index 6892059..9d330cb 100644
--- a/target/classes/musichub/business/SortByDate.class
+++ b/target/classes/musichub/business/SortByDate.class
Binary files differ
diff --git a/target/classes/musichub/business/SortByGenre.class b/target/classes/musichub/business/SortByGenre.class
index 7cabb3e..512232f 100644
--- a/target/classes/musichub/business/SortByGenre.class
+++ b/target/classes/musichub/business/SortByGenre.class
Binary files differ
diff --git a/target/classes/musichub/main/Main.class b/target/classes/musichub/main/Main.class
index 1e19601..f3d2052 100644
--- a/target/classes/musichub/main/Main.class
+++ b/target/classes/musichub/main/Main.class
Binary files differ
diff --git a/target/jacoco.exec b/target/jacoco.exec
new file mode 100644
index 0000000..a11f908
--- /dev/null
+++ b/target/jacoco.exec
Binary files differ
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
index 1b408a6..1d6eb92 100644
--- a/target/maven-archiver/pom.properties
+++ b/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Sat Jun 26 13:25:26 CEST 2021
+#Sat Jun 26 14:29:09 CEST 2021
groupId=esiea.softwareengineering
artifactId=spoteezer
version=0.1.0
diff --git a/target/maven-javadoc-plugin-stale-data.txt b/target/maven-javadoc-plugin-stale-data.txt
index c701b12..211d1c0 100644
--- a/target/maven-javadoc-plugin-stale-data.txt
+++ b/target/maven-javadoc-plugin-stale-data.txt
@@ -34,6 +34,7 @@
'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/business/NoAlbumFoundException.java'
'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/business/NoElementFoundException.java'
'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/business/NoPlayListFoundException.java'
+'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/business/PathValidation.java'
'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/business/PlayList.java'
'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/business/Song.java'
'C:/Users/SoftA/Documents/spoteezer/src/main/java/musichub/main/Main.java'
@@ -43,22 +44,22 @@ C:\Users\SoftA\.m2\repository\org\opentest4j\opentest4j\1.0.0\opentest4j-1.0.0.j
C:\Users\SoftA\.m2\repository\org\junit\platform\junit-platform-commons\1.0.2\junit-platform-commons-1.0.2.jar = 1624015816770
C:\Users\SoftA\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.0.2\junit-jupiter-engine-5.0.2.jar = 1624015816790
C:\Users\SoftA\.m2\repository\org\junit\platform\junit-platform-engine\1.0.2\junit-platform-engine-1.0.2.jar = 1624015816783
-C:\Users\SoftA\Documents\spoteezer\src\main\java = 1624705682872
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\allclasses-index.html = 1624706731862
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\allpackages-index.html = 1624706731864
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\element-list = 1624706731767
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\help-doc.html = 1624706731890
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\index-all.html = 1624706731885
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\index.html = 1624706731838
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\jquery-ui.overrides.css = 1624706731909
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\member-search-index.js = 1624706731868
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\module-search-index.js = 1624706731865
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\overview-summary.html = 1624706731887
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\overview-tree.html = 1624706731835
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\package-search-index.js = 1624706731866
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\script.js = 1624706731894
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\search.js = 1624706731895
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\serialized-form.html = 1624706731788
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\stylesheet.css = 1624706731892
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\tag-search-index.js = 1624706731869
-C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\type-search-index.js = 1624706731867 \ No newline at end of file
+C:\Users\SoftA\Documents\spoteezer\src\main\java = 1624708123937
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\allclasses-index.html = 1624710556861
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\allpackages-index.html = 1624710556864
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\element-list = 1624710556758
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\help-doc.html = 1624710556888
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\index-all.html = 1624710556884
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\index.html = 1624710556844
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\jquery-ui.overrides.css = 1624710556910
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\member-search-index.js = 1624710556868
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\module-search-index.js = 1624710556865
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\overview-summary.html = 1624710556885
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\overview-tree.html = 1624710556841
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\package-search-index.js = 1624710556866
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\script.js = 1624710556892
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\search.js = 1624710556895
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\serialized-form.html = 1624710556785
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\stylesheet.css = 1624710556891
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\tag-search-index.js = 1624710556869
+C:\Users\SoftA\Documents\spoteezer\target\site\apidocs\type-search-index.js = 1624710556867 \ No newline at end of file
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
index a388223..26c13ed 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -1,4 +1,5 @@
musichub\util\XMLHandler.class
+musichub\business\PathValidation.class
musichub\business\NoElementFoundException.class
musichub\business\Language.class
musichub\business\PlayList.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index 5354743..93f6593 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -7,6 +7,7 @@ C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\Language.java
C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\MusicHub.java
C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\Album.java
C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\AudioElement.java
+C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\PathValidation.java
C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\Category.java
C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\NoAlbumFoundException.java
C:\Users\SoftA\Documents\spoteezer\src\main\java\musichub\business\NoPlayListFoundException.java
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..649a939
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
@@ -0,0 +1 @@
+musichub\business\PathValidationTest.class
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
index e69de29..9b5d3f0 100644
--- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1 @@
+C:\Users\SoftA\Documents\spoteezer\src\test\java\musichub\business\PathValidationTest.java
diff --git a/target/original-spoteezer-0.1.0.jar b/target/original-spoteezer-0.1.0.jar
index b2c45cf..fbeb8a5 100644
--- a/target/original-spoteezer-0.1.0.jar
+++ b/target/original-spoteezer-0.1.0.jar
Binary files differ
diff --git a/target/site/apidocs/allclasses-index.html b/target/site/apidocs/allclasses-index.html
index 83bf57c..767b8ab 100644
--- a/target/site/apidocs/allclasses-index.html
+++ b/target/site/apidocs/allclasses-index.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>All Classes (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@@ -86,12 +86,16 @@ loadScripts(document, 'script');</script>
<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">&nbsp;</div>
<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="musichub/business/NoPlayListFoundException.html" title="class in musichub.business">NoPlayListFoundException</a></div>
<div class="col-last even-row-color all-classes-table all-classes-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/business/PlayList.html" title="class in musichub.business">PlayList</a></div>
-<div class="col-last odd-row-color all-classes-table-tab2 all-classes-table">&nbsp;</div>
-<div class="col-first even-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/business/Song.html" title="class in musichub.business">Song</a></div>
+<div class="col-first odd-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/business/PathValidation.html" title="class in musichub.business">PathValidation</a></div>
+<div class="col-last odd-row-color all-classes-table-tab2 all-classes-table">
+<div class="block">Class offering a path validation method.</div>
+</div>
+<div class="col-first even-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/business/PlayList.html" title="class in musichub.business">PlayList</a></div>
<div class="col-last even-row-color all-classes-table-tab2 all-classes-table">&nbsp;</div>
-<div class="col-first odd-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/util/XMLHandler.html" title="class in musichub.util">XMLHandler</a></div>
+<div class="col-first odd-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/business/Song.html" title="class in musichub.business">Song</a></div>
<div class="col-last odd-row-color all-classes-table-tab2 all-classes-table">&nbsp;</div>
+<div class="col-first even-row-color all-classes-table-tab2 all-classes-table"><a href="musichub/util/XMLHandler.html" title="class in musichub.util">XMLHandler</a></div>
+<div class="col-last even-row-color all-classes-table-tab2 all-classes-table">&nbsp;</div>
</div>
</div>
</div>
diff --git a/target/site/apidocs/allpackages-index.html b/target/site/apidocs/allpackages-index.html
index a9e8eb8..daffbfc 100644
--- a/target/site/apidocs/allpackages-index.html
+++ b/target/site/apidocs/allpackages-index.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>All Packages (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/help-doc.html b/target/site/apidocs/help-doc.html
index a2e0731..084eeb0 100644
--- a/target/site/apidocs/help-doc.html
+++ b/target/site/apidocs/help-doc.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>API Help (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/index-all.html b/target/site/apidocs/index-all.html
index cd292d0..bb26bd1 100644
--- a/target/site/apidocs/index-all.html
+++ b/target/site/apidocs/index-all.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Index (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@@ -202,6 +202,10 @@ loadScripts(document, 'script');</script>
</dl>
<h2 class="title" id="I:I">I</h2>
<dl class="index">
+<dt><span class="member-name-link"><a href="musichub/business/PathValidation.html#isPathValid(java.lang.String)">isPathValid(String)</a></span> - Static method in class musichub.business.<a href="musichub/business/PathValidation.html" title="class in musichub.business">PathValidation</a></dt>
+<dd>
+<div class="block">Method that checks the validity of a given path</div>
+</dd>
<dt><span class="member-name-link"><a href="musichub/business/Language.html#ITALIAN">ITALIAN</a></span> - Enum constant in enum class musichub.business.<a href="musichub/business/Language.html" title="enum class in musichub.business">Language</a></dt>
<dd>&nbsp;</dd>
</dl>
@@ -259,6 +263,14 @@ loadScripts(document, 'script');</script>
<dl class="index">
<dt><span class="member-name-link"><a href="musichub/util/XMLHandler.html#parseXMLFile(java.lang.String)">parseXMLFile(String)</a></span> - Method in class musichub.util.<a href="musichub/util/XMLHandler.html" title="class in musichub.util">XMLHandler</a></dt>
<dd>&nbsp;</dd>
+<dt><a href="musichub/business/PathValidation.html" title="class in musichub.business"><span class="type-name-link">PathValidation</span></a> - Class in <a href="musichub/business/package-summary.html">musichub.business</a></dt>
+<dd>
+<div class="block">Class offering a path validation method.</div>
+</dd>
+<dt><span class="member-name-link"><a href="musichub/business/PathValidation.html#%3Cinit%3E()">PathValidation()</a></span> - Constructor for class musichub.business.<a href="musichub/business/PathValidation.html" title="class in musichub.business">PathValidation</a></dt>
+<dd>
+<div class="block">Method that just throws an AssertionError if the class is called</div>
+</dd>
<dt><a href="musichub/business/PlayList.html" title="class in musichub.business"><span class="type-name-link">PlayList</span></a> - Class in <a href="musichub/business/package-summary.html">musichub.business</a></dt>
<dd>&nbsp;</dd>
<dt><span class="member-name-link"><a href="musichub/business/PlayList.html#%3Cinit%3E(java.lang.String)">PlayList(String)</a></span> - Constructor for class musichub.business.<a href="musichub/business/PlayList.html" title="class in musichub.business">PlayList</a></dt>
diff --git a/target/site/apidocs/index.html b/target/site/apidocs/index.html
index 87cf0ec..a865d2c 100644
--- a/target/site/apidocs/index.html
+++ b/target/site/apidocs/index.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Overview (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/member-search-index.js b/target/site/apidocs/member-search-index.js
index 784449a..7c431d3 100644
--- a/target/site/apidocs/member-search-index.js
+++ b/target/site/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"musichub.business","c":"MusicHub","l":"addAlbum(Album)","u":"addAlbum(musichub.business.Album)"},{"p":"musichub.business","c":"MusicHub","l":"addElement(AudioElement)","u":"addElement(musichub.business.AudioElement)"},{"p":"musichub.business","c":"PlayList","l":"addElement(UUID)","u":"addElement(java.util.UUID)"},{"p":"musichub.business","c":"MusicHub","l":"addElementToAlbum(String, String)","u":"addElementToAlbum(java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"addElementToPlayList(String, String)","u":"addElementToPlayList(java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"addPlaylist(PlayList)","u":"addPlaylist(musichub.business.PlayList)"},{"p":"musichub.business","c":"Album","l":"addSong(UUID)","u":"addSong(java.util.UUID)"},{"p":"musichub.business","c":"Album","l":"Album(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"Album","l":"Album(String, String, int, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String)"},{"p":"musichub.business","c":"Album","l":"Album(String, String, int, String, String, ArrayList<UUID>)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.util.ArrayList)"},{"p":"musichub.business","c":"MusicHub","l":"ALBUMS_FILE_PATH"},{"p":"musichub.business","c":"MusicHub","l":"albums()"},{"p":"musichub.business","c":"AudioElement","l":"artist"},{"p":"musichub.business","c":"AudioBook","l":"AudioBook(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioBook","l":"AudioBook(String, String, int, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"AudioBook","l":"AudioBook(String, String, int, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"AudioElement","l":"AudioElement(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioElement","l":"AudioElement(String, String, int, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String)"},{"p":"musichub.business","c":"AudioElement","l":"AudioElement(String, String, int, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"Genre","l":"CLASSIC"},{"p":"musichub.business","c":"AudioElement","l":"content"},{"p":"musichub.util","c":"XMLHandler","l":"createXMLDocument()"},{"p":"musichub.business","c":"Album","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioBook","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioElement","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"PlayList","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"Song","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.util","c":"XMLHandler","l":"createXMLFile(Document, String)","u":"createXMLFile(org.w3c.dom.Document,java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"deletePlayList(String)","u":"deletePlayList(java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"DIR"},{"p":"musichub.business","c":"Category","l":"DOCUMENTARY"},{"p":"musichub.business","c":"MusicHub","l":"ELEMENTS_FILE_PATH"},{"p":"musichub.business","c":"MusicHub","l":"elements()"},{"p":"musichub.business","c":"Language","l":"ENGLISH"},{"p":"musichub.business","c":"Language","l":"FRENCH"},{"p":"musichub.business","c":"Language","l":"GERMAN"},{"p":"musichub.business","c":"MusicHub","l":"getAlbumSongs(String)","u":"getAlbumSongs(java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"getAlbumSongsSortedByGenre(String)","u":"getAlbumSongsSortedByGenre(java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"getAlbumsTitlesSortedByDate()"},{"p":"musichub.business","c":"AudioElement","l":"getArtist()"},{"p":"musichub.business","c":"MusicHub","l":"getAudiobooksTitlesSortedByAuthor()"},{"p":"musichub.business","c":"MusicHub","l":"getAudioElement(List<AudioElement>, String)","u":"getAudioElement(java.util.List,java.lang.String)"},{"p":"musichub.business","c":"AudioBook","l":"getCategory()"},{"p":"musichub.business","c":"Category","l":"getCategory()"},{"p":"musichub.business","c":"Album","l":"getDate()"},{"p":"musichub.business","c":"PlayList","l":"getElements()"},{"p":"musichub.business","c":"Genre","l":"getGenre()"},{"p":"musichub.business","c":"Song","l":"getGenre()"},{"p":"musichub.business","c":"AudioBook","l":"getLanguage()"},{"p":"musichub.business","c":"Language","l":"getLanguage()"},{"p":"musichub.business","c":"Album","l":"getSongs()"},{"p":"musichub.business","c":"Album","l":"getSongsRandomly()"},{"p":"musichub.business","c":"Album","l":"getTitle()"},{"p":"musichub.business","c":"AudioElement","l":"getTitle()"},{"p":"musichub.business","c":"PlayList","l":"getTitle()"},{"p":"musichub.business","c":"AudioElement","l":"getUUID()"},{"p":"musichub.business","c":"Genre","l":"HIPHOP"},{"p":"musichub.business","c":"Language","l":"ITALIAN"},{"p":"musichub.business","c":"Genre","l":"JAZZ"},{"p":"musichub.business","c":"AudioElement","l":"lengthInSeconds"},{"p":"musichub.main","c":"Main","l":"Main()","u":"%3Cinit%3E()"},{"p":"musichub.main","c":"Main","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"musichub.business","c":"AudioElement","l":"manageAudioElement()"},{"p":"musichub.business","c":"MusicHub","l":"MusicHub()","u":"%3Cinit%3E()"},{"p":"musichub.business","c":"NoAlbumFoundException","l":"NoAlbumFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"NoElementFoundException","l":"NoElementFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"NoPlayListFoundException","l":"NoPlayListFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"Category","l":"NOVEL"},{"p":"musichub.util","c":"XMLHandler","l":"parseXMLFile(String)","u":"parseXMLFile(java.lang.String)"},{"p":"musichub.business","c":"PlayList","l":"PlayList(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"PlayList","l":"PlayList(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"PlayList","l":"PlayList(String, String, ArrayList<UUID>)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.util.ArrayList)"},{"p":"musichub.business","c":"MusicHub","l":"PLAYLISTS_FILE_PATH"},{"p":"musichub.business","c":"MusicHub","l":"playlists()"},{"p":"musichub.business","c":"Genre","l":"POP"},{"p":"musichub.business","c":"Genre","l":"RAP"},{"p":"musichub.business","c":"Genre","l":"ROCK"},{"p":"musichub.business","c":"MusicHub","l":"saveAlbums()"},{"p":"musichub.business","c":"MusicHub","l":"saveElements()"},{"p":"musichub.business","c":"MusicHub","l":"savePlayLists()"},{"p":"musichub.business","c":"AudioBook","l":"setCategory(String)","u":"setCategory(java.lang.String)"},{"p":"musichub.business","c":"Song","l":"setGenre(String)","u":"setGenre(java.lang.String)"},{"p":"musichub.business","c":"AudioBook","l":"setLanguage(String)","u":"setLanguage(java.lang.String)"},{"p":"musichub.business","c":"Song","l":"Song(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"Song","l":"Song(String, String, int, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"Song","l":"Song(String, String, int, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"Language","l":"SPANISH"},{"p":"musichub.business","c":"Category","l":"SPEECH"},{"p":"musichub.business","c":"Category","l":"THEATER"},{"p":"musichub.business","c":"AudioElement","l":"title"},{"p":"musichub.business","c":"AudioBook","l":"toString()"},{"p":"musichub.business","c":"AudioElement","l":"toString()"},{"p":"musichub.business","c":"Song","l":"toString()"},{"p":"musichub.business","c":"AudioElement","l":"uuid"},{"p":"musichub.business","c":"Category","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"musichub.business","c":"Genre","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"musichub.business","c":"Language","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"musichub.business","c":"Category","l":"values()"},{"p":"musichub.business","c":"Genre","l":"values()"},{"p":"musichub.business","c":"Language","l":"values()"},{"p":"musichub.util","c":"XMLHandler","l":"XMLHandler()","u":"%3Cinit%3E()"},{"p":"musichub.business","c":"Category","l":"YOUTH"}];updateSearchResults(); \ No newline at end of file
+memberSearchIndex = [{"p":"musichub.business","c":"MusicHub","l":"addAlbum(Album)","u":"addAlbum(musichub.business.Album)"},{"p":"musichub.business","c":"MusicHub","l":"addElement(AudioElement)","u":"addElement(musichub.business.AudioElement)"},{"p":"musichub.business","c":"PlayList","l":"addElement(UUID)","u":"addElement(java.util.UUID)"},{"p":"musichub.business","c":"MusicHub","l":"addElementToAlbum(String, String)","u":"addElementToAlbum(java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"addElementToPlayList(String, String)","u":"addElementToPlayList(java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"addPlaylist(PlayList)","u":"addPlaylist(musichub.business.PlayList)"},{"p":"musichub.business","c":"Album","l":"addSong(UUID)","u":"addSong(java.util.UUID)"},{"p":"musichub.business","c":"Album","l":"Album(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"Album","l":"Album(String, String, int, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String)"},{"p":"musichub.business","c":"Album","l":"Album(String, String, int, String, String, ArrayList<UUID>)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.util.ArrayList)"},{"p":"musichub.business","c":"MusicHub","l":"ALBUMS_FILE_PATH"},{"p":"musichub.business","c":"MusicHub","l":"albums()"},{"p":"musichub.business","c":"AudioElement","l":"artist"},{"p":"musichub.business","c":"AudioBook","l":"AudioBook(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioBook","l":"AudioBook(String, String, int, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"AudioBook","l":"AudioBook(String, String, int, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"AudioElement","l":"AudioElement(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioElement","l":"AudioElement(String, String, int, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String)"},{"p":"musichub.business","c":"AudioElement","l":"AudioElement(String, String, int, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"Genre","l":"CLASSIC"},{"p":"musichub.business","c":"AudioElement","l":"content"},{"p":"musichub.util","c":"XMLHandler","l":"createXMLDocument()"},{"p":"musichub.business","c":"Album","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioBook","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"AudioElement","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"PlayList","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.business","c":"Song","l":"createXMLElement(Document, Element)","u":"createXMLElement(org.w3c.dom.Document,org.w3c.dom.Element)"},{"p":"musichub.util","c":"XMLHandler","l":"createXMLFile(Document, String)","u":"createXMLFile(org.w3c.dom.Document,java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"deletePlayList(String)","u":"deletePlayList(java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"DIR"},{"p":"musichub.business","c":"Category","l":"DOCUMENTARY"},{"p":"musichub.business","c":"MusicHub","l":"ELEMENTS_FILE_PATH"},{"p":"musichub.business","c":"MusicHub","l":"elements()"},{"p":"musichub.business","c":"Language","l":"ENGLISH"},{"p":"musichub.business","c":"Language","l":"FRENCH"},{"p":"musichub.business","c":"Language","l":"GERMAN"},{"p":"musichub.business","c":"MusicHub","l":"getAlbumSongs(String)","u":"getAlbumSongs(java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"getAlbumSongsSortedByGenre(String)","u":"getAlbumSongsSortedByGenre(java.lang.String)"},{"p":"musichub.business","c":"MusicHub","l":"getAlbumsTitlesSortedByDate()"},{"p":"musichub.business","c":"AudioElement","l":"getArtist()"},{"p":"musichub.business","c":"MusicHub","l":"getAudiobooksTitlesSortedByAuthor()"},{"p":"musichub.business","c":"MusicHub","l":"getAudioElement(List<AudioElement>, String)","u":"getAudioElement(java.util.List,java.lang.String)"},{"p":"musichub.business","c":"AudioBook","l":"getCategory()"},{"p":"musichub.business","c":"Category","l":"getCategory()"},{"p":"musichub.business","c":"Album","l":"getDate()"},{"p":"musichub.business","c":"PlayList","l":"getElements()"},{"p":"musichub.business","c":"Genre","l":"getGenre()"},{"p":"musichub.business","c":"Song","l":"getGenre()"},{"p":"musichub.business","c":"AudioBook","l":"getLanguage()"},{"p":"musichub.business","c":"Language","l":"getLanguage()"},{"p":"musichub.business","c":"Album","l":"getSongs()"},{"p":"musichub.business","c":"Album","l":"getSongsRandomly()"},{"p":"musichub.business","c":"Album","l":"getTitle()"},{"p":"musichub.business","c":"AudioElement","l":"getTitle()"},{"p":"musichub.business","c":"PlayList","l":"getTitle()"},{"p":"musichub.business","c":"AudioElement","l":"getUUID()"},{"p":"musichub.business","c":"Genre","l":"HIPHOP"},{"p":"musichub.business","c":"PathValidation","l":"isPathValid(String)","u":"isPathValid(java.lang.String)"},{"p":"musichub.business","c":"Language","l":"ITALIAN"},{"p":"musichub.business","c":"Genre","l":"JAZZ"},{"p":"musichub.business","c":"AudioElement","l":"lengthInSeconds"},{"p":"musichub.main","c":"Main","l":"Main()","u":"%3Cinit%3E()"},{"p":"musichub.main","c":"Main","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"musichub.business","c":"AudioElement","l":"manageAudioElement()"},{"p":"musichub.business","c":"MusicHub","l":"MusicHub()","u":"%3Cinit%3E()"},{"p":"musichub.business","c":"NoAlbumFoundException","l":"NoAlbumFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"NoElementFoundException","l":"NoElementFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"NoPlayListFoundException","l":"NoPlayListFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"Category","l":"NOVEL"},{"p":"musichub.util","c":"XMLHandler","l":"parseXMLFile(String)","u":"parseXMLFile(java.lang.String)"},{"p":"musichub.business","c":"PathValidation","l":"PathValidation()","u":"%3Cinit%3E()"},{"p":"musichub.business","c":"PlayList","l":"PlayList(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"PlayList","l":"PlayList(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"musichub.business","c":"PlayList","l":"PlayList(String, String, ArrayList<UUID>)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.util.ArrayList)"},{"p":"musichub.business","c":"MusicHub","l":"PLAYLISTS_FILE_PATH"},{"p":"musichub.business","c":"MusicHub","l":"playlists()"},{"p":"musichub.business","c":"Genre","l":"POP"},{"p":"musichub.business","c":"Genre","l":"RAP"},{"p":"musichub.business","c":"Genre","l":"ROCK"},{"p":"musichub.business","c":"MusicHub","l":"saveAlbums()"},{"p":"musichub.business","c":"MusicHub","l":"saveElements()"},{"p":"musichub.business","c":"MusicHub","l":"savePlayLists()"},{"p":"musichub.business","c":"AudioBook","l":"setCategory(String)","u":"setCategory(java.lang.String)"},{"p":"musichub.business","c":"Song","l":"setGenre(String)","u":"setGenre(java.lang.String)"},{"p":"musichub.business","c":"AudioBook","l":"setLanguage(String)","u":"setLanguage(java.lang.String)"},{"p":"musichub.business","c":"Song","l":"Song(Element)","u":"%3Cinit%3E(org.w3c.dom.Element)"},{"p":"musichub.business","c":"Song","l":"Song(String, String, int, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"Song","l":"Song(String, String, int, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,java.lang.String,java.lang.String)"},{"p":"musichub.business","c":"Language","l":"SPANISH"},{"p":"musichub.business","c":"Category","l":"SPEECH"},{"p":"musichub.business","c":"Category","l":"THEATER"},{"p":"musichub.business","c":"AudioElement","l":"title"},{"p":"musichub.business","c":"AudioBook","l":"toString()"},{"p":"musichub.business","c":"AudioElement","l":"toString()"},{"p":"musichub.business","c":"Song","l":"toString()"},{"p":"musichub.business","c":"AudioElement","l":"uuid"},{"p":"musichub.business","c":"Category","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"musichub.business","c":"Genre","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"musichub.business","c":"Language","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"musichub.business","c":"Category","l":"values()"},{"p":"musichub.business","c":"Genre","l":"values()"},{"p":"musichub.business","c":"Language","l":"values()"},{"p":"musichub.util","c":"XMLHandler","l":"XMLHandler()","u":"%3Cinit%3E()"},{"p":"musichub.business","c":"Category","l":"YOUTH"}];updateSearchResults(); \ No newline at end of file
diff --git a/target/site/apidocs/musichub/business/Album.html b/target/site/apidocs/musichub/business/Album.html
index 8d24dd6..824d2f6 100644
--- a/target/site/apidocs/musichub/business/Album.html
+++ b/target/site/apidocs/musichub/business/Album.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Album (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/AudioBook.html b/target/site/apidocs/musichub/business/AudioBook.html
index 0d8d9b5..f171946 100644
--- a/target/site/apidocs/musichub/business/AudioBook.html
+++ b/target/site/apidocs/musichub/business/AudioBook.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>AudioBook (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/AudioElement.html b/target/site/apidocs/musichub/business/AudioElement.html
index 493874c..f2ecb62 100644
--- a/target/site/apidocs/musichub/business/AudioElement.html
+++ b/target/site/apidocs/musichub/business/AudioElement.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>AudioElement (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/Category.html b/target/site/apidocs/musichub/business/Category.html
index 7748822..6fa6ed1 100644
--- a/target/site/apidocs/musichub/business/Category.html
+++ b/target/site/apidocs/musichub/business/Category.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Category (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/Genre.html b/target/site/apidocs/musichub/business/Genre.html
index f943c15..404433a 100644
--- a/target/site/apidocs/musichub/business/Genre.html
+++ b/target/site/apidocs/musichub/business/Genre.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Genre (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/Language.html b/target/site/apidocs/musichub/business/Language.html
index 3690e27..7c71eef 100644
--- a/target/site/apidocs/musichub/business/Language.html
+++ b/target/site/apidocs/musichub/business/Language.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Language (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/MusicHub.html b/target/site/apidocs/musichub/business/MusicHub.html
index 9ef7adf..a96d88e 100644
--- a/target/site/apidocs/musichub/business/MusicHub.html
+++ b/target/site/apidocs/musichub/business/MusicHub.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>MusicHub (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/NoAlbumFoundException.html b/target/site/apidocs/musichub/business/NoAlbumFoundException.html
index 0809462..51defb8 100644
--- a/target/site/apidocs/musichub/business/NoAlbumFoundException.html
+++ b/target/site/apidocs/musichub/business/NoAlbumFoundException.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>NoAlbumFoundException (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/NoElementFoundException.html b/target/site/apidocs/musichub/business/NoElementFoundException.html
index 81e9dce..b935b6c 100644
--- a/target/site/apidocs/musichub/business/NoElementFoundException.html
+++ b/target/site/apidocs/musichub/business/NoElementFoundException.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>NoElementFoundException (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/NoPlayListFoundException.html b/target/site/apidocs/musichub/business/NoPlayListFoundException.html
index 6a2c7a3..56d2aaf 100644
--- a/target/site/apidocs/musichub/business/NoPlayListFoundException.html
+++ b/target/site/apidocs/musichub/business/NoPlayListFoundException.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>NoPlayListFoundException (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/PathValidation.html b/target/site/apidocs/musichub/business/PathValidation.html
new file mode 100644
index 0000000..9a7945c
--- /dev/null
+++ b/target/site/apidocs/musichub/business/PathValidation.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML>
+<!-- NewPage -->
+<html lang="fr">
+<head>
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
+<title>PathValidation (spoteezer 0.1.0 API)</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="dc.created" content="2021-06-26">
+<meta name="description" content="declaration: package: musichub.business, class: PathValidation">
+<meta name="generator" content="javadoc/ClassWriterImpl">
+<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../script.js"></script>
+<script type="text/javascript" src="../../script-dir/jquery-3.5.1.min.js"></script>
+<script type="text/javascript" src="../../script-dir/jquery-ui.min.js"></script>
+</head>
+<body class="class-declaration-page">
+<script type="text/javascript">var evenRowColor = "even-row-color";
+var oddRowColor = "odd-row-color";
+var tableTab = "table-tab";
+var activeTableTab = "active-table-tab";
+var pathtoroot = "../../";
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<div class="flex-box">
+<header role="banner" class="flex-header">
+<nav role="navigation">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="top-nav" id="navbar.top">
+<div class="skip-nav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<ul id="navbar.top.firstrow" class="nav-list" title="Navigation">
+<li><a href="../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="nav-bar-cell1-rev">Class</li>
+<li><a href="class-use/PathValidation.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../index-all.html">Index</a></li>
+<li><a href="../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="sub-nav">
+<div>
+<ul class="sub-nav-list">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="sub-nav-list">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<div class="nav-list-search"><label for="search">SEARCH:</label>
+<input type="text" id="search" value="search" disabled="disabled">
+<input type="reset" id="reset" value="reset" disabled="disabled">
+</div>
+</div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<span class="skip-nav" id="skip.navbar.top">
+<!-- -->
+</span></nav>
+</header>
+<div class="flex-content">
+<main role="main">
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">musichub.business</a></div>
+<h1 title="Class PathValidation" class="title">Class PathValidation</h1>
+</div>
+<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
+<div class="inheritance">musichub.business.PathValidation</div>
+</div>
+<section class="description">
+<hr>
+<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">PathValidation</span>
+<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
+<div class="block">Class offering a path validation method.</div>
+<dl class="notes">
+<dt>Version:</dt>
+<dd>1.0</dd>
+<dt>Author:</dt>
+<dd>Aimeric ADJUTOR</dd>
+</dl>
+</section>
+<section class="summary">
+<ul class="summary-list">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<li>
+<section class="constructor-summary" id="constructor.summary">
+<h2>Constructor Summary</h2>
+<div class="caption"><span>Constructors</span></div>
+<div class="summary-table two-column-summary">
+<div class="table-header col-first">Constructor</div>
+<div class="table-header col-last">Description</div>
+<div class="col-constructor-name even-row-color"><code><span class="member-name-link"><a href="#%3Cinit%3E()">PathValidation</a></span>()</code></div>
+<div class="col-last even-row-color">
+<div class="block">Method that just throws an AssertionError if the class is called</div>
+</div>
+</div>
+</section>
+</li>
+<!-- ========== METHOD SUMMARY =========== -->
+<li>
+<section class="method-summary" id="method.summary">
+<h2>Method Summary</h2>
+<div id="method-summary-table">
+<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab1" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" class="table-tab">Static Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
+<div id="method-summary-table.tabpanel" role="tabpanel">
+<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Method</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color method-summary-table-tab1 method-summary-table-tab4 method-summary-table"><code>static boolean</code></div>
+<div class="col-second even-row-color method-summary-table-tab1 method-summary-table-tab4 method-summary-table"><code><span class="member-name-link"><a href="#isPathValid(java.lang.String)">isPathValid</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;inputPath)</code></div>
+<div class="col-last even-row-color method-summary-table-tab1 method-summary-table-tab4 method-summary-table">
+<div class="block">Method that checks the validity of a given path</div>
+</div>
+</div>
+</div>
+</div>
+<div class="inherited-list">
+<h3 id="methods.inherited.from.class.java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
+<code><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
+</section>
+</li>
+</ul>
+</section>
+<section class="details">
+<ul class="details-list">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<li>
+<section class="constructor-details" id="constructor.detail">
+<h2>Constructor Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="&lt;init&gt;()">
+<h3>PathValidation</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">PathValidation</span>()</div>
+<div class="block">Method that just throws an AssertionError if the class is called</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/AssertionError.html" title="class or interface in java.lang" class="external-link">AssertionError</a></code> - you can't instantiate this class</dd>
+</dl>
+</section>
+</li>
+</ul>
+</section>
+</li>
+<!-- ============ METHOD DETAIL ========== -->
+<li>
+<section class="method-details" id="method.detail">
+<h2>Method Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="isPathValid(java.lang.String)">
+<h3>isPathValid</h3>
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">isPathValid</span>&#8203;<span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;inputPath)</span></div>
+<div class="block">Method that checks the validity of a given path</div>
+<dl class="notes">
+<dt>Parameters:</dt>
+<dd><code>inputPath</code> - the path given by the user</dd>
+<dt>Returns:</dt>
+<dd>a boolean</dd>
+</dl>
+</section>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</section>
+<!-- ========= END OF CLASS DATA ========= -->
+</main>
+<footer role="contentinfo">
+<hr>
+<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
+</footer>
+</div>
+</div>
+</body>
+</html>
diff --git a/target/site/apidocs/musichub/business/PlayList.html b/target/site/apidocs/musichub/business/PlayList.html
index c294b58..533a2ad 100644
--- a/target/site/apidocs/musichub/business/PlayList.html
+++ b/target/site/apidocs/musichub/business/PlayList.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>PlayList (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/Song.html b/target/site/apidocs/musichub/business/Song.html
index 57e0fa5..aa13772 100644
--- a/target/site/apidocs/musichub/business/Song.html
+++ b/target/site/apidocs/musichub/business/Song.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Song (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/Album.html b/target/site/apidocs/musichub/business/class-use/Album.html
index eeb9cfe..a799c69 100644
--- a/target/site/apidocs/musichub/business/class-use/Album.html
+++ b/target/site/apidocs/musichub/business/class-use/Album.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.Album (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/AudioBook.html b/target/site/apidocs/musichub/business/class-use/AudioBook.html
index 07abecb..6054d2d 100644
--- a/target/site/apidocs/musichub/business/class-use/AudioBook.html
+++ b/target/site/apidocs/musichub/business/class-use/AudioBook.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.AudioBook (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/AudioElement.html b/target/site/apidocs/musichub/business/class-use/AudioElement.html
index a0c35cf..ab20cf8 100644
--- a/target/site/apidocs/musichub/business/class-use/AudioElement.html
+++ b/target/site/apidocs/musichub/business/class-use/AudioElement.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.AudioElement (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/Category.html b/target/site/apidocs/musichub/business/class-use/Category.html
index f916411..d0b7007 100644
--- a/target/site/apidocs/musichub/business/class-use/Category.html
+++ b/target/site/apidocs/musichub/business/class-use/Category.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Enum Class musichub.business.Category (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/Genre.html b/target/site/apidocs/musichub/business/class-use/Genre.html
index a952ca6..94c178d 100644
--- a/target/site/apidocs/musichub/business/class-use/Genre.html
+++ b/target/site/apidocs/musichub/business/class-use/Genre.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Enum Class musichub.business.Genre (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/Language.html b/target/site/apidocs/musichub/business/class-use/Language.html
index 6205bc4..6df04ff 100644
--- a/target/site/apidocs/musichub/business/class-use/Language.html
+++ b/target/site/apidocs/musichub/business/class-use/Language.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Enum Class musichub.business.Language (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/MusicHub.html b/target/site/apidocs/musichub/business/class-use/MusicHub.html
index 8f239ba..2f00178 100644
--- a/target/site/apidocs/musichub/business/class-use/MusicHub.html
+++ b/target/site/apidocs/musichub/business/class-use/MusicHub.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.MusicHub (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/NoAlbumFoundException.html b/target/site/apidocs/musichub/business/class-use/NoAlbumFoundException.html
index d948beb..c11e6be 100644
--- a/target/site/apidocs/musichub/business/class-use/NoAlbumFoundException.html
+++ b/target/site/apidocs/musichub/business/class-use/NoAlbumFoundException.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.NoAlbumFoundException (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/NoElementFoundException.html b/target/site/apidocs/musichub/business/class-use/NoElementFoundException.html
index ae74b4d..70bbffa 100644
--- a/target/site/apidocs/musichub/business/class-use/NoElementFoundException.html
+++ b/target/site/apidocs/musichub/business/class-use/NoElementFoundException.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.NoElementFoundException (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/NoPlayListFoundException.html b/target/site/apidocs/musichub/business/class-use/NoPlayListFoundException.html
index aab3251..97c5c34 100644
--- a/target/site/apidocs/musichub/business/class-use/NoPlayListFoundException.html
+++ b/target/site/apidocs/musichub/business/class-use/NoPlayListFoundException.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.NoPlayListFoundException (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/PathValidation.html b/target/site/apidocs/musichub/business/class-use/PathValidation.html
new file mode 100644
index 0000000..b8a4f5a
--- /dev/null
+++ b/target/site/apidocs/musichub/business/class-use/PathValidation.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML>
+<!-- NewPage -->
+<html lang="fr">
+<head>
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
+<title>Uses of Class musichub.business.PathValidation (spoteezer 0.1.0 API)</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="dc.created" content="2021-06-26">
+<meta name="description" content="use: package: musichub.business, class: PathValidation">
+<meta name="generator" content="javadoc/ClassUseWriter">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+<script type="text/javascript" src="../../../script-dir/jquery-3.5.1.min.js"></script>
+<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
+</head>
+<body class="class-use-page">
+<script type="text/javascript">var pathtoroot = "../../../";
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<div class="flex-box">
+<header role="banner" class="flex-header">
+<nav role="navigation">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="top-nav" id="navbar.top">
+<div class="skip-nav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<ul id="navbar.top.firstrow" class="nav-list" title="Navigation">
+<li><a href="../../../index.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../PathValidation.html" title="class in musichub.business">Class</a></li>
+<li class="nav-bar-cell1-rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="sub-nav">
+<div class="nav-list-search"><label for="search">SEARCH:</label>
+<input type="text" id="search" value="search" disabled="disabled">
+<input type="reset" id="reset" value="reset" disabled="disabled">
+</div>
+</div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<span class="skip-nav" id="skip.navbar.top">
+<!-- -->
+</span></nav>
+</header>
+<div class="flex-content">
+<main role="main">
+<div class="header">
+<h1 title="Uses of Class musichub.business.PathValidation" class="title">Uses of Class<br>musichub.business.PathValidation</h1>
+</div>
+No usage of musichub.business.PathValidation</main>
+<footer role="contentinfo">
+<hr>
+<p class="legal-copy"><small>Copyright &#169; 2021. All rights reserved.</small></p>
+</footer>
+</div>
+</div>
+</body>
+</html>
diff --git a/target/site/apidocs/musichub/business/class-use/PlayList.html b/target/site/apidocs/musichub/business/class-use/PlayList.html
index 4fdd1e0..7d039a5 100644
--- a/target/site/apidocs/musichub/business/class-use/PlayList.html
+++ b/target/site/apidocs/musichub/business/class-use/PlayList.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.PlayList (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/class-use/Song.html b/target/site/apidocs/musichub/business/class-use/Song.html
index 92d62d4..853c506 100644
--- a/target/site/apidocs/musichub/business/class-use/Song.html
+++ b/target/site/apidocs/musichub/business/class-use/Song.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.business.Song (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/business/package-summary.html b/target/site/apidocs/musichub/business/package-summary.html
index b5af4ec..57c22af 100644
--- a/target/site/apidocs/musichub/business/package-summary.html
+++ b/target/site/apidocs/musichub/business/package-summary.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>musichub.business (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@@ -71,10 +71,14 @@ loadScripts(document, 'script');</script>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><a href="MusicHub.html" title="class in musichub.business">MusicHub</a></div>
<div class="col-last odd-row-color">&nbsp;</div>
-<div class="col-first even-row-color"><a href="PlayList.html" title="class in musichub.business">PlayList</a></div>
-<div class="col-last even-row-color">&nbsp;</div>
-<div class="col-first odd-row-color"><a href="Song.html" title="class in musichub.business">Song</a></div>
+<div class="col-first even-row-color"><a href="PathValidation.html" title="class in musichub.business">PathValidation</a></div>
+<div class="col-last even-row-color">
+<div class="block">Class offering a path validation method.</div>
+</div>
+<div class="col-first odd-row-color"><a href="PlayList.html" title="class in musichub.business">PlayList</a></div>
<div class="col-last odd-row-color">&nbsp;</div>
+<div class="col-first even-row-color"><a href="Song.html" title="class in musichub.business">Song</a></div>
+<div class="col-last even-row-color">&nbsp;</div>
</div>
</li>
<li>
diff --git a/target/site/apidocs/musichub/business/package-tree.html b/target/site/apidocs/musichub/business/package-tree.html
index f640a6b..31cbe13 100644
--- a/target/site/apidocs/musichub/business/package-tree.html
+++ b/target/site/apidocs/musichub/business/package-tree.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>musichub.business Class Hierarchy (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@@ -71,6 +71,7 @@ loadScripts(document, 'script');</script>
</ul>
</li>
<li class="circle">musichub.business.<a href="MusicHub.html" title="class in musichub.business"><span class="type-name-link">MusicHub</span></a></li>
+<li class="circle">musichub.business.<a href="PathValidation.html" title="class in musichub.business"><span class="type-name-link">PathValidation</span></a></li>
<li class="circle">musichub.business.<a href="PlayList.html" title="class in musichub.business"><span class="type-name-link">PlayList</span></a></li>
<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link"><span class="type-name-link">Throwable</span></a> (implements java.io.<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a>)
<ul>
diff --git a/target/site/apidocs/musichub/business/package-use.html b/target/site/apidocs/musichub/business/package-use.html
index 7ed1edb..c75e960 100644
--- a/target/site/apidocs/musichub/business/package-use.html
+++ b/target/site/apidocs/musichub/business/package-use.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Package musichub.business (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/main/Main.html b/target/site/apidocs/musichub/main/Main.html
index f8bfd28..d060888 100644
--- a/target/site/apidocs/musichub/main/Main.html
+++ b/target/site/apidocs/musichub/main/Main.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Main (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/main/class-use/Main.html b/target/site/apidocs/musichub/main/class-use/Main.html
index 6d45c1a..2ea6da4 100644
--- a/target/site/apidocs/musichub/main/class-use/Main.html
+++ b/target/site/apidocs/musichub/main/class-use/Main.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.main.Main (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/main/package-summary.html b/target/site/apidocs/musichub/main/package-summary.html
index 350f1ec..87c57b3 100644
--- a/target/site/apidocs/musichub/main/package-summary.html
+++ b/target/site/apidocs/musichub/main/package-summary.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>musichub.main (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/main/package-tree.html b/target/site/apidocs/musichub/main/package-tree.html
index 8322e63..d6354f0 100644
--- a/target/site/apidocs/musichub/main/package-tree.html
+++ b/target/site/apidocs/musichub/main/package-tree.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>musichub.main Class Hierarchy (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/main/package-use.html b/target/site/apidocs/musichub/main/package-use.html
index 698c432..68e7ada 100644
--- a/target/site/apidocs/musichub/main/package-use.html
+++ b/target/site/apidocs/musichub/main/package-use.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Package musichub.main (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/util/XMLHandler.html b/target/site/apidocs/musichub/util/XMLHandler.html
index 942ecac..52734c9 100644
--- a/target/site/apidocs/musichub/util/XMLHandler.html
+++ b/target/site/apidocs/musichub/util/XMLHandler.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>XMLHandler (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/util/class-use/XMLHandler.html b/target/site/apidocs/musichub/util/class-use/XMLHandler.html
index f3cd47c..04b02a0 100644
--- a/target/site/apidocs/musichub/util/class-use/XMLHandler.html
+++ b/target/site/apidocs/musichub/util/class-use/XMLHandler.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Class musichub.util.XMLHandler (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/util/package-summary.html b/target/site/apidocs/musichub/util/package-summary.html
index 12cbd12..72ff644 100644
--- a/target/site/apidocs/musichub/util/package-summary.html
+++ b/target/site/apidocs/musichub/util/package-summary.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>musichub.util (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/util/package-tree.html b/target/site/apidocs/musichub/util/package-tree.html
index b987ff3..7817d93 100644
--- a/target/site/apidocs/musichub/util/package-tree.html
+++ b/target/site/apidocs/musichub/util/package-tree.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>musichub.util Class Hierarchy (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/musichub/util/package-use.html b/target/site/apidocs/musichub/util/package-use.html
index cf30494..afe8c6d 100644
--- a/target/site/apidocs/musichub/util/package-use.html
+++ b/target/site/apidocs/musichub/util/package-use.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Uses of Package musichub.util (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/overview-summary.html b/target/site/apidocs/overview-summary.html
index 0415e8e..1961838 100644
--- a/target/site/apidocs/overview-summary.html
+++ b/target/site/apidocs/overview-summary.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>spoteezer 0.1.0 API</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/overview-tree.html b/target/site/apidocs/overview-tree.html
index b53ddc6..69d606a 100644
--- a/target/site/apidocs/overview-tree.html
+++ b/target/site/apidocs/overview-tree.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Class Hierarchy (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@@ -74,6 +74,7 @@ loadScripts(document, 'script');</script>
</li>
<li class="circle">musichub.main.<a href="musichub/main/Main.html" title="class in musichub.main"><span class="type-name-link">Main</span></a></li>
<li class="circle">musichub.business.<a href="musichub/business/MusicHub.html" title="class in musichub.business"><span class="type-name-link">MusicHub</span></a></li>
+<li class="circle">musichub.business.<a href="musichub/business/PathValidation.html" title="class in musichub.business"><span class="type-name-link">PathValidation</span></a></li>
<li class="circle">musichub.business.<a href="musichub/business/PlayList.html" title="class in musichub.business"><span class="type-name-link">PlayList</span></a></li>
<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link"><span class="type-name-link">Throwable</span></a> (implements java.io.<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a>)
<ul>
diff --git a/target/site/apidocs/serialized-form.html b/target/site/apidocs/serialized-form.html
index de7162a..011c84f 100644
--- a/target/site/apidocs/serialized-form.html
+++ b/target/site/apidocs/serialized-form.html
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="fr">
<head>
-<!-- Generated by javadoc (16) on Sat Jun 26 13:25:31 CEST 2021 -->
+<!-- Generated by javadoc (16) on Sat Jun 26 14:29:15 CEST 2021 -->
<title>Serialized Form (spoteezer 0.1.0 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
diff --git a/target/site/apidocs/type-search-index.js b/target/site/apidocs/type-search-index.js
index 2401962..be00fa7 100644
--- a/target/site/apidocs/type-search-index.js
+++ b/target/site/apidocs/type-search-index.js
@@ -1 +1 @@
-typeSearchIndex = [{"p":"musichub.business","l":"Album"},{"l":"All Classes","u":"allclasses-index.html"},{"p":"musichub.business","l":"AudioBook"},{"p":"musichub.business","l":"AudioElement"},{"p":"musichub.business","l":"Category"},{"p":"musichub.business","l":"Genre"},{"p":"musichub.business","l":"Language"},{"p":"musichub.main","l":"Main"},{"p":"musichub.business","l":"MusicHub"},{"p":"musichub.business","l":"NoAlbumFoundException"},{"p":"musichub.business","l":"NoElementFoundException"},{"p":"musichub.business","l":"NoPlayListFoundException"},{"p":"musichub.business","l":"PlayList"},{"p":"musichub.business","l":"Song"},{"p":"musichub.util","l":"XMLHandler"}];updateSearchResults(); \ No newline at end of file
+typeSearchIndex = [{"p":"musichub.business","l":"Album"},{"l":"All Classes","u":"allclasses-index.html"},{"p":"musichub.business","l":"AudioBook"},{"p":"musichub.business","l":"AudioElement"},{"p":"musichub.business","l":"Category"},{"p":"musichub.business","l":"Genre"},{"p":"musichub.business","l":"Language"},{"p":"musichub.main","l":"Main"},{"p":"musichub.business","l":"MusicHub"},{"p":"musichub.business","l":"NoAlbumFoundException"},{"p":"musichub.business","l":"NoElementFoundException"},{"p":"musichub.business","l":"NoPlayListFoundException"},{"p":"musichub.business","l":"PathValidation"},{"p":"musichub.business","l":"PlayList"},{"p":"musichub.business","l":"Song"},{"p":"musichub.util","l":"XMLHandler"}];updateSearchResults(); \ No newline at end of file
diff --git a/target/site/jacoco/index.html b/target/site/jacoco/index.html
new file mode 100644
index 0000000..f0faf92
--- /dev/null
+++ b/target/site/jacoco/index.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>spoteezer</title><script type="text/javascript" src="jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><span class="el_report">spoteezer</span></div><h1>spoteezer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2 723 of 2 740</td><td class="ctr2">0 %</td><td class="bar">209 of 209</td><td class="ctr2">0 %</td><td class="ctr1">205</td><td class="ctr2">207</td><td class="ctr1">723</td><td class="ctr2">727</td><td class="ctr1">88</td><td class="ctr2">90</td><td class="ctr1">17</td><td class="ctr2">18</td></tr></tfoot><tbody><tr><td id="a0"><a href="musichub.business/index.html" class="el_package">musichub.business</a></td><td class="bar" id="b0"><img src="jacoco-resources/redbar.gif" width="119" height="10" title="2 063" alt="2 063"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="169" alt="169"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">172</td><td class="ctr2" id="g0">174</td><td class="ctr1" id="h0">499</td><td class="ctr2" id="i0">503</td><td class="ctr1" id="j0">81</td><td class="ctr2" id="k0">83</td><td class="ctr1" id="l0">15</td><td class="ctr2" id="m0">16</td></tr><tr><td id="a1"><a href="musichub.main/index.html" class="el_package">musichub.main</a></td><td class="bar" id="b1"><img src="jacoco-resources/redbar.gif" width="33" height="10" title="588" alt="588"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"><img src="jacoco-resources/redbar.gif" width="28" height="10" title="40" alt="40"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f1">29</td><td class="ctr2" id="g1">29</td><td class="ctr1" id="h1">199</td><td class="ctr2" id="i1">199</td><td class="ctr1" id="j2">3</td><td class="ctr2" id="k2">3</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="musichub.util/index.html" class="el_package">musichub.util</a></td><td class="bar" id="b2"><img src="jacoco-resources/redbar.gif" width="4" height="10" title="72" alt="72"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">25</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/jacoco-resources/branchfc.gif b/target/site/jacoco/jacoco-resources/branchfc.gif
new file mode 100644
index 0000000..989b46d
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/branchfc.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/branchnc.gif b/target/site/jacoco/jacoco-resources/branchnc.gif
new file mode 100644
index 0000000..1933e07
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/branchnc.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/branchpc.gif b/target/site/jacoco/jacoco-resources/branchpc.gif
new file mode 100644
index 0000000..cbf711b
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/branchpc.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/bundle.gif b/target/site/jacoco/jacoco-resources/bundle.gif
new file mode 100644
index 0000000..fca9c53
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/bundle.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/class.gif b/target/site/jacoco/jacoco-resources/class.gif
new file mode 100644
index 0000000..eb348fb
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/class.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/down.gif b/target/site/jacoco/jacoco-resources/down.gif
new file mode 100644
index 0000000..440a14d
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/down.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/greenbar.gif b/target/site/jacoco/jacoco-resources/greenbar.gif
new file mode 100644
index 0000000..0ba6567
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/greenbar.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/group.gif b/target/site/jacoco/jacoco-resources/group.gif
new file mode 100644
index 0000000..a4ea580
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/group.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/method.gif b/target/site/jacoco/jacoco-resources/method.gif
new file mode 100644
index 0000000..7d24707
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/method.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/package.gif b/target/site/jacoco/jacoco-resources/package.gif
new file mode 100644
index 0000000..131c28d
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/package.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/prettify.css b/target/site/jacoco/jacoco-resources/prettify.css
new file mode 100644
index 0000000..be5166e
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/prettify.css
@@ -0,0 +1,13 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+.str { color: #2A00FF; }
+.kwd { color: #7F0055; font-weight:bold; }
+.com { color: #3F5FBF; }
+.typ { color: #606; }
+.lit { color: #066; }
+.pun { color: #660; }
+.pln { color: #000; }
+.tag { color: #008; }
+.atn { color: #606; }
+.atv { color: #080; }
+.dec { color: #606; }
diff --git a/target/site/jacoco/jacoco-resources/prettify.js b/target/site/jacoco/jacoco-resources/prettify.js
new file mode 100644
index 0000000..b2766fe
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/prettify.js
@@ -0,0 +1,1510 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ * <p>
+ *
+ * For a fairly comprehensive set of languages see the
+ * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
+ * file that came with this source. At a minimum, the lexer should work on a
+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+ * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk
+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
+ * <p>
+ * Usage: <ol>
+ * <li> include this source file in an html page via
+ * {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
+ * <li> define style rules. See the example page for examples.
+ * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
+ * {@code class=prettyprint.}
+ * You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
+ * printer needs to do more substantial DOM manipulations to support that, so
+ * some css styles may not be preserved.
+ * </ol>
+ * That's it. I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code <pre>} or {@code <code>} element to specify the
+ * language, as in {@code <pre class="prettyprint lang-java">}. Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ * <p>
+ * Change log:<br>
+ * cbeust, 2006/08/22
+ * <blockquote>
+ * Java annotations (start with "@") are now captured as literals ("lit")
+ * </blockquote>
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window */
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+/** the number of characters between tab columns */
+window['PR_TAB_WIDTH'] = 8;
+
+/** Walks the DOM returning a properly escaped version of innerHTML.
+ * @param {Node} node
+ * @param {Array.<string>} out output buffer that receives chunks of HTML.
+ */
+window['PR_normalizedHtml']
+
+/** Contains functions for creating and registering new language handlers.
+ * @type {Object}
+ */
+ = window['PR']
+
+/** Pretty print a chunk of code.
+ *
+ * @param {string} sourceCodeHtml code as html
+ * @return {string} code as html, but prettier
+ */
+ = window['prettyPrintOne']
+/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
+ * {@code class=prettyprint} and prettify them.
+ * @param {Function?} opt_whenDone if specified, called when the last entry
+ * has been finished.
+ */
+ = window['prettyPrint'] = void 0;
+
+/** browser detection. @extern @returns false if not IE, otherwise the major version. */
+window['_pr_isIE6'] = function () {
+ var ieVersion = navigator && navigator.userAgent &&
+ navigator.userAgent.match(/\bMSIE ([678])\./);
+ ieVersion = ieVersion ? +ieVersion[1] : false;
+ window['_pr_isIE6'] = function () { return ieVersion; };
+ return ieVersion;
+};
+
+
+(function () {
+ // Keyword lists for various languages.
+ var FLOW_CONTROL_KEYWORDS =
+ "break continue do else for if return while ";
+ var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
+ "double enum extern float goto int long register short signed sizeof " +
+ "static struct switch typedef union unsigned void volatile ";
+ var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
+ "new operator private protected public this throw true try typeof ";
+ var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
+ "concept concept_map const_cast constexpr decltype " +
+ "dynamic_cast explicit export friend inline late_check " +
+ "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
+ "template typeid typename using virtual wchar_t where ";
+ var JAVA_KEYWORDS = COMMON_KEYWORDS +
+ "abstract boolean byte extends final finally implements import " +
+ "instanceof null native package strictfp super synchronized throws " +
+ "transient ";
+ var CSHARP_KEYWORDS = JAVA_KEYWORDS +
+ "as base by checked decimal delegate descending event " +
+ "fixed foreach from group implicit in interface internal into is lock " +
+ "object out override orderby params partial readonly ref sbyte sealed " +
+ "stackalloc string select uint ulong unchecked unsafe ushort var ";
+ var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
+ "debugger eval export function get null set undefined var with " +
+ "Infinity NaN ";
+ var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
+ "goto if import last local my next no our print package redo require " +
+ "sub undef unless until use wantarray while BEGIN END ";
+ var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
+ "elif except exec finally from global import in is lambda " +
+ "nonlocal not or pass print raise try with yield " +
+ "False True None ";
+ var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
+ " defined elsif end ensure false in module next nil not or redo rescue " +
+ "retry self super then true undef unless until when yield BEGIN END ";
+ var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
+ "function in local set then until ";
+ var ALL_KEYWORDS = (
+ CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
+ PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
+
+ // token style names. correspond to css classes
+ /** token style for a string literal */
+ var PR_STRING = 'str';
+ /** token style for a keyword */
+ var PR_KEYWORD = 'kwd';
+ /** token style for a comment */
+ var PR_COMMENT = 'com';
+ /** token style for a type */
+ var PR_TYPE = 'typ';
+ /** token style for a literal value. e.g. 1, null, true. */
+ var PR_LITERAL = 'lit';
+ /** token style for a punctuation string. */
+ var PR_PUNCTUATION = 'pun';
+ /** token style for a punctuation string. */
+ var PR_PLAIN = 'pln';
+
+ /** token style for an sgml tag. */
+ var PR_TAG = 'tag';
+ /** token style for a markup declaration such as a DOCTYPE. */
+ var PR_DECLARATION = 'dec';
+ /** token style for embedded source. */
+ var PR_SOURCE = 'src';
+ /** token style for an sgml attribute name. */
+ var PR_ATTRIB_NAME = 'atn';
+ /** token style for an sgml attribute value. */
+ var PR_ATTRIB_VALUE = 'atv';
+
+ /**
+ * A class that indicates a section of markup that is not code, e.g. to allow
+ * embedding of line numbers within code listings.
+ */
+ var PR_NOCODE = 'nocode';
+
+ /** A set of tokens that can precede a regular expression literal in
+ * javascript.
+ * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
+ * list, but I've removed ones that might be problematic when seen in
+ * languages that don't support regular expression literals.
+ *
+ * <p>Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ * <p>The link a above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ */
+ var REGEXP_PRECEDER_PATTERN = function () {
+ var preceders = [
+ "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
+ "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
+ "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
+ "<", "<<", "<<=", "<=", "=", "==", "===", ">",
+ ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
+ "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
+ "||=", "~" /* handles =~ and !~ */,
+ "break", "case", "continue", "delete",
+ "do", "else", "finally", "instanceof",
+ "return", "throw", "try", "typeof"
+ ];
+ var pattern = '(?:^^|[+-]';
+ for (var i = 0; i < preceders.length; ++i) {
+ pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
+ }
+ pattern += ')\\s*'; // matches at end, and matches empty string
+ return pattern;
+ // CAVEAT: this does not properly handle the case where a regular
+ // expression immediately follows another since a regular expression may
+ // have flags for case-sensitivity and the like. Having regexp tokens
+ // adjacent is not valid in any language I'm aware of, so I'm punting.
+ // TODO: maybe style special characters inside a regexp as punctuation.
+ }();
+
+ // Define regexps here so that the interpreter doesn't have to create an
+ // object each time the function containing them is called.
+ // The language spec requires a new object created even if you don't access
+ // the $1 members.
+ var pr_amp = /&/g;
+ var pr_lt = /</g;
+ var pr_gt = />/g;
+ var pr_quot = /\"/g;
+ /** like textToHtml but escapes double quotes to be attribute safe. */
+ function attribToHtml(str) {
+ return str.replace(pr_amp, '&amp;')
+ .replace(pr_lt, '&lt;')
+ .replace(pr_gt, '&gt;')
+ .replace(pr_quot, '&quot;');
+ }
+
+ /** escapest html special characters to html. */
+ function textToHtml(str) {
+ return str.replace(pr_amp, '&amp;')
+ .replace(pr_lt, '&lt;')
+ .replace(pr_gt, '&gt;');
+ }
+
+
+ var pr_ltEnt = /&lt;/g;
+ var pr_gtEnt = /&gt;/g;
+ var pr_aposEnt = /&apos;/g;
+ var pr_quotEnt = /&quot;/g;
+ var pr_ampEnt = /&amp;/g;
+ var pr_nbspEnt = /&nbsp;/g;
+ /** unescapes html to plain text. */
+ function htmlToText(html) {
+ var pos = html.indexOf('&');
+ if (pos < 0) { return html; }
+ // Handle numeric entities specially. We can't use functional substitution
+ // since that doesn't work in older versions of Safari.
+ // These should be rare since most browsers convert them to normal chars.
+ for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
+ var end = html.indexOf(';', pos);
+ if (end >= 0) {
+ var num = html.substring(pos + 3, end);
+ var radix = 10;
+ if (num && num.charAt(0) === 'x') {
+ num = num.substring(1);
+ radix = 16;
+ }
+ var codePoint = parseInt(num, radix);
+ if (!isNaN(codePoint)) {
+ html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
+ html.substring(end + 1));
+ }
+ }
+ }
+
+ return html.replace(pr_ltEnt, '<')
+ .replace(pr_gtEnt, '>')
+ .replace(pr_aposEnt, "'")
+ .replace(pr_quotEnt, '"')
+ .replace(pr_nbspEnt, ' ')
+ .replace(pr_ampEnt, '&');
+ }
+
+ /** is the given node's innerHTML normally unescaped? */
+ function isRawContent(node) {
+ return 'XMP' === node.tagName;
+ }
+
+ var newlineRe = /[\r\n]/g;
+ /**
+ * Are newlines and adjacent spaces significant in the given node's innerHTML?
+ */
+ function isPreformatted(node, content) {
+ // PRE means preformatted, and is a very common case, so don't create
+ // unnecessary computed style objects.
+ if ('PRE' === node.tagName) { return true; }
+ if (!newlineRe.test(content)) { return true; } // Don't care
+ var whitespace = '';
+ // For disconnected nodes, IE has no currentStyle.
+ if (node.currentStyle) {
+ whitespace = node.currentStyle.whiteSpace;
+ } else if (window.getComputedStyle) {
+ // Firefox makes a best guess if node is disconnected whereas Safari
+ // returns the empty string.
+ whitespace = window.getComputedStyle(node, null).whiteSpace;
+ }
+ return !whitespace || whitespace === 'pre';
+ }
+
+ function normalizedHtml(node, out, opt_sortAttrs) {
+ switch (node.nodeType) {
+ case 1: // an element
+ var name = node.tagName.toLowerCase();
+
+ out.push('<', name);
+ var attrs = node.attributes;
+ var n = attrs.length;
+ if (n) {
+ if (opt_sortAttrs) {
+ var sortedAttrs = [];
+ for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
+ sortedAttrs.sort(function (a, b) {
+ return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
+ });
+ attrs = sortedAttrs;
+ }
+ for (var i = 0; i < n; ++i) {
+ var attr = attrs[i];
+ if (!attr.specified) { continue; }
+ out.push(' ', attr.name.toLowerCase(),
+ '="', attribToHtml(attr.value), '"');
+ }
+ }
+ out.push('>');
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ normalizedHtml(child, out, opt_sortAttrs);
+ }
+ if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
+ out.push('<\/', name, '>');
+ }
+ break;
+ case 3: case 4: // text
+ out.push(textToHtml(node.nodeValue));
+ break;
+ }
+ }
+
+ /**
+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+ * matches the union o the sets o strings matched d by the input RegExp.
+ * Since it matches globally, if the input strings have a start-of-input
+ * anchor (/^.../), it is ignored for the purposes of unioning.
+ * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
+ * @return {RegExp} a global regex.
+ */
+ function combinePrefixPatterns(regexs) {
+ var capturedGroupIndex = 0;
+
+ var needToFoldCase = false;
+ var ignoreCase = false;
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.ignoreCase) {
+ ignoreCase = true;
+ } else if (/[a-z]/i.test(regex.source.replace(
+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+ needToFoldCase = true;
+ ignoreCase = false;
+ break;
+ }
+ }
+
+ function decodeEscape(charsetPart) {
+ if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
+ switch (charsetPart.charAt(1)) {
+ case 'b': return 8;
+ case 't': return 9;
+ case 'n': return 0xa;
+ case 'v': return 0xb;
+ case 'f': return 0xc;
+ case 'r': return 0xd;
+ case 'u': case 'x':
+ return parseInt(charsetPart.substring(2), 16)
+ || charsetPart.charCodeAt(1);
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7':
+ return parseInt(charsetPart.substring(1), 8);
+ default: return charsetPart.charCodeAt(1);
+ }
+ }
+
+ function encodeEscape(charCode) {
+ if (charCode < 0x20) {
+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+ }
+ var ch = String.fromCharCode(charCode);
+ if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
+ ch = '\\' + ch;
+ }
+ return ch;
+ }
+
+ function caseFoldCharset(charSet) {
+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
+ new RegExp(
+ '\\\\u[0-9A-Fa-f]{4}'
+ + '|\\\\x[0-9A-Fa-f]{2}'
+ + '|\\\\[0-3][0-7]{0,2}'
+ + '|\\\\[0-7]{1,2}'
+ + '|\\\\[\\s\\S]'
+ + '|-'
+ + '|[^-\\\\]',
+ 'g'));
+ var groups = [];
+ var ranges = [];
+ var inverse = charsetParts[0] === '^';
+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+ var p = charsetParts[i];
+ switch (p) {
+ case '\\B': case '\\b':
+ case '\\D': case '\\d':
+ case '\\S': case '\\s':
+ case '\\W': case '\\w':
+ groups.push(p);
+ continue;
+ }
+ var start = decodeEscape(p);
+ var end;
+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
+ end = decodeEscape(charsetParts[i + 2]);
+ i += 2;
+ } else {
+ end = start;
+ }
+ ranges.push([start, end]);
+ // If the range might intersect letters, then expand it.
+ if (!(end < 65 || start > 122)) {
+ if (!(end < 65 || start > 90)) {
+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+ }
+ if (!(end < 97 || start > 122)) {
+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+ }
+ }
+ }
+
+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+ // -> [[1, 12], [14, 14], [16, 17]]
+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
+ var consolidatedRanges = [];
+ var lastRange = [NaN, NaN];
+ for (var i = 0; i < ranges.length; ++i) {
+ var range = ranges[i];
+ if (range[0] <= lastRange[1] + 1) {
+ lastRange[1] = Math.max(lastRange[1], range[1]);
+ } else {
+ consolidatedRanges.push(lastRange = range);
+ }
+ }
+
+ var out = ['['];
+ if (inverse) { out.push('^'); }
+ out.push.apply(out, groups);
+ for (var i = 0; i < consolidatedRanges.length; ++i) {
+ var range = consolidatedRanges[i];
+ out.push(encodeEscape(range[0]));
+ if (range[1] > range[0]) {
+ if (range[1] + 1 > range[0]) { out.push('-'); }
+ out.push(encodeEscape(range[1]));
+ }
+ }
+ out.push(']');
+ return out.join('');
+ }
+
+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+ // Split into character sets, escape sequences, punctuation strings
+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
+ // include any of the above.
+ var parts = regex.source.match(
+ new RegExp(
+ '(?:'
+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
+ + '|\\\\[0-9]+' // a back-reference or octal escape
+ + '|\\\\[^ux0-9]' // other escape sequence
+ + '|\\(\\?[:!=]' // start of a non-capturing group
+ + '|[\\(\\)\\^]' // start/emd of a group, or line start
+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
+ + ')',
+ 'g'));
+ var n = parts.length;
+
+ // Maps captured group numbers to the number they will occupy in
+ // the output or to -1 if that has not been determined, or to
+ // undefined if they need not be capturing in the output.
+ var capturedGroups = [];
+
+ // Walk over and identify back references to build the capturedGroups
+ // mapping.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ // groups are 1-indexed, so max group index is count of '('
+ ++groupIndex;
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ capturedGroups[decimalValue] = -1;
+ }
+ }
+ }
+
+ // Renumber groups and reduce capturing groups to non-capturing groups
+ // where possible.
+ for (var i = 1; i < capturedGroups.length; ++i) {
+ if (-1 === capturedGroups[i]) {
+ capturedGroups[i] = ++capturedGroupIndex;
+ }
+ }
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ ++groupIndex;
+ if (capturedGroups[groupIndex] === undefined) {
+ parts[i] = '(?:';
+ }
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ parts[i] = '\\' + capturedGroups[groupIndex];
+ }
+ }
+ }
+
+ // Remove any prefix anchors so that the output will match anywhere.
+ // ^^ really does mean an anchored match though.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+ }
+
+ // Expand letters to groupts to handle mixing of case-sensitive and
+ // case-insensitive patterns if necessary.
+ if (regex.ignoreCase && needToFoldCase) {
+ for (var i = 0; i < n; ++i) {
+ var p = parts[i];
+ var ch0 = p.charAt(0);
+ if (p.length >= 2 && ch0 === '[') {
+ parts[i] = caseFoldCharset(p);
+ } else if (ch0 !== '\\') {
+ // TODO: handle letters in numeric escapes.
+ parts[i] = p.replace(
+ /[a-zA-Z]/g,
+ function (ch) {
+ var cc = ch.charCodeAt(0);
+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+ });
+ }
+ }
+ }
+
+ return parts.join('');
+ }
+
+ var rewritten = [];
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
+ rewritten.push(
+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+ }
+
+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+ }
+
+ var PR_innerHtmlWorks = null;
+ function getInnerHtml(node) {
+ // inner html is hopelessly broken in Safari 2.0.4 when the content is
+ // an html description of well formed XML and the containing tag is a PRE
+ // tag, so we detect that case and emulate innerHTML.
+ if (null === PR_innerHtmlWorks) {
+ var testNode = document.createElement('PRE');
+ testNode.appendChild(
+ document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
+ PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
+ }
+
+ if (PR_innerHtmlWorks) {
+ var content = node.innerHTML;
+ // XMP tags contain unescaped entities so require special handling.
+ if (isRawContent(node)) {
+ content = textToHtml(content);
+ } else if (!isPreformatted(node, content)) {
+ content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
+ .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
+ }
+ return content;
+ }
+
+ var out = [];
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ normalizedHtml(child, out);
+ }
+ return out.join('');
+ }
+
+ /** returns a function that expand tabs to spaces. This function can be fed
+ * successive chunks of text, and will maintain its own internal state to
+ * keep track of how tabs are expanded.
+ * @return {function (string) : string} a function that takes
+ * plain text and return the text with tabs expanded.
+ * @private
+ */
+ function makeTabExpander(tabWidth) {
+ var SPACES = ' ';
+ var charInLine = 0;
+
+ return function (plainText) {
+ // walk over each character looking for tabs and newlines.
+ // On tabs, expand them. On newlines, reset charInLine.
+ // Otherwise increment charInLine
+ var out = null;
+ var pos = 0;
+ for (var i = 0, n = plainText.length; i < n; ++i) {
+ var ch = plainText.charAt(i);
+
+ switch (ch) {
+ case '\t':
+ if (!out) { out = []; }
+ out.push(plainText.substring(pos, i));
+ // calculate how much space we need in front of this part
+ // nSpaces is the amount of padding -- the number of spaces needed
+ // to move us to the next column, where columns occur at factors of
+ // tabWidth.
+ var nSpaces = tabWidth - (charInLine % tabWidth);
+ charInLine += nSpaces;
+ for (; nSpaces >= 0; nSpaces -= SPACES.length) {
+ out.push(SPACES.substring(0, nSpaces));
+ }
+ pos = i + 1;
+ break;
+ case '\n':
+ charInLine = 0;
+ break;
+ default:
+ ++charInLine;
+ }
+ }
+ if (!out) { return plainText; }
+ out.push(plainText.substring(pos));
+ return out.join('');
+ };
+ }
+
+ var pr_chunkPattern = new RegExp(
+ '[^<]+' // A run of characters other than '<'
+ + '|<\!--[\\s\\S]*?--\>' // an HTML comment
+ + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>' // a CDATA section
+ // a probable tag that should not be highlighted
+ + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
+ + '|<', // A '<' that does not begin a larger chunk
+ 'g');
+ var pr_commentPrefix = /^<\!--/;
+ var pr_cdataPrefix = /^<!\[CDATA\[/;
+ var pr_brPrefix = /^<br\b/i;
+ var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
+
+ /** split markup into chunks of html tags (style null) and
+ * plain text (style {@link #PR_PLAIN}), converting tags which are
+ * significant for tokenization (<br>) into their textual equivalent.
+ *
+ * @param {string} s html where whitespace is considered significant.
+ * @return {Object} source code and extracted tags.
+ * @private
+ */
+ function extractTags(s) {
+ // since the pattern has the 'g' modifier and defines no capturing groups,
+ // this will return a list of all chunks which we then classify and wrap as
+ // PR_Tokens
+ var matches = s.match(pr_chunkPattern);
+ var sourceBuf = [];
+ var sourceBufLen = 0;
+ var extractedTags = [];
+ if (matches) {
+ for (var i = 0, n = matches.length; i < n; ++i) {
+ var match = matches[i];
+ if (match.length > 1 && match.charAt(0) === '<') {
+ if (pr_commentPrefix.test(match)) { continue; }
+ if (pr_cdataPrefix.test(match)) {
+ // strip CDATA prefix and suffix. Don't unescape since it's CDATA
+ sourceBuf.push(match.substring(9, match.length - 3));
+ sourceBufLen += match.length - 12;
+ } else if (pr_brPrefix.test(match)) {
+ // <br> tags are lexically significant so convert them to text.
+ // This is undone later.
+ sourceBuf.push('\n');
+ ++sourceBufLen;
+ } else {
+ if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
+ // A <span class="nocode"> will start a section that should be
+ // ignored. Continue walking the list until we see a matching end
+ // tag.
+ var name = match.match(pr_tagNameRe)[2];
+ var depth = 1;
+ var j;
+ end_tag_loop:
+ for (j = i + 1; j < n; ++j) {
+ var name2 = matches[j].match(pr_tagNameRe);
+ if (name2 && name2[2] === name) {
+ if (name2[1] === '/') {
+ if (--depth === 0) { break end_tag_loop; }
+ } else {
+ ++depth;
+ }
+ }
+ }
+ if (j < n) {
+ extractedTags.push(
+ sourceBufLen, matches.slice(i, j + 1).join(''));
+ i = j;
+ } else { // Ignore unclosed sections.
+ extractedTags.push(sourceBufLen, match);
+ }
+ } else {
+ extractedTags.push(sourceBufLen, match);
+ }
+ }
+ } else {
+ var literalText = htmlToText(match);
+ sourceBuf.push(literalText);
+ sourceBufLen += literalText.length;
+ }
+ }
+ }
+ return { source: sourceBuf.join(''), tags: extractedTags };
+ }
+
+ /** True if the given tag contains a class attribute with the nocode class. */
+ function isNoCodeTag(tag) {
+ return !!tag
+ // First canonicalize the representation of attributes
+ .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
+ ' $1="$2$3$4"')
+ // Then look for the attribute we want.
+ .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
+ }
+
+ /**
+ * Apply the given language handler to sourceCode and add the resulting
+ * decorations to out.
+ * @param {number} basePos the index of sourceCode within the chunk of source
+ * whose decorations are already present on out.
+ */
+ function appendDecorations(basePos, sourceCode, langHandler, out) {
+ if (!sourceCode) { return; }
+ var job = {
+ source: sourceCode,
+ basePos: basePos
+ };
+ langHandler(job);
+ out.push.apply(out, job.decorations);
+ }
+
+ /** Given triples of [style, pattern, context] returns a lexing function,
+ * The lexing function interprets the patterns to find token boundaries and
+ * returns a decoration list of the form
+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+ * where index_n is an index into the sourceCode, and style_n is a style
+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
+ * all characters in sourceCode[index_n-1:index_n].
+ *
+ * The stylePatterns is a list whose elements have the form
+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+ *
+ * Style is a style constant like PR_PLAIN, or can be a string of the
+ * form 'lang-FOO', where FOO is a language extension describing the
+ * language of the portion of the token in $1 after pattern executes.
+ * E.g., if style is 'lang-lisp', and group 1 contains the text
+ * '(hello (world))', then that portion of the token will be passed to the
+ * registered lisp handler for formatting.
+ * The text before and after group 1 will be restyled using this decorator
+ * so decorators should take care that this doesn't result in infinite
+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
+ * '<script>foo()<\/script>', which would cause the current decorator to
+ * be called with '<script>' which would not match the same rule since
+ * group 1 must not be empty, so it would be instead styled as PR_TAG by
+ * the generic tag rule. The handler registered for the 'js' extension would
+ * then be called with 'foo()', and finally, the current decorator would
+ * be called with '<\/script>' which would not match the original rule and
+ * so the generic tag rule would identify it as a tag.
+ *
+ * Pattern must only match prefixes, and if it matches a prefix, then that
+ * match is considered a token with the same style.
+ *
+ * Context is applied to the last non-whitespace, non-comment token
+ * recognized.
+ *
+ * Shortcut is an optional string of characters, any of which, if the first
+ * character, gurantee that this pattern and only this pattern matches.
+ *
+ * @param {Array} shortcutStylePatterns patterns that always start with
+ * a known character. Must have a shortcut string.
+ * @param {Array} fallthroughStylePatterns patterns that will be tried in
+ * order if the shortcut ones fail. May have shortcuts.
+ *
+ * @return {function (Object)} a
+ * function that takes source code and returns a list of decorations.
+ */
+ function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
+ var shortcuts = {};
+ var tokenizer;
+ (function () {
+ var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
+ var allRegexs = [];
+ var regexKeys = {};
+ for (var i = 0, n = allPatterns.length; i < n; ++i) {
+ var patternParts = allPatterns[i];
+ var shortcutChars = patternParts[3];
+ if (shortcutChars) {
+ for (var c = shortcutChars.length; --c >= 0;) {
+ shortcuts[shortcutChars.charAt(c)] = patternParts;
+ }
+ }
+ var regex = patternParts[1];
+ var k = '' + regex;
+ if (!regexKeys.hasOwnProperty(k)) {
+ allRegexs.push(regex);
+ regexKeys[k] = null;
+ }
+ }
+ allRegexs.push(/[\0-\uffff]/);
+ tokenizer = combinePrefixPatterns(allRegexs);
+ })();
+
+ var nPatterns = fallthroughStylePatterns.length;
+ var notWs = /\S/;
+
+ /**
+ * Lexes job.source and produces an output array job.decorations of style
+ * classes preceded by the position at which they start in job.source in
+ * order.
+ *
+ * @param {Object} job an object like {@code
+ * source: {string} sourceText plain text,
+ * basePos: {int} position of job.source in the larger chunk of
+ * sourceCode.
+ * }
+ */
+ var decorate = function (job) {
+ var sourceCode = job.source, basePos = job.basePos;
+ /** Even entries are positions in source in ascending order. Odd enties
+ * are style markers (e.g., PR_COMMENT) that run from that position until
+ * the end.
+ * @type {Array.<number|string>}
+ */
+ var decorations = [basePos, PR_PLAIN];
+ var pos = 0; // index into sourceCode
+ var tokens = sourceCode.match(tokenizer) || [];
+ var styleCache = {};
+
+ for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
+ var token = tokens[ti];
+ var style = styleCache[token];
+ var match = void 0;
+
+ var isEmbedded;
+ if (typeof style === 'string') {
+ isEmbedded = false;
+ } else {
+ var patternParts = shortcuts[token.charAt(0)];
+ if (patternParts) {
+ match = token.match(patternParts[1]);
+ style = patternParts[0];
+ } else {
+ for (var i = 0; i < nPatterns; ++i) {
+ patternParts = fallthroughStylePatterns[i];
+ match = token.match(patternParts[1]);
+ if (match) {
+ style = patternParts[0];
+ break;
+ }
+ }
+
+ if (!match) { // make sure that we make progress
+ style = PR_PLAIN;
+ }
+ }
+
+ isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
+ if (isEmbedded && !(match && typeof match[1] === 'string')) {
+ isEmbedded = false;
+ style = PR_SOURCE;
+ }
+
+ if (!isEmbedded) { styleCache[token] = style; }
+ }
+
+ var tokenStart = pos;
+ pos += token.length;
+
+ if (!isEmbedded) {
+ decorations.push(basePos + tokenStart, style);
+ } else { // Treat group 1 as an embedded block of source code.
+ var embeddedSource = match[1];
+ var embeddedSourceStart = token.indexOf(embeddedSource);
+ var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
+ if (match[2]) {
+ // If embeddedSource can be blank, then it would match at the
+ // beginning which would cause us to infinitely recurse on the
+ // entire token, so we catch the right context in match[2].
+ embeddedSourceEnd = token.length - match[2].length;
+ embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
+ }
+ var lang = style.substring(5);
+ // Decorate the left of the embedded source
+ appendDecorations(
+ basePos + tokenStart,
+ token.substring(0, embeddedSourceStart),
+ decorate, decorations);
+ // Decorate the embedded source
+ appendDecorations(
+ basePos + tokenStart + embeddedSourceStart,
+ embeddedSource,
+ langHandlerForExtension(lang, embeddedSource),
+ decorations);
+ // Decorate the right of the embedded section
+ appendDecorations(
+ basePos + tokenStart + embeddedSourceEnd,
+ token.substring(embeddedSourceEnd),
+ decorate, decorations);
+ }
+ }
+ job.decorations = decorations;
+ };
+ return decorate;
+ }
+
+ /** returns a function that produces a list of decorations from source text.
+ *
+ * This code treats ", ', and ` as string delimiters, and \ as a string
+ * escape. It does not recognize perl's qq() style strings.
+ * It has no special handling for double delimiter escapes as in basic, or
+ * the tripled delimiters used in python, but should work on those regardless
+ * although in those cases a single string literal may be broken up into
+ * multiple adjacent string literals.
+ *
+ * It recognizes C, C++, and shell style comments.
+ *
+ * @param {Object} options a set of optional parameters.
+ * @return {function (Object)} a function that examines the source code
+ * in the input job and builds the decoration list.
+ */
+ function sourceDecorator(options) {
+ var shortcutStylePatterns = [], fallthroughStylePatterns = [];
+ if (options['tripleQuotedStrings']) {
+ // '''multi-line-string''', 'single-line-string', and double-quoted
+ shortcutStylePatterns.push(
+ [PR_STRING, /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+ null, '\'"']);
+ } else if (options['multiLineStrings']) {
+ // 'multi-line-string', "multi-line-string"
+ shortcutStylePatterns.push(
+ [PR_STRING, /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
+ null, '\'"`']);
+ } else {
+ // 'single-line-string', "single-line-string"
+ shortcutStylePatterns.push(
+ [PR_STRING,
+ /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
+ null, '"\'']);
+ }
+ if (options['verbatimStrings']) {
+ // verbatim-string-literal production from the C# grammar. See issue 93.
+ fallthroughStylePatterns.push(
+ [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
+ }
+ if (options['hashComments']) {
+ if (options['cStyleComments']) {
+ // Stop C preprocessor declarations at an unclosed open comment
+ shortcutStylePatterns.push(
+ [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
+ null, '#']);
+ fallthroughStylePatterns.push(
+ [PR_STRING,
+ /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
+ null]);
+ } else {
+ shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
+ }
+ }
+ if (options['cStyleComments']) {
+ fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
+ fallthroughStylePatterns.push(
+ [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
+ }
+ if (options['regexLiterals']) {
+ var REGEX_LITERAL = (
+ // A regular expression literal starts with a slash that is
+ // not followed by * or / so that it is not confused with
+ // comments.
+ '/(?=[^/*])'
+ // and then contains any number of raw characters,
+ + '(?:[^/\\x5B\\x5C]'
+ // escape sequences (\x5C),
+ + '|\\x5C[\\s\\S]'
+ // or non-nesting character sets (\x5B\x5D);
+ + '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
+ // finally closed by a /.
+ + '/');
+ fallthroughStylePatterns.push(
+ ['lang-regex',
+ new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
+ ]);
+ }
+
+ var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
+ if (keywords.length) {
+ fallthroughStylePatterns.push(
+ [PR_KEYWORD,
+ new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
+ }
+
+ shortcutStylePatterns.push([PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0']);
+ fallthroughStylePatterns.push(
+ // TODO(mikesamuel): recognize non-latin letters and numerals in idents
+ [PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null],
+ [PR_TYPE, /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
+ [PR_PLAIN, /^[a-z_$][a-z_$@0-9]*/i, null],
+ [PR_LITERAL,
+ new RegExp(
+ '^(?:'
+ // A hex number
+ + '0x[a-f0-9]+'
+ // or an octal or decimal number,
+ + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
+ // possibly in scientific notation
+ + '(?:e[+\\-]?\\d+)?'
+ + ')'
+ // with an optional modifier like UL for unsigned long
+ + '[a-z]*', 'i'),
+ null, '0123456789'],
+ [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
+
+ return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
+ }
+
+ var decorateSource = sourceDecorator({
+ 'keywords': ALL_KEYWORDS,
+ 'hashComments': true,
+ 'cStyleComments': true,
+ 'multiLineStrings': true,
+ 'regexLiterals': true
+ });
+
+ /** Breaks {@code job.source} around style boundaries in
+ * {@code job.decorations} while re-interleaving {@code job.extractedTags},
+ * and leaves the result in {@code job.prettyPrintedHtml}.
+ * @param {Object} job like {
+ * source: {string} source as plain text,
+ * extractedTags: {Array.<number|string>} extractedTags chunks of raw
+ * html preceded by their position in {@code job.source}
+ * in order
+ * decorations: {Array.<number|string} an array of style classes preceded
+ * by the position at which they start in job.source in order
+ * }
+ * @private
+ */
+ function recombineTagsAndDecorations(job) {
+ var sourceText = job.source;
+ var extractedTags = job.extractedTags;
+ var decorations = job.decorations;
+
+ var html = [];
+ // index past the last char in sourceText written to html
+ var outputIdx = 0;
+
+ var openDecoration = null;
+ var currentDecoration = null;
+ var tagPos = 0; // index into extractedTags
+ var decPos = 0; // index into decorations
+ var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
+
+ var adjacentSpaceRe = /([\r\n ]) /g;
+ var startOrSpaceRe = /(^| ) /gm;
+ var newlineRe = /\r\n?|\n/g;
+ var trailingSpaceRe = /[ \r\n]$/;
+ var lastWasSpace = true; // the last text chunk emitted ended with a space.
+
+ // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
+ var isIE678 = window['_pr_isIE6']();
+ var lineBreakHtml = (
+ isIE678
+ ? (job.sourceNode.tagName === 'PRE'
+ // Use line feeds instead of <br>s so that copying and pasting works
+ // on IE.
+ // Doing this on other browsers breaks lots of stuff since \r\n is
+ // treated as two newlines on Firefox.
+ ? (isIE678 === 6 ? '&#160;\r\n' :
+ isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
+ // IE collapses multiple adjacent <br>s into 1 line break.
+ // Prefix every newline with '&#160;' to prevent such behavior.
+ // &nbsp; is the same as &#160; but works in XML as well as HTML.
+ : '&#160;<br />')
+ : '<br />');
+
+ // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
+ // number of the first line.
+ var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
+ var lineBreaker;
+ if (numberLines) {
+ var lineBreaks = [];
+ for (var i = 0; i < 10; ++i) {
+ lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
+ }
+ var lineNum = numberLines[1] && numberLines[1].length
+ ? numberLines[1] - 1 : 0; // Lines are 1-indexed
+ html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
+ if (lineNum) {
+ html.push(' value="', lineNum + 1, '"');
+ }
+ html.push('>');
+ lineBreaker = function () {
+ var lb = lineBreaks[++lineNum % 10];
+ // If a decoration is open, we need to close it before closing a list-item
+ // and reopen it on the other side of the list item.
+ return openDecoration
+ ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
+ };
+ } else {
+ lineBreaker = lineBreakHtml;
+ }
+
+ // A helper function that is responsible for opening sections of decoration
+ // and outputing properly escaped chunks of source
+ function emitTextUpTo(sourceIdx) {
+ if (sourceIdx > outputIdx) {
+ if (openDecoration && openDecoration !== currentDecoration) {
+ // Close the current decoration
+ html.push('</span>');
+ openDecoration = null;
+ }
+ if (!openDecoration && currentDecoration) {
+ openDecoration = currentDecoration;
+ html.push('<span class="', openDecoration, '">');
+ }
+ // This interacts badly with some wikis which introduces paragraph tags
+ // into pre blocks for some strange reason.
+ // It's necessary for IE though which seems to lose the preformattedness
+ // of <pre> tags when their innerHTML is assigned.
+ // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
+ // and it serves to undo the conversion of <br>s to newlines done in
+ // chunkify.
+ var htmlChunk = textToHtml(
+ tabExpander(sourceText.substring(outputIdx, sourceIdx)))
+ .replace(lastWasSpace
+ ? startOrSpaceRe
+ : adjacentSpaceRe, '$1&#160;');
+ // Keep track of whether we need to escape space at the beginning of the
+ // next chunk.
+ lastWasSpace = trailingSpaceRe.test(htmlChunk);
+ html.push(htmlChunk.replace(newlineRe, lineBreaker));
+ outputIdx = sourceIdx;
+ }
+ }
+
+ while (true) {
+ // Determine if we're going to consume a tag this time around. Otherwise
+ // we consume a decoration or exit.
+ var outputTag;
+ if (tagPos < extractedTags.length) {
+ if (decPos < decorations.length) {
+ // Pick one giving preference to extractedTags since we shouldn't open
+ // a new style that we're going to have to immediately close in order
+ // to output a tag.
+ outputTag = extractedTags[tagPos] <= decorations[decPos];
+ } else {
+ outputTag = true;
+ }
+ } else {
+ outputTag = false;
+ }
+ // Consume either a decoration or a tag or exit.
+ if (outputTag) {
+ emitTextUpTo(extractedTags[tagPos]);
+ if (openDecoration) {
+ // Close the current decoration
+ html.push('</span>');
+ openDecoration = null;
+ }
+ html.push(extractedTags[tagPos + 1]);
+ tagPos += 2;
+ } else if (decPos < decorations.length) {
+ emitTextUpTo(decorations[decPos]);
+ currentDecoration = decorations[decPos + 1];
+ decPos += 2;
+ } else {
+ break;
+ }
+ }
+ emitTextUpTo(sourceText.length);
+ if (openDecoration) {
+ html.push('</span>');
+ }
+ if (numberLines) { html.push('</li></ol>'); }
+ job.prettyPrintedHtml = html.join('');
+ }
+
+ /** Maps language-specific file extensions to handlers. */
+ var langHandlerRegistry = {};
+ /** Register a language handler for the given file extensions.
+ * @param {function (Object)} handler a function from source code to a list
+ * of decorations. Takes a single argument job which describes the
+ * state of the computation. The single parameter has the form
+ * {@code {
+ * source: {string} as plain text.
+ * decorations: {Array.<number|string>} an array of style classes
+ * preceded by the position at which they start in
+ * job.source in order.
+ * The language handler should assigned this field.
+ * basePos: {int} the position of source in the larger source chunk.
+ * All positions in the output decorations array are relative
+ * to the larger source chunk.
+ * } }
+ * @param {Array.<string>} fileExtensions
+ */
+ function registerLangHandler(handler, fileExtensions) {
+ for (var i = fileExtensions.length; --i >= 0;) {
+ var ext = fileExtensions[i];
+ if (!langHandlerRegistry.hasOwnProperty(ext)) {
+ langHandlerRegistry[ext] = handler;
+ } else if ('console' in window) {
+ console['warn']('cannot override language handler %s', ext);
+ }
+ }
+ }
+ function langHandlerForExtension(extension, source) {
+ if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
+ // Treat it as markup if the first non whitespace character is a < and
+ // the last non-whitespace character is a >.
+ extension = /^\s*</.test(source)
+ ? 'default-markup'
+ : 'default-code';
+ }
+ return langHandlerRegistry[extension];
+ }
+ registerLangHandler(decorateSource, ['default-code']);
+ registerLangHandler(
+ createSimpleLexer(
+ [],
+ [
+ [PR_PLAIN, /^[^<?]+/],
+ [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
+ [PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/],
+ // Unescaped content in an unknown language
+ ['lang-', /^<\?([\s\S]+?)(?:\?>|$)/],
+ ['lang-', /^<%([\s\S]+?)(?:%>|$)/],
+ [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
+ ['lang-', /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
+ // Unescaped content in javascript. (Or possibly vbscript).
+ ['lang-js', /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
+ // Contains unescaped stylesheet content
+ ['lang-css', /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
+ ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i]
+ ]),
+ ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
+ registerLangHandler(
+ createSimpleLexer(
+ [
+ [PR_PLAIN, /^[\s]+/, null, ' \t\r\n'],
+ [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
+ ],
+ [
+ [PR_TAG, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
+ [PR_ATTRIB_NAME, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
+ ['lang-uq.val', /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+ [PR_PUNCTUATION, /^[=<>\/]+/],
+ ['lang-js', /^on\w+\s*=\s*\"([^\"]+)\"/i],
+ ['lang-js', /^on\w+\s*=\s*\'([^\']+)\'/i],
+ ['lang-js', /^on\w+\s*=\s*([^\"\'>\s]+)/i],
+ ['lang-css', /^style\s*=\s*\"([^\"]+)\"/i],
+ ['lang-css', /^style\s*=\s*\'([^\']+)\'/i],
+ ['lang-css', /^style\s*=\s*([^\"\'>\s]+)/i]
+ ]),
+ ['in.tag']);
+ registerLangHandler(
+ createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': CPP_KEYWORDS,
+ 'hashComments': true,
+ 'cStyleComments': true
+ }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': 'null true false'
+ }), ['json']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': CSHARP_KEYWORDS,
+ 'hashComments': true,
+ 'cStyleComments': true,
+ 'verbatimStrings': true
+ }), ['cs']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': JAVA_KEYWORDS,
+ 'cStyleComments': true
+ }), ['java']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': SH_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true
+ }), ['bsh', 'csh', 'sh']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': PYTHON_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true,
+ 'tripleQuotedStrings': true
+ }), ['cv', 'py']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': PERL_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true,
+ 'regexLiterals': true
+ }), ['perl', 'pl', 'pm']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': RUBY_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true,
+ 'regexLiterals': true
+ }), ['rb']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': JSCRIPT_KEYWORDS,
+ 'cStyleComments': true,
+ 'regexLiterals': true
+ }), ['js']);
+ registerLangHandler(
+ createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
+
+ function applyDecorator(job) {
+ var sourceCodeHtml = job.sourceCodeHtml;
+ var opt_langExtension = job.langExtension;
+
+ // Prepopulate output in case processing fails with an exception.
+ job.prettyPrintedHtml = sourceCodeHtml;
+
+ try {
+ // Extract tags, and convert the source code to plain text.
+ var sourceAndExtractedTags = extractTags(sourceCodeHtml);
+ /** Plain text. @type {string} */
+ var source = sourceAndExtractedTags.source;
+ job.source = source;
+ job.basePos = 0;
+
+ /** Even entries are positions in source in ascending order. Odd entries
+ * are tags that were extracted at that position.
+ * @type {Array.<number|string>}
+ */
+ job.extractedTags = sourceAndExtractedTags.tags;
+
+ // Apply the appropriate language handler
+ langHandlerForExtension(opt_langExtension, source)(job);
+ // Integrate the decorations and tags back into the source code to produce
+ // a decorated html string which is left in job.prettyPrintedHtml.
+ recombineTagsAndDecorations(job);
+ } catch (e) {
+ if ('console' in window) {
+ console['log'](e && e['stack'] ? e['stack'] : e);
+ }
+ }
+ }
+
+ function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
+ var job = {
+ sourceCodeHtml: sourceCodeHtml,
+ langExtension: opt_langExtension
+ };
+ applyDecorator(job);
+ return job.prettyPrintedHtml;
+ }
+
+ function prettyPrint(opt_whenDone) {
+ function byTagName(tn) { return document.getElementsByTagName(tn); }
+ // fetch a list of nodes to rewrite
+ var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
+ var elements = [];
+ for (var i = 0; i < codeSegments.length; ++i) {
+ for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
+ elements.push(codeSegments[i][j]);
+ }
+ }
+ codeSegments = null;
+
+ var clock = Date;
+ if (!clock['now']) {
+ clock = { 'now': function () { return (new Date).getTime(); } };
+ }
+
+ // The loop is broken into a series of continuations to make sure that we
+ // don't make the browser unresponsive when rewriting a large page.
+ var k = 0;
+ var prettyPrintingJob;
+
+ function doWork() {
+ var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
+ clock.now() + 250 /* ms */ :
+ Infinity);
+ for (; k < elements.length && clock.now() < endTime; k++) {
+ var cs = elements[k];
+ // [JACOCO] 'prettyprint' -> 'source'
+ if (cs.className && cs.className.indexOf('source') >= 0) {
+ // If the classes includes a language extensions, use it.
+ // Language extensions can be specified like
+ // <pre class="prettyprint lang-cpp">
+ // the language extension "cpp" is used to find a language handler as
+ // passed to PR_registerLangHandler.
+ var langExtension = cs.className.match(/\blang-(\w+)\b/);
+ if (langExtension) { langExtension = langExtension[1]; }
+
+ // make sure this is not nested in an already prettified element
+ var nested = false;
+ for (var p = cs.parentNode; p; p = p.parentNode) {
+ if ((p.tagName === 'pre' || p.tagName === 'code' ||
+ p.tagName === 'xmp') &&
+ // [JACOCO] 'prettyprint' -> 'source'
+ p.className && p.className.indexOf('source') >= 0) {
+ nested = true;
+ break;
+ }
+ }
+ if (!nested) {
+ // fetch the content as a snippet of properly escaped HTML.
+ // Firefox adds newlines at the end.
+ var content = getInnerHtml(cs);
+ content = content.replace(/(?:\r\n?|\n)$/, '');
+
+ // do the pretty printing
+ prettyPrintingJob = {
+ sourceCodeHtml: content,
+ langExtension: langExtension,
+ sourceNode: cs
+ };
+ applyDecorator(prettyPrintingJob);
+ replaceWithPrettyPrintedHtml();
+ }
+ }
+ }
+ if (k < elements.length) {
+ // finish up in a continuation
+ setTimeout(doWork, 250);
+ } else if (opt_whenDone) {
+ opt_whenDone();
+ }
+ }
+
+ function replaceWithPrettyPrintedHtml() {
+ var newContent = prettyPrintingJob.prettyPrintedHtml;
+ if (!newContent) { return; }
+ var cs = prettyPrintingJob.sourceNode;
+
+ // push the prettified html back into the tag.
+ if (!isRawContent(cs)) {
+ // just replace the old html with the new
+ cs.innerHTML = newContent;
+ } else {
+ // we need to change the tag to a <pre> since <xmp>s do not allow
+ // embedded tags such as the span tags used to attach styles to
+ // sections of source code.
+ var pre = document.createElement('PRE');
+ for (var i = 0; i < cs.attributes.length; ++i) {
+ var a = cs.attributes[i];
+ if (a.specified) {
+ var aname = a.name.toLowerCase();
+ if (aname === 'class') {
+ pre.className = a.value; // For IE 6
+ } else {
+ pre.setAttribute(a.name, a.value);
+ }
+ }
+ }
+ pre.innerHTML = newContent;
+
+ // remove the old
+ cs.parentNode.replaceChild(pre, cs);
+ cs = pre;
+ }
+ }
+
+ doWork();
+ }
+
+ window['PR_normalizedHtml'] = normalizedHtml;
+ window['prettyPrintOne'] = prettyPrintOne;
+ window['prettyPrint'] = prettyPrint;
+ window['PR'] = {
+ 'combinePrefixPatterns': combinePrefixPatterns,
+ 'createSimpleLexer': createSimpleLexer,
+ 'registerLangHandler': registerLangHandler,
+ 'sourceDecorator': sourceDecorator,
+ 'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
+ 'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
+ 'PR_COMMENT': PR_COMMENT,
+ 'PR_DECLARATION': PR_DECLARATION,
+ 'PR_KEYWORD': PR_KEYWORD,
+ 'PR_LITERAL': PR_LITERAL,
+ 'PR_NOCODE': PR_NOCODE,
+ 'PR_PLAIN': PR_PLAIN,
+ 'PR_PUNCTUATION': PR_PUNCTUATION,
+ 'PR_SOURCE': PR_SOURCE,
+ 'PR_STRING': PR_STRING,
+ 'PR_TAG': PR_TAG,
+ 'PR_TYPE': PR_TYPE
+ };
+})();
diff --git a/target/site/jacoco/jacoco-resources/redbar.gif b/target/site/jacoco/jacoco-resources/redbar.gif
new file mode 100644
index 0000000..c2f7146
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/redbar.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/report.css b/target/site/jacoco/jacoco-resources/report.css
new file mode 100644
index 0000000..dd936bc
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/report.css
@@ -0,0 +1,243 @@
+body, td {
+ font-family:sans-serif;
+ font-size:10pt;
+}
+
+h1 {
+ font-weight:bold;
+ font-size:18pt;
+}
+
+.breadcrumb {
+ border:#d6d3ce 1px solid;
+ padding:2px 4px 2px 4px;
+}
+
+.breadcrumb .info {
+ float:right;
+}
+
+.breadcrumb .info a {
+ margin-left:8px;
+}
+
+.el_report {
+ padding-left:18px;
+ background-image:url(report.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_group {
+ padding-left:18px;
+ background-image:url(group.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_bundle {
+ padding-left:18px;
+ background-image:url(bundle.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_package {
+ padding-left:18px;
+ background-image:url(package.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_class {
+ padding-left:18px;
+ background-image:url(class.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_source {
+ padding-left:18px;
+ background-image:url(source.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_method {
+ padding-left:18px;
+ background-image:url(method.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+.el_session {
+ padding-left:18px;
+ background-image:url(session.gif);
+ background-position:left center;
+ background-repeat:no-repeat;
+}
+
+pre.source {
+ border:#d6d3ce 1px solid;
+ font-family:monospace;
+}
+
+pre.source ol {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+pre.source li {
+ border-left: 1px solid #D6D3CE;
+ color: #A0A0A0;
+ padding-left: 0px;
+}
+
+pre.source span.fc {
+ background-color:#ccffcc;
+}
+
+pre.source span.nc {
+ background-color:#ffaaaa;
+}
+
+pre.source span.pc {
+ background-color:#ffffcc;
+}
+
+pre.source span.bfc {
+ background-image: url(branchfc.gif);
+ background-repeat: no-repeat;
+ background-position: 2px center;
+}
+
+pre.source span.bfc:hover {
+ background-color:#80ff80;
+}
+
+pre.source span.bnc {
+ background-image: url(branchnc.gif);
+ background-repeat: no-repeat;
+ background-position: 2px center;
+}
+
+pre.source span.bnc:hover {
+ background-color:#ff8080;
+}
+
+pre.source span.bpc {
+ background-image: url(branchpc.gif);
+ background-repeat: no-repeat;
+ background-position: 2px center;
+}
+
+pre.source span.bpc:hover {
+ background-color:#ffff80;
+}
+
+table.coverage {
+ empty-cells:show;
+ border-collapse:collapse;
+}
+
+table.coverage thead {
+ background-color:#e0e0e0;
+}
+
+table.coverage thead td {
+ white-space:nowrap;
+ padding:2px 14px 0px 6px;
+ border-bottom:#b0b0b0 1px solid;
+}
+
+table.coverage thead td.bar {
+ border-left:#cccccc 1px solid;
+}
+
+table.coverage thead td.ctr1 {
+ text-align:right;
+ border-left:#cccccc 1px solid;
+}
+
+table.coverage thead td.ctr2 {
+ text-align:right;
+ padding-left:2px;
+}
+
+table.coverage thead td.sortable {
+ cursor:pointer;
+ background-image:url(sort.gif);
+ background-position:right center;
+ background-repeat:no-repeat;
+}
+
+table.coverage thead td.up {
+ background-image:url(up.gif);
+}
+
+table.coverage thead td.down {
+ background-image:url(down.gif);
+}
+
+table.coverage tbody td {
+ white-space:nowrap;
+ padding:2px 6px 2px 6px;
+ border-bottom:#d6d3ce 1px solid;
+}
+
+table.coverage tbody tr:hover {
+ background: #f0f0d0 !important;
+}
+
+table.coverage tbody td.bar {
+ border-left:#e8e8e8 1px solid;
+}
+
+table.coverage tbody td.ctr1 {
+ text-align:right;
+ padding-right:14px;
+ border-left:#e8e8e8 1px solid;
+}
+
+table.coverage tbody td.ctr2 {
+ text-align:right;
+ padding-right:14px;
+ padding-left:2px;
+}
+
+table.coverage tfoot td {
+ white-space:nowrap;
+ padding:2px 6px 2px 6px;
+}
+
+table.coverage tfoot td.bar {
+ border-left:#e8e8e8 1px solid;
+}
+
+table.coverage tfoot td.ctr1 {
+ text-align:right;
+ padding-right:14px;
+ border-left:#e8e8e8 1px solid;
+}
+
+table.coverage tfoot td.ctr2 {
+ text-align:right;
+ padding-right:14px;
+ padding-left:2px;
+}
+
+.footer {
+ margin-top:20px;
+ border-top:#d6d3ce 1px solid;
+ padding-top:2px;
+ font-size:8pt;
+ color:#a0a0a0;
+}
+
+.footer a {
+ color:#a0a0a0;
+}
+
+.right {
+ float:right;
+}
diff --git a/target/site/jacoco/jacoco-resources/report.gif b/target/site/jacoco/jacoco-resources/report.gif
new file mode 100644
index 0000000..8547be5
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/report.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/session.gif b/target/site/jacoco/jacoco-resources/session.gif
new file mode 100644
index 0000000..0151bad
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/session.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/sort.gif b/target/site/jacoco/jacoco-resources/sort.gif
new file mode 100644
index 0000000..6757c2c
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/sort.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/sort.js b/target/site/jacoco/jacoco-resources/sort.js
new file mode 100644
index 0000000..e269fe3
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/sort.js
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Marc R. Hoffmann - initial API and implementation
+ *
+ *******************************************************************************/
+
+(function () {
+
+ /**
+ * Sets the initial sorting derived from the hash.
+ *
+ * @param linkelementids
+ * list of element ids to search for links to add sort inidcator
+ * hash links
+ */
+ function initialSort(linkelementids) {
+ window.linkelementids = linkelementids;
+ var hash = window.location.hash;
+ if (hash) {
+ var m = hash.match(/up-./);
+ if (m) {
+ var header = window.document.getElementById(m[0].charAt(3));
+ if (header) {
+ sortColumn(header, true);
+ }
+ return;
+ }
+ var m = hash.match(/dn-./);
+ if (m) {
+ var header = window.document.getElementById(m[0].charAt(3));
+ if (header) {
+ sortColumn(header, false);
+ }
+ return
+ }
+ }
+ }
+
+ /**
+ * Sorts the columns with the given header dependening on the current sort state.
+ */
+ function toggleSort(header) {
+ var sortup = header.className.indexOf('down ') == 0;
+ sortColumn(header, sortup);
+ }
+
+ /**
+ * Sorts the columns with the given header in the given direction.
+ */
+ function sortColumn(header, sortup) {
+ var table = header.parentNode.parentNode.parentNode;
+ var body = table.tBodies[0];
+ var colidx = getNodePosition(header);
+
+ resetSortedStyle(table);
+
+ var rows = body.rows;
+ var sortedrows = [];
+ for (var i = 0; i < rows.length; i++) {
+ r = rows[i];
+ sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
+ }
+
+ var hash;
+
+ if (sortup) {
+ for (var i = sortedrows.length - 1; i >= 0; i--) {
+ body.appendChild(sortedrows[i]);
+ }
+ header.className = 'up ' + header.className;
+ hash = 'up-' + header.id;
+ } else {
+ for (var i = 0; i < sortedrows.length; i++) {
+ body.appendChild(sortedrows[i]);
+ }
+ header.className = 'down ' + header.className;
+ hash = 'dn-' + header.id;
+ }
+
+ setHash(hash);
+ }
+
+ /**
+ * Adds the sort indicator as a hash to the document URL and all links.
+ */
+ function setHash(hash) {
+ window.document.location.hash = hash;
+ ids = window.linkelementids;
+ for (var i = 0; i < ids.length; i++) {
+ setHashOnAllLinks(document.getElementById(ids[i]), hash);
+ }
+ }
+
+ /**
+ * Extend all links within the given tag with the given hash.
+ */
+ function setHashOnAllLinks(tag, hash) {
+ links = tag.getElementsByTagName("a");
+ for (var i = 0; i < links.length; i++) {
+ var a = links[i];
+ var href = a.href;
+ var hashpos = href.indexOf("#");
+ if (hashpos != -1) {
+ href = href.substring(0, hashpos);
+ }
+ a.href = href + "#" + hash;
+ }
+ }
+
+ /**
+ * Calculates the position of a element within its parent.
+ */
+ function getNodePosition(element) {
+ var pos = -1;
+ while (element) {
+ element = element.previousSibling;
+ pos++;
+ }
+ return pos;
+ }
+
+ /**
+ * Remove the sorting indicator style from all headers.
+ */
+ function resetSortedStyle(table) {
+ for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
+ if (c.className) {
+ if (c.className.indexOf('down ') == 0) {
+ c.className = c.className.slice(5);
+ }
+ if (c.className.indexOf('up ') == 0) {
+ c.className = c.className.slice(3);
+ }
+ }
+ }
+ }
+
+ window['initialSort'] = initialSort;
+ window['toggleSort'] = toggleSort;
+
+})();
diff --git a/target/site/jacoco/jacoco-resources/source.gif b/target/site/jacoco/jacoco-resources/source.gif
new file mode 100644
index 0000000..b226e41
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/source.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-resources/up.gif b/target/site/jacoco/jacoco-resources/up.gif
new file mode 100644
index 0000000..58ed216
--- /dev/null
+++ b/target/site/jacoco/jacoco-resources/up.gif
Binary files differ
diff --git a/target/site/jacoco/jacoco-sessions.html b/target/site/jacoco/jacoco-sessions.html
new file mode 100644
index 0000000..478feda
--- /dev/null
+++ b/target/site/jacoco/jacoco-sessions.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">spoteezer</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">DESKTOP-M4INQND-e57e2e00</span></td><td>26 juin 2021, 14:29:08</td><td>26 juin 2021, 14:29:09</td></tr><tr><td><span class="el_session">DESKTOP-M4INQND-3e358c1a</span></td><td>26 juin 2021, 14:29:30</td><td>26 juin 2021, 14:29:30</td></tr><tr><td><span class="el_session">DESKTOP-M4INQND-56f46767</span></td><td>26 juin 2021, 14:29:49</td><td>26 juin 2021, 14:29:49</td></tr><tr><td><span class="el_session">DESKTOP-M4INQND-e88c304d</span></td><td>26 juin 2021, 14:30:30</td><td>26 juin 2021, 14:30:30</td></tr><tr><td><span class="el_session">DESKTOP-M4INQND-20d8781c</span></td><td>26 juin 2021, 14:30:42</td><td>26 juin 2021, 14:30:43</td></tr><tr><td><span class="el_session">DESKTOP-M4INQND-442c10a6</span></td><td>26 juin 2021, 14:30:53</td><td>26 juin 2021, 14:30:53</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><a href="musichub.business/PathValidation.html" class="el_class">musichub.business.PathValidation</a></td><td><code>23fa11bc9f27a597</code></td></tr><tr><td><span class="el_class">musichub.business.PathValidationTest</span></td><td><code>c2c5ebe52507fc9e</code></td></tr><tr><td><span class="el_class">musichub.business.PathValidationTest</span></td><td><code>325f5b44374bcaeb</code></td></tr><tr><td><span class="el_class">musichub.business.PathValidationTest</span></td><td><code>4c7ade2bf38c6e74</code></td></tr><tr><td><span class="el_class">musichub.business.PathValidationTest</span></td><td><code>192d10ac364dc41c</code></td></tr><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>80d79e52a7499259</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>8182fa1396653f01</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BaseProviderFactory</span></td><td><code>82593383b8ea92d6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BiProperty</span></td><td><code>4945e268841ae2cb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>5e68b147d2c4b22f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>dc8fd5c18ebb0e44</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>6f6b6469b9fdf4dd</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>4c7a5282c74ba3e2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Command</span></td><td><code>eb1b53eb8cbe7b47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>0c8d3ca700ec7199</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>fbfebde20e2b504c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>ee59ae4d74408619</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.DumpErrorSingleton</span></td><td><code>a3fa02cb87e0e12b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>a5c33895f0d22838</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>c87487d278c3ea96</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.2</span></td><td><code>31c66931520df8eb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>95d48141fa4dd03d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>24dcd1c5bcf0d850</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.5</span></td><td><code>862846325c16cf76</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>b3ab24d3791d84dd</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>401437f62a3b16ff</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>04bf02021dfc5e9c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkingReporterFactory</span></td><td><code>076a6c0176f6238b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkingRunListener</span></td><td><code>92d4b034b32ca2c0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.MasterProcessCommand</span></td><td><code>da65de332c2de19d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>71b8c658da2ea8d3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker.2</span></td><td><code>68d262a2c2ad8f14</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker.ProcessInfoConsumer</span></td><td><code>73f319c21fab7e7f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessInfo</span></td><td><code>b5b56cd86f3f0b31</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>ae4bf137cc5290c1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>d19986536a351b50</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Shutdown</span></td><td><code>ee9c65017e107986</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>a8cc10b01ed27439</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>f47497b1dde50d64</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>5ea9766678ac06a2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.cli.CommandLineOption</span></td><td><code>467fc7f51b73863b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>89b934b90ec6eb01</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>02cb8e87a6db2057</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>622558f718a42827</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.org.apache.maven.shared.utils.StringUtils</span></td><td><code>336ef03300f29635</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.providerapi.AbstractProvider</span></td><td><code>90f3b08fe8a1c87c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ClassNameStackTraceFilter</span></td><td><code>2e0e75f8104a222a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture</span></td><td><code>b8ae904ed8536017</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>f912ea5d2dac308e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>8d05eb67510fd586</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.PojoStackTraceWriter</span></td><td><code>cdfe959904c6726b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ReporterConfiguration</span></td><td><code>4281487891f02f69</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.SafeThrowable</span></td><td><code>e61429531d0f0c1c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.SimpleReportEntry</span></td><td><code>ced572f24a462295</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.SmartStackTraceParser</span></td><td><code>05e423188a7bbb31</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.io.IOUtils</span></td><td><code>31aed2fcfab3e082</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.io.output.StringBuilderWriter</span></td><td><code>6d33fec8cb3374c0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.JavaVersion</span></td><td><code>a8452005cb20bb7d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.StringUtils</span></td><td><code>4f785afa8bb3a23f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.SystemUtils</span></td><td><code>aba69a973b7ba06a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.math.NumberUtils</span></td><td><code>d0156407bff7b695</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.maven.shared.utils.StringUtils</span></td><td><code>483d14212b21a3ea</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.suite.RunResult</span></td><td><code>f5c7c53a954bcafa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.DirectoryScannerParameters</span></td><td><code>2b5eeacae469cd1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.IncludedExcludedPatterns</span></td><td><code>f39908e3b64d7090</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest</span></td><td><code>a598483e424232d4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest.ClassMatcher</span></td><td><code>79be7f2fa77ad8d7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest.MethodMatcher</span></td><td><code>7c71374a51e8e61b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest.Type</span></td><td><code>90e4214668937845</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.RunOrderParameters</span></td><td><code>b4c06223c3099700</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestArtifactInfo</span></td><td><code>f703953620e80b33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestListResolver</span></td><td><code>7d372c99b98a147d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestRequest</span></td><td><code>0fa2c0cc34345df2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.CloseableIterator</span></td><td><code>cc15bdebae86d5d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.DefaultRunOrderCalculator</span></td><td><code>1aeecbcd3bf6e89b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.DefaultScanResult</span></td><td><code>7fefafdf8c793c36</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.ReflectionUtils</span></td><td><code>8d5f4b05d6d77207</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.RunOrder</span></td><td><code>d2292a6beb4b6337</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.TestsToRun</span></td><td><code>a95363e4b4ba2069</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.TestsToRun.ClassesIterator</span></td><td><code>84a139c598502c0b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.DaemonThreadFactory</span></td><td><code>21a589f6dedb169c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>682458ca85b067a3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.DumpFileUtils</span></td><td><code>fff19f49be3d8149</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.ImmutableMap</span></td><td><code>72bcae5e55b4fabb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.ObjectUtils</span></td><td><code>69a2a92649b44645</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.StringUtils</span></td><td><code>3a7e4daf0a993e1e</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>0341e8d99fc36573</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertEquals</span></td><td><code>12bfbbf2e4327e63</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertFalse</span></td><td><code>32fea5a28fb6a114</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertTrue</span></td><td><code>612f68f7274dd69c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertionUtils</span></td><td><code>da37ffd9f98016fd</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.Assertions</span></td><td><code>041279bcf2826fff</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.TestInstance.Lifecycle</span></td><td><code>0e93858cc703e9fc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>2f9dc9ea54b57975</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext</span></td><td><code>222e1fc44c4844aa</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.DiscoveryFilterApplier</span></td><td><code>ae96a3ff3c2e2bc4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>c74f725c8cb223be</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>1f7ed0b87a9f2cca</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassExtensionContext</span></td><td><code>b85422abe06bbadd</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassTestDescriptor</span></td><td><code>61a635a4acc3ee31</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>d025635c09450d0d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>7ae853fe3a80d83c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterTestDescriptor</span></td><td><code>606e5ec97816bda5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.LifecycleMethodUtils</span></td><td><code>19c9fba5accef0fa</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor</span></td><td><code>65654838f58d8b44</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodExtensionContext</span></td><td><code>c098f6d0bb344d56</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils</span></td><td><code>c42bb138e6a06252</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor</span></td><td><code>54eb6a19bd953962</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractMethodResolver</span></td><td><code>3934f16bf877b9f5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>a858789f976fefbc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.JavaElementsResolver</span></td><td><code>32e9ea682e77049d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>5ea468d2eb528361</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.NestedTestsResolver</span></td><td><code>9d92451ae793af41</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.TestContainerResolver</span></td><td><code>7db010f5e9c7301d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.TestFactoryMethodResolver</span></td><td><code>59fd27320e375440</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.TestMethodResolver</span></td><td><code>1417c6356fa4b27f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.TestTemplateMethodResolver</span></td><td><code>47563eb55cd35171</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>f7d9846d00228720</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>e47ff7cd33073803</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>0f8df015b2d5841a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsScannableTestClass</span></td><td><code>839db992754219f6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>5ab134cc6ef3a81f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>a2c68978bd6bfbc6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>8b244977e441886e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>0baf1066bf0cbad7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>59a0b58a40803fe2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConditionEvaluator</span></td><td><code>fba35d945644501d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExecutableInvoker</span></td><td><code>d64b9ef7a154ea95</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExtensionValuesStore</span></td><td><code>2517eb7835ca6234</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>65be276e3a954a94</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>dd69537274ccbffc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>38616672a2502408</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ThrowableCollector</span></td><td><code>92102b13561afdcf</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>a967493a244329fa</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.ExtensionRegistry</span></td><td><code>20b847fc63fd255b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>1b7914cc8cf83732</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>1b5b370a56807cae</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>839c7c31b3ec6390</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>ca4e1a8773fb9bed</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>fd74fe2bb4edddd0</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>32499b01efc144e8</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils.AnnotationCacheKey</span></td><td><code>f04082259bc4a6ab</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.BlacklistedExceptions</span></td><td><code>73365157bacc50af</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>ebded5f4ecebd9d8</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassUtils</span></td><td><code>4982a89773933a90</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>8425ab535628f6b9</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>59532d0e14166bc8</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ExceptionUtils</span></td><td><code>0125033b30a9585f</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>f9207dc44e9d043d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>4d39f1033ae8eb12</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>b267f8ac562d551e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>3441f99393e2406b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>d9d6482243cc9fa3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>75dffc26c0811b9d</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>ed3835cc21e5a048</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>f932423ccd3b54bf</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>bf731bc7f64ce694</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>e9574ca206cded64</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>eb97fc5a29f3ee3a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>abbab174d32db912</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>da0473a55d05e891</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>d23a178963e86ca7</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>54a2765f04c8cab7</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>c860ade4b928ce32</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>228aa96d72021db2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>8fefc6f1651cc3bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>2bfbf25c43491443</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.ClassSource</span></td><td><code>9727c5551a632c40</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>b7dbf6dfb794516c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.MethodSource</span></td><td><code>0a1b0f0f95f17b77</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.filter.ClasspathScanningSupport</span></td><td><code>8223a02c2b9d8c89</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExecutionTracker</span></td><td><code>cbd37bfd76595d62</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>410766a2a07e44b1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>7b43a475463d740e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.1</span></td><td><code>197b854565198af0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>8a5379bd364a5bf6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>d4551dfb7a813206</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleTestExecutor</span></td><td><code>d75bd01628eef7be</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>225bb434f8f223e2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>9a2b71b572924cbc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>7dda3ad9a0e6a666</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>1a1f88af87dc6ec1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>52cf3c3c69d4dfba</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>ef55cacb5e47a902</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>e78a71b91c159e69</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>e2bd67b8a72737b5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.Root</span></td><td><code>32394ca895f9fb9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>7c054c4cf76cb0f6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestExecutionListenerRegistry</span></td><td><code>2299bac1075a6bf3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.TestExecutionListenerRegistry</span></td><td><code>190f4fb2b0ab865d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.TestExecutionListenerRegistry.CompositeTestExecutionListener</span></td><td><code>7538d2d860e1f9cb</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.LegacyReportingUtils</span></td><td><code>f3c021e100a54063</code></td></tr><tr><td><span class="el_class">org.opentest4j.AssertionFailedError</span></td><td><code>2c5f69ceb24e9128</code></td></tr><tr><td><span class="el_class">org.opentest4j.ValueWrapper</span></td><td><code>7d0d1c90c1c4c4b3</code></td></tr><tr><td><span class="el_class">sun.text.resources.cldr.ext.FormatData_fr</span></td><td><code>cfe4ef8ff7428512</code></td></tr><tr><td><span class="el_class">sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo</span></td><td><code>888d0e6a76acb845</code></td></tr><tr><td><span class="el_class">sun.util.resources.provider.LocaleDataProvider</span></td><td><code>36ca29d59ab35e5c</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/jacoco.csv b/target/site/jacoco/jacoco.csv
new file mode 100644
index 0000000..9aff09d
--- /dev/null
+++ b/target/site/jacoco/jacoco.csv
@@ -0,0 +1,19 @@
+GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
+spoteezer,musichub.util,XMLHandler,72,0,0,0,25,0,4,0,4,0
+spoteezer,musichub.business,Album,330,0,14,0,84,0,16,0,9,0
+spoteezer,musichub.business,PathValidation,0,17,0,0,0,4,0,2,0,2
+spoteezer,musichub.business,SortByAuthor,9,0,0,0,2,0,2,0,2,0
+spoteezer,musichub.business,NoAlbumFoundException,4,0,0,0,2,0,1,0,1,0
+spoteezer,musichub.business,Language,49,0,0,0,6,0,3,0,3,0
+spoteezer,musichub.business,SortByDate,9,0,0,0,2,0,2,0,2,0
+spoteezer,musichub.business,MusicHub,803,0,114,0,195,0,79,0,22,0
+spoteezer,musichub.business,Category,49,0,0,0,6,0,3,0,3,0
+spoteezer,musichub.business,Song,105,0,6,0,26,0,12,0,7,0
+spoteezer,musichub.business,NoPlayListFoundException,4,0,0,0,2,0,1,0,1,0
+spoteezer,musichub.business,PlayList,202,0,14,0,53,0,14,0,7,0
+spoteezer,musichub.business,AudioBook,164,0,10,0,39,0,17,0,9,0
+spoteezer,musichub.business,SortByGenre,9,0,0,0,2,0,2,0,2,0
+spoteezer,musichub.business,NoElementFoundException,4,0,0,0,2,0,1,0,1,0
+spoteezer,musichub.business,Genre,56,0,0,0,6,0,3,0,3,0
+spoteezer,musichub.business,AudioElement,266,0,11,0,72,0,16,0,9,0
+spoteezer,musichub.main,Main,588,0,40,0,199,0,29,0,3,0
diff --git a/target/site/jacoco/jacoco.xml b/target/site/jacoco/jacoco.xml
new file mode 100644
index 0000000..5a939ee
--- /dev/null
+++ b/target/site/jacoco/jacoco.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="spoteezer"><sessioninfo id="DESKTOP-M4INQND-e57e2e00" start="1624710548706" dump="1624710549076"/><sessioninfo id="DESKTOP-M4INQND-3e358c1a" start="1624710570201" dump="1624710570575"/><sessioninfo id="DESKTOP-M4INQND-56f46767" start="1624710589444" dump="1624710589830"/><sessioninfo id="DESKTOP-M4INQND-e88c304d" start="1624710630581" dump="1624710630973"/><sessioninfo id="DESKTOP-M4INQND-20d8781c" start="1624710642738" dump="1624710643144"/><sessioninfo id="DESKTOP-M4INQND-442c10a6" start="1624710653198" dump="1624710653579"/><package name="musichub/util"><class name="musichub/util/XMLHandler" sourcefilename="XMLHandler.java"><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="23" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLFile" desc="(Lorg/w3c/dom/Document;Ljava/lang/String;)V" line="41"><counter type="INSTRUCTION" missed="23" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLDocument" desc="()Lorg/w3c/dom/Document;" line="57"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="parseXMLFile" desc="(Ljava/lang/String;)Lorg/w3c/dom/NodeList;" line="61"><counter type="INSTRUCTION" missed="22" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="LINE" missed="25" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="XMLHandler.java"><line nr="26" mi="2" ci="0" mb="0" cb="0"/><line nr="28" mi="3" ci="0" mb="0" cb="0"/><line nr="29" mi="5" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="31" mi="5" ci="0" mb="0" cb="0"/><line nr="32" mi="1" ci="0" mb="0" cb="0"/><line nr="33" mi="2" ci="0" mb="0" cb="0"/><line nr="34" mi="1" ci="0" mb="0" cb="0"/><line nr="35" mi="1" ci="0" mb="0" cb="0"/><line nr="41" mi="5" ci="0" mb="0" cb="0"/><line nr="42" mi="8" ci="0" mb="0" cb="0"/><line nr="49" mi="5" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="52" mi="2" ci="0" mb="0" cb="0"/><line nr="53" mi="1" ci="0" mb="0" cb="0"/><line nr="54" mi="1" ci="0" mb="0" cb="0"/><line nr="57" mi="4" ci="0" mb="0" cb="0"/><line nr="61" mi="2" ci="0" mb="0" cb="0"/><line nr="63" mi="8" ci="0" mb="0" cb="0"/><line nr="64" mi="3" ci="0" mb="0" cb="0"/><line nr="66" mi="3" ci="0" mb="0" cb="0"/><line nr="67" mi="1" ci="0" mb="0" cb="0"/><line nr="68" mi="2" ci="0" mb="0" cb="0"/><line nr="69" mi="1" ci="0" mb="0" cb="0"/><line nr="70" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="LINE" missed="25" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="LINE" missed="25" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><package name="musichub/business"><class name="musichub/business/Album" sourcefilename="Album.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;)V" line="21"><counter type="INSTRUCTION" missed="33" covered="0"/><counter type="LINE" missed="12" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V" line="35"><counter type="INSTRUCTION" missed="34" covered="0"/><counter type="LINE" missed="12" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lorg/w3c/dom/Element;)V" line="49"><counter type="INSTRUCTION" missed="112" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addSong" desc="(Ljava/util/UUID;)V" line="89"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSongs" desc="()Ljava/util/List;" line="94"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSongsRandomly" desc="()Ljava/util/ArrayList;" line="98"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTitle" desc="()Ljava/lang/String;" line="104"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getDate" desc="()Ljava/util/Date;" line="108"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLElement" desc="(Lorg/w3c/dom/Document;Lorg/w3c/dom/Element;)V" line="112"><counter type="INSTRUCTION" missed="129" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="330" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="84" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/PathValidation" sourcefilename="PathValidation.java"><method name="&lt;init&gt;" desc="()V" line="22"><counter type="INSTRUCTION" missed="0" covered="7"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isPathValid" desc="(Ljava/lang/String;)Z" line="34"><counter type="INSTRUCTION" missed="0" covered="10"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></class><class name="musichub/business/SortByAuthor" sourcefilename="MusicHub.java"><method name="&lt;init&gt;" desc="()V" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="compare" desc="(Lmusichub/business/AudioElement;Lmusichub/business/AudioElement;)I" line="29"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/NoAlbumFoundException" sourcefilename="NoAlbumFoundException.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/Language" sourcefilename="Language.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;ILjava/lang/String;)V" line="7"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLanguage" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="3"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/SortByDate" sourcefilename="MusicHub.java"><method name="&lt;init&gt;" desc="()V" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="compare" desc="(Lmusichub/business/Album;Lmusichub/business/Album;)I" line="17"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/MusicHub" sourcefilename="MusicHub.java"><method name="&lt;init&gt;" desc="()V" line="41"><counter type="INSTRUCTION" missed="29" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addElement" desc="(Lmusichub/business/AudioElement;)V" line="53"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addAlbum" desc="(Lmusichub/business/Album;)V" line="57"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addPlaylist" desc="(Lmusichub/business/PlayList;)V" line="61"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="deletePlayList" desc="(Ljava/lang/String;)V" line="66"><counter type="INSTRUCTION" missed="40" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="albums" desc="()Ljava/util/Iterator;" line="81"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="playlists" desc="()Ljava/util/Iterator;" line="85"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="elements" desc="()Ljava/util/Iterator;" line="89"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAlbumsTitlesSortedByDate" desc="()Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="32" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAudiobooksTitlesSortedByAuthor" desc="()Ljava/lang/String;" line="101"><counter type="INSTRUCTION" missed="53" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAlbumSongs" desc="(Ljava/lang/String;)Ljava/util/List;" line="113"><counter type="INSTRUCTION" missed="73" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAlbumSongsSortedByGenre" desc="(Ljava/lang/String;)Ljava/util/List;" line="135"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addElementToAlbum" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="158"><counter type="INSTRUCTION" missed="82" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="20" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addElementToPlayList" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="187"><counter type="INSTRUCTION" missed="82" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="20" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="loadAlbums" desc="()V" line="218"><counter type="INSTRUCTION" missed="44" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="loadPlaylists" desc="()V" line="236"><counter type="INSTRUCTION" missed="44" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="loadElements" desc="()V" line="254"><counter type="INSTRUCTION" missed="64" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="18" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="saveAlbums" desc="()V" line="282"><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="savePlayLists" desc="()V" line="298"><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="saveElements" desc="()V" line="314"><counter type="INSTRUCTION" missed="47" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="12" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAudioElement" desc="(Ljava/util/List;Ljava/lang/String;)V" line="335"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="34"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="803" covered="0"/><counter type="BRANCH" missed="114" covered="0"/><counter type="LINE" missed="195" covered="0"/><counter type="COMPLEXITY" missed="79" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/Category" sourcefilename="Category.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;ILjava/lang/String;)V" line="7"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCategory" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="3"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/Song" sourcefilename="Song.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" line="16"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lorg/w3c/dom/Element;)V" line="21"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getGenre" desc="()Ljava/lang/String;" line="26"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setGenre" desc="(Ljava/lang/String;)V" line="30"><counter type="INSTRUCTION" missed="33" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLElement" desc="(Lorg/w3c/dom/Document;Lorg/w3c/dom/Element;)V" line="46"><counter type="INSTRUCTION" missed="29" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="105" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="12" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/NoPlayListFoundException" sourcefilename="NoPlayListFoundException.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/PlayList" sourcefilename="PlayList.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;)V" line="16"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="22"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lorg/w3c/dom/Element;)V" line="28"><counter type="INSTRUCTION" missed="88" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="23" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addElement" desc="(Ljava/util/UUID;)V" line="66"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getElements" desc="()Ljava/util/ArrayList;" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTitle" desc="()Ljava/lang/String;" line="74"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLElement" desc="(Lorg/w3c/dom/Document;Lorg/w3c/dom/Element;)V" line="78"><counter type="INSTRUCTION" missed="75" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="202" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="53" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/AudioBook" sourcefilename="AudioBook.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lorg/w3c/dom/Element;)V" line="23"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLanguage" desc="()Lmusichub/business/Language;" line="29"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLanguage" desc="(Ljava/lang/String;)V" line="33"><counter type="INSTRUCTION" missed="29" covered="0"/><counter type="BRANCH" missed="5" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCategory" desc="()Lmusichub/business/Category;" line="43"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCategory" desc="(Ljava/lang/String;)V" line="47"><counter type="INSTRUCTION" missed="29" covered="0"/><counter type="BRANCH" missed="5" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="58"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLElement" desc="(Lorg/w3c/dom/Document;Lorg/w3c/dom/Element;)V" line="64"><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="164" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="39" covered="0"/><counter type="COMPLEXITY" missed="17" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/SortByGenre" sourcefilename="MusicHub.java"><method name="&lt;init&gt;" desc="()V" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="compare" desc="(Lmusichub/business/Song;Lmusichub/business/Song;)I" line="23"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/NoElementFoundException" sourcefilename="NoElementFoundException.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/Genre" sourcefilename="Genre.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;ILjava/lang/String;)V" line="7"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getGenre" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="3"><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="56" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="musichub/business/AudioElement" sourcefilename="AudioElement.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lorg/w3c/dom/Element;)V" line="40"><counter type="INSTRUCTION" missed="63" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUUID" desc="()Ljava/util/UUID;" line="59"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getArtist" desc="()Ljava/lang/String;" line="63"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTitle" desc="()Ljava/lang/String;" line="67"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="71"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createXMLElement" desc="(Lorg/w3c/dom/Document;Lorg/w3c/dom/Element;)V" line="75"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="manageAudioElement" desc="()V" line="99"><counter type="INSTRUCTION" missed="68" covered="0"/><counter type="BRANCH" missed="7" covered="0"/><counter type="LINE" missed="24" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="266" covered="0"/><counter type="BRANCH" missed="11" covered="0"/><counter type="LINE" missed="72" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="MusicHub.java"><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="6" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="23" mi="6" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="29" mi="6" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="35" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="5" ci="0" mb="0" cb="0"/><line nr="43" mi="2" ci="0" mb="0" cb="0"/><line nr="44" mi="5" ci="0" mb="0" cb="0"/><line nr="45" mi="5" ci="0" mb="0" cb="0"/><line nr="46" mi="5" ci="0" mb="0" cb="0"/><line nr="47" mi="2" ci="0" mb="0" cb="0"/><line nr="48" mi="2" ci="0" mb="0" cb="0"/><line nr="49" mi="2" ci="0" mb="0" cb="0"/><line nr="50" mi="1" ci="0" mb="0" cb="0"/><line nr="53" mi="5" ci="0" mb="0" cb="0"/><line nr="54" mi="1" ci="0" mb="0" cb="0"/><line nr="57" mi="5" ci="0" mb="0" cb="0"/><line nr="58" mi="1" ci="0" mb="0" cb="0"/><line nr="61" mi="5" ci="0" mb="0" cb="0"/><line nr="62" mi="1" ci="0" mb="0" cb="0"/><line nr="66" mi="2" ci="0" mb="0" cb="0"/><line nr="67" mi="2" ci="0" mb="0" cb="0"/><line nr="68" mi="11" ci="0" mb="2" cb="0"/><line nr="69" mi="5" ci="0" mb="2" cb="0"/><line nr="70" mi="2" ci="0" mb="0" cb="0"/><line nr="71" mi="1" ci="0" mb="0" cb="0"/><line nr="73" mi="1" ci="0" mb="0" cb="0"/><line nr="75" mi="2" ci="0" mb="2" cb="0"/><line nr="76" mi="5" ci="0" mb="0" cb="0"/><line nr="77" mi="8" ci="0" mb="2" cb="0"/><line nr="78" mi="1" ci="0" mb="0" cb="0"/><line nr="81" mi="4" ci="0" mb="0" cb="0"/><line nr="85" mi="4" ci="0" mb="0" cb="0"/><line nr="89" mi="4" ci="0" mb="0" cb="0"/><line nr="93" mi="4" ci="0" mb="0" cb="0"/><line nr="94" mi="6" ci="0" mb="0" cb="0"/><line nr="95" mi="11" ci="0" mb="2" cb="0"/><line nr="96" mi="8" ci="0" mb="0" cb="0"/><line nr="97" mi="3" ci="0" mb="0" cb="0"/><line nr="101" mi="4" ci="0" mb="0" cb="0"/><line nr="102" mi="4" ci="0" mb="0" cb="0"/><line nr="103" mi="11" ci="0" mb="2" cb="0"/><line nr="104" mi="4" ci="0" mb="2" cb="0"/><line nr="105" mi="4" ci="0" mb="0" cb="0"/><line nr="106" mi="5" ci="0" mb="0" cb="0"/><line nr="107" mi="10" ci="0" mb="2" cb="0"/><line nr="108" mi="8" ci="0" mb="0" cb="0"/><line nr="109" mi="3" ci="0" mb="0" cb="0"/><line nr="113" mi="2" ci="0" mb="0" cb="0"/><line nr="114" mi="4" ci="0" mb="0" cb="0"/><line nr="115" mi="11" ci="0" mb="2" cb="0"/><line nr="116" mi="5" ci="0" mb="2" cb="0"/><line nr="117" mi="2" ci="0" mb="0" cb="0"/><line nr="118" mi="1" ci="0" mb="0" cb="0"/><line nr="120" mi="1" ci="0" mb="0" cb="0"/><line nr="121" mi="7" ci="0" mb="2" cb="0"/><line nr="123" mi="3" ci="0" mb="0" cb="0"/><line nr="124" mi="10" ci="0" mb="2" cb="0"/><line nr="125" mi="12" ci="0" mb="2" cb="0"/><line nr="126" mi="3" ci="0" mb="2" cb="0"/><line nr="127" mi="9" ci="0" mb="2" cb="0"/><line nr="129" mi="1" ci="0" mb="0" cb="0"/><line nr="130" mi="2" ci="0" mb="0" cb="0"/><line nr="135" mi="2" ci="0" mb="0" cb="0"/><line nr="136" mi="4" ci="0" mb="0" cb="0"/><line nr="137" mi="11" ci="0" mb="2" cb="0"/><line nr="138" mi="5" ci="0" mb="2" cb="0"/><line nr="139" mi="2" ci="0" mb="0" cb="0"/><line nr="140" mi="1" ci="0" mb="0" cb="0"/><line nr="142" mi="1" ci="0" mb="0" cb="0"/><line nr="143" mi="7" ci="0" mb="2" cb="0"/><line nr="145" mi="3" ci="0" mb="0" cb="0"/><line nr="146" mi="10" ci="0" mb="2" cb="0"/><line nr="147" mi="12" ci="0" mb="2" cb="0"/><line nr="148" mi="3" ci="0" mb="2" cb="0"/><line nr="149" mi="10" ci="0" mb="2" cb="0"/><line nr="151" mi="1" ci="0" mb="0" cb="0"/><line nr="152" mi="5" ci="0" mb="0" cb="0"/><line nr="153" mi="2" ci="0" mb="0" cb="0"/><line nr="158" mi="2" ci="0" mb="0" cb="0"/><line nr="160" mi="2" ci="0" mb="0" cb="0"/><line nr="161" mi="9" ci="0" mb="2" cb="0"/><line nr="162" mi="9" ci="0" mb="2" cb="0"/><line nr="163" mi="6" ci="0" mb="0" cb="0"/><line nr="164" mi="2" ci="0" mb="0" cb="0"/><line nr="165" mi="1" ci="0" mb="0" cb="0"/><line nr="169" mi="2" ci="0" mb="2" cb="0"/><line nr="170" mi="2" ci="0" mb="0" cb="0"/><line nr="171" mi="11" ci="0" mb="2" cb="0"/><line nr="172" mi="5" ci="0" mb="2" cb="0"/><line nr="173" mi="2" ci="0" mb="0" cb="0"/><line nr="174" mi="1" ci="0" mb="0" cb="0"/><line nr="176" mi="1" ci="0" mb="0" cb="0"/><line nr="177" mi="2" ci="0" mb="2" cb="0"/><line nr="178" mi="4" ci="0" mb="0" cb="0"/><line nr="180" mi="7" ci="0" mb="0" cb="0"/><line nr="181" mi="6" ci="0" mb="0" cb="0"/><line nr="182" mi="7" ci="0" mb="0" cb="0"/><line nr="184" mi="1" ci="0" mb="0" cb="0"/><line nr="187" mi="2" ci="0" mb="0" cb="0"/><line nr="189" mi="2" ci="0" mb="0" cb="0"/><line nr="191" mi="9" ci="0" mb="2" cb="0"/><line nr="192" mi="9" ci="0" mb="2" cb="0"/><line nr="193" mi="6" ci="0" mb="0" cb="0"/><line nr="194" mi="2" ci="0" mb="0" cb="0"/><line nr="195" mi="1" ci="0" mb="0" cb="0"/><line nr="199" mi="2" ci="0" mb="2" cb="0"/><line nr="200" mi="2" ci="0" mb="0" cb="0"/><line nr="201" mi="11" ci="0" mb="2" cb="0"/><line nr="202" mi="5" ci="0" mb="2" cb="0"/><line nr="203" mi="2" ci="0" mb="0" cb="0"/><line nr="204" mi="1" ci="0" mb="0" cb="0"/><line nr="206" mi="1" ci="0" mb="0" cb="0"/><line nr="207" mi="2" ci="0" mb="2" cb="0"/><line nr="208" mi="4" ci="0" mb="0" cb="0"/><line nr="210" mi="7" ci="0" mb="0" cb="0"/><line nr="211" mi="6" ci="0" mb="0" cb="0"/><line nr="213" mi="7" ci="0" mb="0" cb="0"/><line nr="215" mi="1" ci="0" mb="0" cb="0"/><line nr="218" mi="5" ci="0" mb="0" cb="0"/><line nr="219" mi="3" ci="0" mb="2" cb="0"/><line nr="221" mi="8" ci="0" mb="2" cb="0"/><line nr="222" mi="6" ci="0" mb="2" cb="0"/><line nr="223" mi="5" ci="0" mb="0" cb="0"/><line nr="224" mi="5" ci="0" mb="2" cb="0"/><line nr="226" mi="6" ci="0" mb="0" cb="0"/><line nr="227" mi="1" ci="0" mb="0" cb="0"/><line nr="228" mi="3" ci="0" mb="0" cb="0"/><line nr="229" mi="1" ci="0" mb="0" cb="0"/><line nr="233" mi="1" ci="0" mb="0" cb="0"/><line nr="236" mi="5" ci="0" mb="0" cb="0"/><line nr="237" mi="3" ci="0" mb="2" cb="0"/><line nr="239" mi="8" ci="0" mb="2" cb="0"/><line nr="240" mi="6" ci="0" mb="2" cb="0"/><line nr="241" mi="5" ci="0" mb="0" cb="0"/><line nr="242" mi="5" ci="0" mb="2" cb="0"/><line nr="244" mi="6" ci="0" mb="0" cb="0"/><line nr="245" mi="1" ci="0" mb="0" cb="0"/><line nr="246" mi="3" ci="0" mb="0" cb="0"/><line nr="247" mi="1" ci="0" mb="0" cb="0"/><line nr="251" mi="1" ci="0" mb="0" cb="0"/><line nr="254" mi="5" ci="0" mb="0" cb="0"/><line nr="255" mi="3" ci="0" mb="2" cb="0"/><line nr="257" mi="8" ci="0" mb="2" cb="0"/><line nr="258" mi="6" ci="0" mb="2" cb="0"/><line nr="259" mi="5" ci="0" mb="0" cb="0"/><line nr="260" mi="5" ci="0" mb="2" cb="0"/><line nr="262" mi="5" ci="0" mb="0" cb="0"/><line nr="263" mi="3" ci="0" mb="0" cb="0"/><line nr="264" mi="1" ci="0" mb="0" cb="0"/><line nr="265" mi="3" ci="0" mb="0" cb="0"/><line nr="266" mi="1" ci="0" mb="0" cb="0"/><line nr="268" mi="5" ci="0" mb="2" cb="0"/><line nr="270" mi="5" ci="0" mb="0" cb="0"/><line nr="271" mi="3" ci="0" mb="0" cb="0"/><line nr="272" mi="1" ci="0" mb="0" cb="0"/><line nr="273" mi="3" ci="0" mb="0" cb="0"/><line nr="274" mi="1" ci="0" mb="0" cb="0"/><line nr="278" mi="1" ci="0" mb="0" cb="0"/><line nr="282" mi="4" ci="0" mb="0" cb="0"/><line nr="283" mi="3" ci="0" mb="2" cb="0"/><line nr="286" mi="4" ci="0" mb="0" cb="0"/><line nr="287" mi="4" ci="0" mb="0" cb="0"/><line nr="290" mi="6" ci="0" mb="2" cb="0"/><line nr="291" mi="4" ci="0" mb="0" cb="0"/><line nr="292" mi="4" ci="0" mb="0" cb="0"/><line nr="293" mi="1" ci="0" mb="0" cb="0"/><line nr="294" mi="5" ci="0" mb="0" cb="0"/><line nr="295" mi="1" ci="0" mb="0" cb="0"/><line nr="298" mi="4" ci="0" mb="0" cb="0"/><line nr="299" mi="3" ci="0" mb="2" cb="0"/><line nr="302" mi="4" ci="0" mb="0" cb="0"/><line nr="303" mi="4" ci="0" mb="0" cb="0"/><line nr="306" mi="6" ci="0" mb="2" cb="0"/><line nr="307" mi="4" ci="0" mb="0" cb="0"/><line nr="308" mi="4" ci="0" mb="0" cb="0"/><line nr="309" mi="1" ci="0" mb="0" cb="0"/><line nr="310" mi="5" ci="0" mb="0" cb="0"/><line nr="311" mi="1" ci="0" mb="0" cb="0"/><line nr="314" mi="4" ci="0" mb="0" cb="0"/><line nr="315" mi="3" ci="0" mb="2" cb="0"/><line nr="318" mi="4" ci="0" mb="0" cb="0"/><line nr="319" mi="4" ci="0" mb="0" cb="0"/><line nr="322" mi="11" ci="0" mb="2" cb="0"/><line nr="324" mi="3" ci="0" mb="2" cb="0"/><line nr="325" mi="4" ci="0" mb="0" cb="0"/><line nr="327" mi="3" ci="0" mb="2" cb="0"/><line nr="328" mi="4" ci="0" mb="0" cb="0"/><line nr="330" mi="1" ci="0" mb="0" cb="0"/><line nr="331" mi="5" ci="0" mb="0" cb="0"/><line nr="332" mi="1" ci="0" mb="0" cb="0"/><line nr="335" mi="10" ci="0" mb="2" cb="0"/><line nr="336" mi="5" ci="0" mb="2" cb="0"/><line nr="337" mi="2" ci="0" mb="0" cb="0"/><line nr="339" mi="1" ci="0" mb="0" cb="0"/><line nr="341" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="830" covered="0"/><counter type="BRANCH" missed="114" covered="0"/><counter type="LINE" missed="201" covered="0"/><counter type="COMPLEXITY" missed="85" covered="0"/><counter type="METHOD" missed="28" covered="0"/><counter type="CLASS" missed="4" covered="0"/></sourcefile><sourcefile name="PlayList.java"><line nr="16" mi="2" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="4" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="1" ci="0" mb="0" cb="0"/><line nr="22" mi="2" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="25" mi="5" ci="0" mb="0" cb="0"/><line nr="26" mi="1" ci="0" mb="0" cb="0"/><line nr="28" mi="2" ci="0" mb="0" cb="0"/><line nr="30" mi="8" ci="0" mb="0" cb="0"/><line nr="32" mi="2" ci="0" mb="0" cb="0"/><line nr="34" mi="7" ci="0" mb="0" cb="0"/><line nr="35" mi="1" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="37" mi="1" ci="0" mb="0" cb="0"/><line nr="38" mi="5" ci="0" mb="4" cb="0"/><line nr="39" mi="4" ci="0" mb="0" cb="0"/><line nr="40" mi="4" ci="0" mb="0" cb="0"/><line nr="43" mi="6" ci="0" mb="0" cb="0"/><line nr="44" mi="3" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="2" cb="0"/><line nr="47" mi="5" ci="0" mb="0" cb="0"/><line nr="50" mi="8" ci="0" mb="2" cb="0"/><line nr="51" mi="6" ci="0" mb="2" cb="0"/><line nr="52" mi="5" ci="0" mb="0" cb="0"/><line nr="53" mi="5" ci="0" mb="2" cb="0"/><line nr="55" mi="5" ci="0" mb="0" cb="0"/><line nr="56" mi="1" ci="0" mb="0" cb="0"/><line nr="57" mi="2" ci="0" mb="0" cb="0"/><line nr="58" mi="1" ci="0" mb="0" cb="0"/><line nr="63" mi="1" ci="0" mb="0" cb="0"/><line nr="66" mi="5" ci="0" mb="0" cb="0"/><line nr="67" mi="1" ci="0" mb="0" cb="0"/><line nr="70" mi="3" ci="0" mb="0" cb="0"/><line nr="74" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="4" ci="0" mb="0" cb="0"/><line nr="79" mi="4" ci="0" mb="0" cb="0"/><line nr="81" mi="4" ci="0" mb="0" cb="0"/><line nr="82" mi="7" ci="0" mb="0" cb="0"/><line nr="83" mi="4" ci="0" mb="0" cb="0"/><line nr="85" mi="4" ci="0" mb="0" cb="0"/><line nr="86" mi="8" ci="0" mb="0" cb="0"/><line nr="87" mi="4" ci="0" mb="0" cb="0"/><line nr="90" mi="4" ci="0" mb="0" cb="0"/><line nr="91" mi="11" ci="0" mb="2" cb="0"/><line nr="93" mi="4" ci="0" mb="0" cb="0"/><line nr="94" mi="7" ci="0" mb="0" cb="0"/><line nr="95" mi="4" ci="0" mb="0" cb="0"/><line nr="96" mi="1" ci="0" mb="0" cb="0"/><line nr="97" mi="4" ci="0" mb="0" cb="0"/><line nr="98" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="202" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="53" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="NoAlbumFoundException.java"><line nr="6" mi="3" ci="0" mb="0" cb="0"/><line nr="7" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="Album.java"><line nr="21" mi="2" ci="0" mb="0" cb="0"/><line nr="22" mi="3" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="25" mi="4" ci="0" mb="0" cb="0"/><line nr="27" mi="5" ci="0" mb="0" cb="0"/><line nr="28" mi="5" ci="0" mb="0" cb="0"/><line nr="29" mi="1" ci="0" mb="0" cb="0"/><line nr="30" mi="2" ci="0" mb="0" cb="0"/><line nr="31" mi="1" ci="0" mb="0" cb="0"/><line nr="32" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="1" ci="0" mb="0" cb="0"/><line nr="35" mi="2" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="37" mi="3" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="41" mi="5" ci="0" mb="0" cb="0"/><line nr="42" mi="5" ci="0" mb="0" cb="0"/><line nr="43" mi="1" ci="0" mb="0" cb="0"/><line nr="44" mi="2" ci="0" mb="0" cb="0"/><line nr="45" mi="1" ci="0" mb="0" cb="0"/><line nr="46" mi="5" ci="0" mb="0" cb="0"/><line nr="47" mi="1" ci="0" mb="0" cb="0"/><line nr="49" mi="2" ci="0" mb="0" cb="0"/><line nr="51" mi="8" ci="0" mb="0" cb="0"/><line nr="52" mi="9" ci="0" mb="0" cb="0"/><line nr="53" mi="2" ci="0" mb="0" cb="0"/><line nr="55" mi="7" ci="0" mb="0" cb="0"/><line nr="56" mi="1" ci="0" mb="0" cb="0"/><line nr="57" mi="3" ci="0" mb="0" cb="0"/><line nr="58" mi="1" ci="0" mb="0" cb="0"/><line nr="59" mi="5" ci="0" mb="4" cb="0"/><line nr="60" mi="4" ci="0" mb="0" cb="0"/><line nr="61" mi="4" ci="0" mb="0" cb="0"/><line nr="63" mi="5" ci="0" mb="0" cb="0"/><line nr="64" mi="10" ci="0" mb="0" cb="0"/><line nr="66" mi="6" ci="0" mb="0" cb="0"/><line nr="67" mi="3" ci="0" mb="0" cb="0"/><line nr="68" mi="3" ci="0" mb="2" cb="0"/><line nr="70" mi="5" ci="0" mb="0" cb="0"/><line nr="72" mi="8" ci="0" mb="2" cb="0"/><line nr="73" mi="6" ci="0" mb="2" cb="0"/><line nr="74" mi="5" ci="0" mb="0" cb="0"/><line nr="75" mi="5" ci="0" mb="2" cb="0"/><line nr="77" mi="5" ci="0" mb="0" cb="0"/><line nr="78" mi="1" ci="0" mb="0" cb="0"/><line nr="79" mi="2" ci="0" mb="0" cb="0"/><line nr="80" mi="1" ci="0" mb="0" cb="0"/><line nr="85" mi="1" ci="0" mb="0" cb="0"/><line nr="89" mi="5" ci="0" mb="0" cb="0"/><line nr="90" mi="1" ci="0" mb="0" cb="0"/><line nr="94" mi="3" ci="0" mb="0" cb="0"/><line nr="98" mi="3" ci="0" mb="0" cb="0"/><line nr="99" mi="2" ci="0" mb="0" cb="0"/><line nr="100" mi="2" ci="0" mb="0" cb="0"/><line nr="104" mi="3" ci="0" mb="0" cb="0"/><line nr="108" mi="3" ci="0" mb="0" cb="0"/><line nr="112" mi="4" ci="0" mb="0" cb="0"/><line nr="113" mi="4" ci="0" mb="0" cb="0"/><line nr="115" mi="4" ci="0" mb="0" cb="0"/><line nr="116" mi="7" ci="0" mb="0" cb="0"/><line nr="117" mi="4" ci="0" mb="0" cb="0"/><line nr="119" mi="4" ci="0" mb="0" cb="0"/><line nr="120" mi="7" ci="0" mb="0" cb="0"/><line nr="121" mi="4" ci="0" mb="0" cb="0"/><line nr="123" mi="4" ci="0" mb="0" cb="0"/><line nr="124" mi="9" ci="0" mb="0" cb="0"/><line nr="125" mi="4" ci="0" mb="0" cb="0"/><line nr="127" mi="4" ci="0" mb="0" cb="0"/><line nr="128" mi="8" ci="0" mb="0" cb="0"/><line nr="129" mi="4" ci="0" mb="0" cb="0"/><line nr="131" mi="4" ci="0" mb="0" cb="0"/><line nr="132" mi="5" ci="0" mb="0" cb="0"/><line nr="133" mi="9" ci="0" mb="0" cb="0"/><line nr="134" mi="4" ci="0" mb="0" cb="0"/><line nr="136" mi="4" ci="0" mb="0" cb="0"/><line nr="137" mi="11" ci="0" mb="2" cb="0"/><line nr="138" mi="4" ci="0" mb="0" cb="0"/><line nr="139" mi="7" ci="0" mb="0" cb="0"/><line nr="140" mi="4" ci="0" mb="0" cb="0"/><line nr="141" mi="1" ci="0" mb="0" cb="0"/><line nr="142" mi="4" ci="0" mb="0" cb="0"/><line nr="144" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="330" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="84" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="Language.java"><line nr="3" mi="3" ci="0" mb="0" cb="0"/><line nr="4" mi="35" ci="0" mb="0" cb="0"/><line nr="7" mi="4" ci="0" mb="0" cb="0"/><line nr="8" mi="3" ci="0" mb="0" cb="0"/><line nr="9" mi="1" ci="0" mb="0" cb="0"/><line nr="12" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="Genre.java"><line nr="3" mi="3" ci="0" mb="0" cb="0"/><line nr="4" mi="42" ci="0" mb="0" cb="0"/><line nr="7" mi="4" ci="0" mb="0" cb="0"/><line nr="8" mi="3" ci="0" mb="0" cb="0"/><line nr="9" mi="1" ci="0" mb="0" cb="0"/><line nr="12" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="56" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="NoPlayListFoundException.java"><line nr="6" mi="3" ci="0" mb="0" cb="0"/><line nr="7" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="AudioElement.java"><line nr="24" mi="2" ci="0" mb="0" cb="0"/><line nr="25" mi="3" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="4" ci="0" mb="0" cb="0"/><line nr="29" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="1" ci="0" mb="0" cb="0"/><line nr="32" mi="2" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="35" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="37" mi="3" ci="0" mb="0" cb="0"/><line nr="38" mi="1" ci="0" mb="0" cb="0"/><line nr="40" mi="2" ci="0" mb="0" cb="0"/><line nr="42" mi="8" ci="0" mb="0" cb="0"/><line nr="43" mi="8" ci="0" mb="0" cb="0"/><line nr="44" mi="9" ci="0" mb="0" cb="0"/><line nr="45" mi="8" ci="0" mb="0" cb="0"/><line nr="46" mi="2" ci="0" mb="0" cb="0"/><line nr="48" mi="7" ci="0" mb="0" cb="0"/><line nr="49" mi="1" ci="0" mb="0" cb="0"/><line nr="50" mi="3" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="52" mi="5" ci="0" mb="4" cb="0"/><line nr="53" mi="4" ci="0" mb="0" cb="0"/><line nr="54" mi="4" ci="0" mb="0" cb="0"/><line nr="56" mi="1" ci="0" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="63" mi="3" ci="0" mb="0" cb="0"/><line nr="67" mi="3" ci="0" mb="0" cb="0"/><line nr="71" mi="10" ci="0" mb="0" cb="0"/><line nr="75" mi="4" ci="0" mb="0" cb="0"/><line nr="76" mi="7" ci="0" mb="0" cb="0"/><line nr="77" mi="4" ci="0" mb="0" cb="0"/><line nr="79" mi="4" ci="0" mb="0" cb="0"/><line nr="80" mi="7" ci="0" mb="0" cb="0"/><line nr="81" mi="4" ci="0" mb="0" cb="0"/><line nr="83" mi="4" ci="0" mb="0" cb="0"/><line nr="84" mi="9" ci="0" mb="0" cb="0"/><line nr="85" mi="4" ci="0" mb="0" cb="0"/><line nr="87" mi="4" ci="0" mb="0" cb="0"/><line nr="88" mi="8" ci="0" mb="0" cb="0"/><line nr="89" mi="4" ci="0" mb="0" cb="0"/><line nr="91" mi="4" ci="0" mb="0" cb="0"/><line nr="92" mi="7" ci="0" mb="0" cb="0"/><line nr="93" mi="4" ci="0" mb="0" cb="0"/><line nr="95" mi="1" ci="0" mb="0" cb="0"/><line nr="99" mi="5" ci="0" mb="0" cb="0"/><line nr="101" mi="6" ci="0" mb="0" cb="0"/><line nr="102" mi="3" ci="0" mb="0" cb="0"/><line nr="103" mi="2" ci="0" mb="0" cb="0"/><line nr="104" mi="3" ci="0" mb="0" cb="0"/><line nr="106" mi="2" ci="0" mb="0" cb="0"/><line nr="108" mi="4" ci="0" mb="2" cb="0"/><line nr="109" mi="3" ci="0" mb="0" cb="0"/><line nr="110" mi="3" ci="0" mb="0" cb="0"/><line nr="111" mi="3" ci="0" mb="0" cb="0"/><line nr="112" mi="3" ci="0" mb="0" cb="0"/><line nr="114" mi="8" ci="0" mb="5" cb="0"/><line nr="115" mi="2" ci="0" mb="0" cb="0"/><line nr="116" mi="1" ci="0" mb="0" cb="0"/><line nr="117" mi="2" ci="0" mb="0" cb="0"/><line nr="118" mi="1" ci="0" mb="0" cb="0"/><line nr="119" mi="3" ci="0" mb="0" cb="0"/><line nr="120" mi="1" ci="0" mb="0" cb="0"/><line nr="121" mi="2" ci="0" mb="0" cb="0"/><line nr="122" mi="1" ci="0" mb="0" cb="0"/><line nr="123" mi="3" ci="0" mb="0" cb="0"/><line nr="125" mi="4" ci="0" mb="0" cb="0"/><line nr="128" mi="2" ci="0" mb="0" cb="0"/><line nr="130" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="266" covered="0"/><counter type="BRANCH" missed="11" covered="0"/><counter type="LINE" missed="72" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="NoElementFoundException.java"><line nr="6" mi="3" ci="0" mb="0" cb="0"/><line nr="7" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="PathValidation.java"><line nr="22" mi="0" ci="2" mb="0" cb="0"/><line nr="23" mi="0" ci="5" mb="0" cb="0"/><line nr="34" mi="0" ci="5" mb="0" cb="0"/><line nr="35" mi="0" ci="5" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="Category.java"><line nr="3" mi="3" ci="0" mb="0" cb="0"/><line nr="4" mi="35" ci="0" mb="0" cb="0"/><line nr="7" mi="4" ci="0" mb="0" cb="0"/><line nr="8" mi="3" ci="0" mb="0" cb="0"/><line nr="9" mi="1" ci="0" mb="0" cb="0"/><line nr="12" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="AudioBook.java"><line nr="11" mi="7" ci="0" mb="0" cb="0"/><line nr="12" mi="3" ci="0" mb="0" cb="0"/><line nr="13" mi="3" ci="0" mb="0" cb="0"/><line nr="14" mi="1" ci="0" mb="0" cb="0"/><line nr="17" mi="6" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="1" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><line nr="24" mi="8" ci="0" mb="0" cb="0"/><line nr="25" mi="8" ci="0" mb="0" cb="0"/><line nr="26" mi="1" ci="0" mb="0" cb="0"/><line nr="29" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="9" ci="0" mb="5" cb="0"/><line nr="34" mi="4" ci="0" mb="0" cb="0"/><line nr="35" mi="4" ci="0" mb="0" cb="0"/><line nr="36" mi="4" ci="0" mb="0" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="1" ci="0" mb="0" cb="0"/><line nr="43" mi="3" ci="0" mb="0" cb="0"/><line nr="47" mi="9" ci="0" mb="5" cb="0"/><line nr="48" mi="4" ci="0" mb="0" cb="0"/><line nr="49" mi="4" ci="0" mb="0" cb="0"/><line nr="50" mi="4" ci="0" mb="0" cb="0"/><line nr="51" mi="4" ci="0" mb="0" cb="0"/><line nr="52" mi="3" ci="0" mb="0" cb="0"/><line nr="54" mi="1" ci="0" mb="0" cb="0"/><line nr="58" mi="8" ci="0" mb="0" cb="0"/><line nr="64" mi="4" ci="0" mb="0" cb="0"/><line nr="66" mi="4" ci="0" mb="0" cb="0"/><line nr="68" mi="4" ci="0" mb="0" cb="0"/><line nr="69" mi="8" ci="0" mb="0" cb="0"/><line nr="70" mi="4" ci="0" mb="0" cb="0"/><line nr="72" mi="4" ci="0" mb="0" cb="0"/><line nr="73" mi="8" ci="0" mb="0" cb="0"/><line nr="74" mi="4" ci="0" mb="0" cb="0"/><line nr="76" mi="4" ci="0" mb="0" cb="0"/><line nr="77" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="164" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="39" covered="0"/><counter type="COMPLEXITY" missed="17" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="Song.java"><line nr="11" mi="7" ci="0" mb="0" cb="0"/><line nr="12" mi="3" ci="0" mb="0" cb="0"/><line nr="13" mi="1" ci="0" mb="0" cb="0"/><line nr="16" mi="6" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="1" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="8" ci="0" mb="0" cb="0"/><line nr="23" mi="1" ci="0" mb="0" cb="0"/><line nr="26" mi="4" ci="0" mb="0" cb="0"/><line nr="30" mi="9" ci="0" mb="6" cb="0"/><line nr="31" mi="4" ci="0" mb="0" cb="0"/><line nr="32" mi="4" ci="0" mb="0" cb="0"/><line nr="33" mi="4" ci="0" mb="0" cb="0"/><line nr="34" mi="4" ci="0" mb="0" cb="0"/><line nr="35" mi="4" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="38" mi="1" ci="0" mb="0" cb="0"/><line nr="41" mi="6" ci="0" mb="0" cb="0"/><line nr="46" mi="4" ci="0" mb="0" cb="0"/><line nr="48" mi="4" ci="0" mb="0" cb="0"/><line nr="50" mi="4" ci="0" mb="0" cb="0"/><line nr="51" mi="8" ci="0" mb="0" cb="0"/><line nr="52" mi="4" ci="0" mb="0" cb="0"/><line nr="54" mi="4" ci="0" mb="0" cb="0"/><line nr="55" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="105" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="12" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="2063" covered="17"/><counter type="BRANCH" missed="169" covered="0"/><counter type="LINE" missed="499" covered="4"/><counter type="COMPLEXITY" missed="172" covered="2"/><counter type="METHOD" missed="81" covered="2"/><counter type="CLASS" missed="15" covered="1"/></package><package name="musichub/main"><class name="musichub/main/Main" sourcefilename="Main.java"><method name="&lt;init&gt;" desc="()V" line="14"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="main" desc="([Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="548" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="185" covered="0"/><counter type="COMPLEXITY" missed="27" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="printAvailableCommands" desc="()V" line="252"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="588" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="199" covered="0"/><counter type="COMPLEXITY" missed="29" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="Main.java"><line nr="14" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="4" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="5" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="5" ci="0" mb="2" cb="0"/><line nr="29" mi="4" ci="0" mb="2" cb="0"/><line nr="30" mi="4" ci="0" mb="14" cb="0"/><line nr="32" mi="2" ci="0" mb="0" cb="0"/><line nr="34" mi="1" ci="0" mb="0" cb="0"/><line nr="35" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="1" ci="0" mb="0" cb="0"/><line nr="39" mi="4" ci="0" mb="0" cb="0"/><line nr="40" mi="1" ci="0" mb="0" cb="0"/><line nr="41" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="1" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="4" ci="0" mb="0" cb="0"/><line nr="48" mi="3" ci="0" mb="0" cb="0"/><line nr="50" mi="4" ci="0" mb="0" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="52" mi="1" ci="0" mb="0" cb="0"/><line nr="53" mi="5" ci="0" mb="0" cb="0"/><line nr="54" mi="1" ci="0" mb="0" cb="0"/><line nr="55" mi="1" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="57" mi="1" ci="0" mb="0" cb="0"/><line nr="60" mi="3" ci="0" mb="0" cb="0"/><line nr="61" mi="4" ci="0" mb="0" cb="0"/><line nr="63" mi="3" ci="0" mb="0" cb="0"/><line nr="65" mi="4" ci="0" mb="0" cb="0"/><line nr="66" mi="5" ci="0" mb="0" cb="0"/><line nr="67" mi="3" ci="0" mb="0" cb="0"/><line nr="68" mi="4" ci="0" mb="0" cb="0"/><line nr="69" mi="1" ci="0" mb="0" cb="0"/><line nr="70" mi="5" ci="0" mb="0" cb="0"/><line nr="71" mi="1" ci="0" mb="0" cb="0"/><line nr="72" mi="1" ci="0" mb="0" cb="0"/><line nr="73" mi="3" ci="0" mb="0" cb="0"/><line nr="74" mi="1" ci="0" mb="0" cb="0"/><line nr="77" mi="4" ci="0" mb="0" cb="0"/><line nr="78" mi="1" ci="0" mb="0" cb="0"/><line nr="79" mi="3" ci="0" mb="0" cb="0"/><line nr="80" mi="1" ci="0" mb="0" cb="0"/><line nr="83" mi="3" ci="0" mb="0" cb="0"/><line nr="84" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="86" mi="3" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><line nr="88" mi="3" ci="0" mb="0" cb="0"/><line nr="89" mi="3" ci="0" mb="0" cb="0"/><line nr="90" mi="3" ci="0" mb="0" cb="0"/><line nr="91" mi="4" ci="0" mb="0" cb="0"/><line nr="93" mi="3" ci="0" mb="0" cb="0"/><line nr="94" mi="3" ci="0" mb="0" cb="0"/><line nr="95" mi="3" ci="0" mb="2" cb="0"/><line nr="96" mi="3" ci="0" mb="0" cb="0"/><line nr="97" mi="3" ci="0" mb="0" cb="0"/><line nr="98" mi="1" ci="0" mb="0" cb="0"/><line nr="101" mi="9" ci="0" mb="0" cb="0"/><line nr="102" mi="3" ci="0" mb="0" cb="0"/><line nr="103" mi="3" ci="0" mb="0" cb="0"/><line nr="104" mi="3" ci="0" mb="0" cb="0"/><line nr="105" mi="10" ci="0" mb="2" cb="0"/><line nr="106" mi="3" ci="0" mb="0" cb="0"/><line nr="107" mi="1" ci="0" mb="0" cb="0"/><line nr="108" mi="3" ci="0" mb="0" cb="0"/><line nr="109" mi="1" ci="0" mb="0" cb="0"/><line nr="112" mi="3" ci="0" mb="0" cb="0"/><line nr="113" mi="3" ci="0" mb="0" cb="0"/><line nr="114" mi="3" ci="0" mb="0" cb="0"/><line nr="115" mi="3" ci="0" mb="0" cb="0"/><line nr="116" mi="3" ci="0" mb="0" cb="0"/><line nr="117" mi="3" ci="0" mb="0" cb="0"/><line nr="118" mi="4" ci="0" mb="0" cb="0"/><line nr="119" mi="3" ci="0" mb="0" cb="0"/><line nr="120" mi="3" ci="0" mb="0" cb="0"/><line nr="121" mi="8" ci="0" mb="0" cb="0"/><line nr="122" mi="3" ci="0" mb="0" cb="0"/><line nr="123" mi="3" ci="0" mb="0" cb="0"/><line nr="124" mi="3" ci="0" mb="0" cb="0"/><line nr="125" mi="10" ci="0" mb="2" cb="0"/><line nr="126" mi="3" ci="0" mb="0" cb="0"/><line nr="127" mi="1" ci="0" mb="0" cb="0"/><line nr="128" mi="3" ci="0" mb="0" cb="0"/><line nr="129" mi="1" ci="0" mb="0" cb="0"/><line nr="132" mi="3" ci="0" mb="0" cb="0"/><line nr="133" mi="3" ci="0" mb="0" cb="0"/><line nr="134" mi="3" ci="0" mb="0" cb="0"/><line nr="135" mi="3" ci="0" mb="2" cb="0"/><line nr="136" mi="4" ci="0" mb="0" cb="0"/><line nr="137" mi="7" ci="0" mb="2" cb="0"/><line nr="138" mi="1" ci="0" mb="0" cb="0"/><line nr="139" mi="3" ci="0" mb="0" cb="0"/><line nr="141" mi="3" ci="0" mb="0" cb="0"/><line nr="142" mi="3" ci="0" mb="0" cb="0"/><line nr="143" mi="3" ci="0" mb="2" cb="0"/><line nr="144" mi="4" ci="0" mb="0" cb="0"/><line nr="145" mi="4" ci="0" mb="0" cb="0"/><line nr="146" mi="1" ci="0" mb="0" cb="0"/><line nr="147" mi="3" ci="0" mb="0" cb="0"/><line nr="149" mi="4" ci="0" mb="0" cb="0"/><line nr="150" mi="1" ci="0" mb="0" cb="0"/><line nr="151" mi="4" ci="0" mb="0" cb="0"/><line nr="152" mi="1" ci="0" mb="0" cb="0"/><line nr="153" mi="3" ci="0" mb="0" cb="0"/><line nr="154" mi="1" ci="0" mb="0" cb="0"/><line nr="155" mi="3" ci="0" mb="0" cb="0"/><line nr="156" mi="1" ci="0" mb="0" cb="0"/><line nr="159" mi="3" ci="0" mb="0" cb="0"/><line nr="160" mi="3" ci="0" mb="0" cb="0"/><line nr="161" mi="3" ci="0" mb="0" cb="0"/><line nr="162" mi="3" ci="0" mb="0" cb="0"/><line nr="163" mi="3" ci="0" mb="0" cb="0"/><line nr="164" mi="3" ci="0" mb="0" cb="0"/><line nr="165" mi="3" ci="0" mb="0" cb="0"/><line nr="166" mi="3" ci="0" mb="0" cb="0"/><line nr="167" mi="4" ci="0" mb="0" cb="0"/><line nr="168" mi="3" ci="0" mb="0" cb="0"/><line nr="169" mi="3" ci="0" mb="0" cb="0"/><line nr="170" mi="3" ci="0" mb="0" cb="0"/><line nr="171" mi="3" ci="0" mb="0" cb="0"/><line nr="172" mi="10" ci="0" mb="0" cb="0"/><line nr="173" mi="3" ci="0" mb="0" cb="0"/><line nr="174" mi="3" ci="0" mb="0" cb="0"/><line nr="175" mi="3" ci="0" mb="0" cb="0"/><line nr="176" mi="10" ci="0" mb="2" cb="0"/><line nr="177" mi="1" ci="0" mb="0" cb="0"/><line nr="178" mi="3" ci="0" mb="0" cb="0"/><line nr="179" mi="1" ci="0" mb="0" cb="0"/><line nr="182" mi="3" ci="0" mb="0" cb="0"/><line nr="183" mi="3" ci="0" mb="0" cb="0"/><line nr="184" mi="3" ci="0" mb="0" cb="0"/><line nr="185" mi="3" ci="0" mb="2" cb="0"/><line nr="186" mi="4" ci="0" mb="0" cb="0"/><line nr="187" mi="4" ci="0" mb="0" cb="0"/><line nr="188" mi="1" ci="0" mb="0" cb="0"/><line nr="189" mi="3" ci="0" mb="0" cb="0"/><line nr="190" mi="3" ci="0" mb="0" cb="0"/><line nr="191" mi="5" ci="0" mb="0" cb="0"/><line nr="192" mi="3" ci="0" mb="0" cb="0"/><line nr="193" mi="3" ci="0" mb="0" cb="0"/><line nr="195" mi="3" ci="0" mb="0" cb="0"/><line nr="196" mi="3" ci="0" mb="2" cb="0"/><line nr="197" mi="4" ci="0" mb="0" cb="0"/><line nr="198" mi="4" ci="0" mb="0" cb="0"/><line nr="199" mi="1" ci="0" mb="0" cb="0"/><line nr="200" mi="5" ci="0" mb="2" cb="0"/><line nr="201" mi="3" ci="0" mb="0" cb="0"/><line nr="202" mi="3" ci="0" mb="0" cb="0"/><line nr="204" mi="4" ci="0" mb="0" cb="0"/><line nr="205" mi="1" ci="0" mb="0" cb="0"/><line nr="206" mi="4" ci="0" mb="0" cb="0"/><line nr="207" mi="1" ci="0" mb="0" cb="0"/><line nr="209" mi="3" ci="0" mb="0" cb="0"/><line nr="210" mi="3" ci="0" mb="0" cb="0"/><line nr="211" mi="1" ci="0" mb="0" cb="0"/><line nr="212" mi="3" ci="0" mb="0" cb="0"/><line nr="213" mi="1" ci="0" mb="0" cb="0"/><line nr="214" mi="3" ci="0" mb="0" cb="0"/><line nr="215" mi="1" ci="0" mb="0" cb="0"/><line nr="218" mi="3" ci="0" mb="0" cb="0"/><line nr="219" mi="3" ci="0" mb="0" cb="0"/><line nr="220" mi="3" ci="0" mb="2" cb="0"/><line nr="221" mi="4" ci="0" mb="0" cb="0"/><line nr="222" mi="4" ci="0" mb="0" cb="0"/><line nr="223" mi="1" ci="0" mb="0" cb="0"/><line nr="224" mi="3" ci="0" mb="0" cb="0"/><line nr="226" mi="3" ci="0" mb="0" cb="0"/><line nr="227" mi="1" ci="0" mb="0" cb="0"/><line nr="228" mi="4" ci="0" mb="0" cb="0"/><line nr="229" mi="1" ci="0" mb="0" cb="0"/><line nr="230" mi="3" ci="0" mb="0" cb="0"/><line nr="231" mi="1" ci="0" mb="0" cb="0"/><line nr="232" mi="3" ci="0" mb="0" cb="0"/><line nr="233" mi="1" ci="0" mb="0" cb="0"/><line nr="236" mi="2" ci="0" mb="0" cb="0"/><line nr="237" mi="2" ci="0" mb="0" cb="0"/><line nr="238" mi="2" ci="0" mb="0" cb="0"/><line nr="239" mi="3" ci="0" mb="0" cb="0"/><line nr="240" mi="1" ci="0" mb="0" cb="0"/><line nr="241" mi="3" ci="0" mb="0" cb="0"/><line nr="242" mi="1" ci="0" mb="0" cb="0"/><line nr="245" mi="1" ci="0" mb="0" cb="0"/><line nr="248" mi="2" ci="0" mb="0" cb="0"/><line nr="249" mi="1" ci="0" mb="0" cb="0"/><line nr="252" mi="3" ci="0" mb="0" cb="0"/><line nr="253" mi="3" ci="0" mb="0" cb="0"/><line nr="254" mi="3" ci="0" mb="0" cb="0"/><line nr="255" mi="3" ci="0" mb="0" cb="0"/><line nr="256" mi="3" ci="0" mb="0" cb="0"/><line nr="257" mi="3" ci="0" mb="0" cb="0"/><line nr="258" mi="3" ci="0" mb="0" cb="0"/><line nr="259" mi="3" ci="0" mb="0" cb="0"/><line nr="260" mi="3" ci="0" mb="0" cb="0"/><line nr="261" mi="3" ci="0" mb="0" cb="0"/><line nr="262" mi="3" ci="0" mb="0" cb="0"/><line nr="263" mi="3" ci="0" mb="0" cb="0"/><line nr="264" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="588" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="199" covered="0"/><counter type="COMPLEXITY" missed="29" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="588" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="199" covered="0"/><counter type="COMPLEXITY" missed="29" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><counter type="INSTRUCTION" missed="2723" covered="17"/><counter type="BRANCH" missed="209" covered="0"/><counter type="LINE" missed="723" covered="4"/><counter type="COMPLEXITY" missed="205" covered="2"/><counter type="METHOD" missed="88" covered="2"/><counter type="CLASS" missed="17" covered="1"/></report> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Album.html b/target/site/jacoco/musichub.business/Album.html
new file mode 100644
index 0000000..24287ce
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Album.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Album</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">Album</span></div><h1>Album</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">330 of 330</td><td class="ctr2">0 %</td><td class="bar">14 of 14</td><td class="ctr2">0 %</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">84</td><td class="ctr2">84</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a4"><a href="Album.java.html#L112" class="el_method">createXMLElement(Document, Element)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="129" alt="129"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">26</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="Album.java.html#L49" class="el_method">Album(Element)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="104" height="10" title="112" alt="112"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h1">26</td><td class="ctr2" id="i1">26</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="Album.java.html#L35" class="el_method">Album(String, String, int, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="34" alt="34"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">12</td><td class="ctr2" id="i2">12</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="Album.java.html#L21" class="el_method">Album(String, String, int, String, String, ArrayList)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="33" alt="33"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">12</td><td class="ctr2" id="i3">12</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="Album.java.html#L98" class="el_method">getSongsRandomly()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="Album.java.html#L89" class="el_method">addSong(UUID)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="Album.java.html#L94" class="el_method">getSongs()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a8"><a href="Album.java.html#L104" class="el_method">getTitle()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0 %</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="Album.java.html#L108" class="el_method">getDate()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0 %</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Album.java.html b/target/site/jacoco/musichub.business/Album.java.html
new file mode 100644
index 0000000..107bbe9
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Album.java.html
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Album.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">Album.java</span></div><h1>Album.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+public class Album {
+ private final String title;
+ private final int lengthInSeconds;
+ private final UUID uuid;
+ private String artist;
+ private Date date;
+ private ArrayList&lt;UUID&gt; songsUIDs;
+
+<span class="nc" id="L21"> public Album(String title, String artist, int lengthInSeconds, String id, String date, ArrayList&lt;UUID&gt; songsUIDs) {</span>
+<span class="nc" id="L22"> this.title = title;</span>
+<span class="nc" id="L23"> this.artist = artist;</span>
+<span class="nc" id="L24"> this.lengthInSeconds = lengthInSeconds;</span>
+<span class="nc" id="L25"> this.uuid = UUID.fromString(id);</span>
+ try {
+<span class="nc" id="L27"> SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);</span>
+<span class="nc" id="L28"> this.date = sdf.parse(date);</span>
+<span class="nc" id="L29"> } catch (ParseException ex) {</span>
+<span class="nc" id="L30"> ex.printStackTrace();</span>
+<span class="nc" id="L31"> }</span>
+<span class="nc" id="L32"> this.songsUIDs = songsUIDs;</span>
+<span class="nc" id="L33"> }</span>
+
+<span class="nc" id="L35"> public Album(String title, String artist, int lengthInSeconds, String date) {</span>
+<span class="nc" id="L36"> this.title = title;</span>
+<span class="nc" id="L37"> this.artist = artist;</span>
+<span class="nc" id="L38"> this.lengthInSeconds = lengthInSeconds;</span>
+<span class="nc" id="L39"> this.uuid = UUID.randomUUID();</span>
+ try {
+<span class="nc" id="L41"> SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);</span>
+<span class="nc" id="L42"> this.date = sdf.parse(date);</span>
+<span class="nc" id="L43"> } catch (ParseException ex) {</span>
+<span class="nc" id="L44"> ex.printStackTrace();</span>
+<span class="nc" id="L45"> }</span>
+<span class="nc" id="L46"> this.songsUIDs = new ArrayList&lt;&gt;();</span>
+<span class="nc" id="L47"> }</span>
+
+<span class="nc" id="L49"> public Album(Element xmlElement) throws Exception {</span>
+ {
+<span class="nc" id="L51"> this.title = xmlElement.getElementsByTagName(&quot;title&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L52"> this.lengthInSeconds = Integer.parseInt(xmlElement.getElementsByTagName(&quot;lengthInSeconds&quot;).item(0).getTextContent());</span>
+<span class="nc" id="L53"> String uuid = null;</span>
+ try {
+<span class="nc" id="L55"> uuid = xmlElement.getElementsByTagName(&quot;UUID&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L56"> } catch (Exception ex) {</span>
+<span class="nc" id="L57"> System.out.println(&quot;Empty album UUID, will create a new one&quot;);</span>
+<span class="nc" id="L58"> }</span>
+<span class="nc bnc" id="L59" title="All 4 branches missed."> if ((uuid == null) || (uuid.isEmpty()))</span>
+<span class="nc" id="L60"> this.uuid = UUID.randomUUID();</span>
+<span class="nc" id="L61"> else this.uuid = UUID.fromString(uuid);</span>
+
+<span class="nc" id="L63"> SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);</span>
+<span class="nc" id="L64"> this.date = sdf.parse(xmlElement.getElementsByTagName(&quot;date&quot;).item(0).getTextContent());</span>
+ //parse list of songs:
+<span class="nc" id="L66"> Node songsElement = xmlElement.getElementsByTagName(&quot;songs&quot;).item(0);</span>
+<span class="nc" id="L67"> NodeList songUUIDNodes = songsElement.getChildNodes();</span>
+<span class="nc bnc" id="L68" title="All 2 branches missed."> if (songUUIDNodes == null) return;</span>
+
+<span class="nc" id="L70"> this.songsUIDs = new ArrayList&lt;&gt;();</span>
+
+<span class="nc bnc" id="L72" title="All 2 branches missed."> for (int i = 0; i &lt; songUUIDNodes.getLength(); i++) {</span>
+<span class="nc bnc" id="L73" title="All 2 branches missed."> if (songUUIDNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {</span>
+<span class="nc" id="L74"> Element songElement = (Element) songUUIDNodes.item(i);</span>
+<span class="nc bnc" id="L75" title="All 2 branches missed."> if (songElement.getNodeName().equals(&quot;UUID&quot;)) {</span>
+ try {
+<span class="nc" id="L77"> this.addSong(UUID.fromString(songElement.getTextContent()));</span>
+<span class="nc" id="L78"> } catch (Exception ex) {</span>
+<span class="nc" id="L79"> ex.printStackTrace();</span>
+<span class="nc" id="L80"> }</span>
+ }
+ }
+ }
+ }
+<span class="nc" id="L85"> }</span>
+
+
+ public void addSong(UUID song) {
+<span class="nc" id="L89"> songsUIDs.add(song);</span>
+<span class="nc" id="L90"> }</span>
+
+
+ public List&lt;UUID&gt; getSongs() {
+<span class="nc" id="L94"> return songsUIDs;</span>
+ }
+
+ public ArrayList&lt;UUID&gt; getSongsRandomly() {
+<span class="nc" id="L98"> ArrayList&lt;UUID&gt; shuffledSongs = songsUIDs;</span>
+<span class="nc" id="L99"> Collections.shuffle(shuffledSongs);</span>
+<span class="nc" id="L100"> return shuffledSongs;</span>
+ }
+
+ public String getTitle() {
+<span class="nc" id="L104"> return title;</span>
+ }
+
+ public Date getDate() {
+<span class="nc" id="L108"> return date;</span>
+ }
+
+ public void createXMLElement(Document document, Element parentElement) {
+<span class="nc" id="L112"> Element albumElement = document.createElement(&quot;album&quot;);</span>
+<span class="nc" id="L113"> parentElement.appendChild(albumElement);</span>
+
+<span class="nc" id="L115"> Element nameElement = document.createElement(&quot;title&quot;);</span>
+<span class="nc" id="L116"> nameElement.appendChild(document.createTextNode(title));</span>
+<span class="nc" id="L117"> albumElement.appendChild(nameElement);</span>
+
+<span class="nc" id="L119"> Element artistElement = document.createElement(&quot;artist&quot;);</span>
+<span class="nc" id="L120"> artistElement.appendChild(document.createTextNode(artist));</span>
+<span class="nc" id="L121"> albumElement.appendChild(artistElement);</span>
+
+<span class="nc" id="L123"> Element lengthElement = document.createElement(&quot;lengthInSeconds&quot;);</span>
+<span class="nc" id="L124"> lengthElement.appendChild(document.createTextNode(Integer.valueOf(lengthInSeconds).toString()));</span>
+<span class="nc" id="L125"> albumElement.appendChild(lengthElement);</span>
+
+<span class="nc" id="L127"> Element UUIDElement = document.createElement(&quot;UUID&quot;);</span>
+<span class="nc" id="L128"> UUIDElement.appendChild(document.createTextNode(uuid.toString()));</span>
+<span class="nc" id="L129"> albumElement.appendChild(UUIDElement);</span>
+
+<span class="nc" id="L131"> Element dateElement = document.createElement(&quot;date&quot;);</span>
+<span class="nc" id="L132"> SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);</span>
+<span class="nc" id="L133"> dateElement.appendChild(document.createTextNode(sdf.format(date)));</span>
+<span class="nc" id="L134"> albumElement.appendChild(dateElement);</span>
+
+<span class="nc" id="L136"> Element songsElement = document.createElement(&quot;songs&quot;);</span>
+<span class="nc bnc" id="L137" title="All 2 branches missed."> for (UUID currentUUID : this.songsUIDs) {</span>
+<span class="nc" id="L138"> Element songUUIDElement = document.createElement(&quot;UUID&quot;);</span>
+<span class="nc" id="L139"> songUUIDElement.appendChild(document.createTextNode(currentUUID.toString()));</span>
+<span class="nc" id="L140"> songsElement.appendChild(songUUIDElement);</span>
+<span class="nc" id="L141"> }</span>
+<span class="nc" id="L142"> albumElement.appendChild(songsElement);</span>
+
+<span class="nc" id="L144"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/AudioBook.html b/target/site/jacoco/musichub.business/AudioBook.html
new file mode 100644
index 0000000..aec1e56
--- /dev/null
+++ b/target/site/jacoco/musichub.business/AudioBook.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AudioBook</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">AudioBook</span></div><h1>AudioBook</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">164 of 164</td><td class="ctr2">0 %</td><td class="bar">10 of 10</td><td class="ctr2">0 %</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">39</td><td class="ctr2">39</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a3"><a href="AudioBook.java.html#L64" class="el_method">createXMLElement(Document, Element)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="45" alt="45"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h0">10</td><td class="ctr2" id="i0">10</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="AudioBook.java.html#L33" class="el_method">setLanguage(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="77" height="10" title="29" alt="29"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="AudioBook.java.html#L47" class="el_method">setCategory(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="77" height="10" title="29" alt="29"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="AudioBook.java.html#L23" class="el_method">AudioBook(Element)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="20" alt="20"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="AudioBook.java.html#L11" class="el_method">AudioBook(String, String, int, String, String, String, String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="37" height="10" title="14" alt="14"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="AudioBook.java.html#L17" class="el_method">AudioBook(String, String, int, String, String, String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="13" alt="13"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">4</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a8"><a href="AudioBook.java.html#L58" class="el_method">toString()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="8" alt="8"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="AudioBook.java.html#L29" class="el_method">getLanguage()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0 %</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a4"><a href="AudioBook.java.html#L43" class="el_method">getCategory()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0 %</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/AudioBook.java.html b/target/site/jacoco/musichub.business/AudioBook.java.html
new file mode 100644
index 0000000..33a7924
--- /dev/null
+++ b/target/site/jacoco/musichub.business/AudioBook.java.html
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AudioBook.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">AudioBook.java</span></div><h1>AudioBook.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class AudioBook extends AudioElement {
+ private Language language;
+ private Category category;
+
+ public AudioBook(String title, String artist, int lengthInSeconds, String uid, String content, String language, String category) {
+<span class="nc" id="L11"> super(title, artist, lengthInSeconds, uid, content);</span>
+<span class="nc" id="L12"> this.setLanguage(language);</span>
+<span class="nc" id="L13"> this.setCategory(category);</span>
+<span class="nc" id="L14"> }</span>
+
+ public AudioBook(String title, String artist, int lengthInSeconds, String content, String language, String category) {
+<span class="nc" id="L17"> super(title, artist, lengthInSeconds, content);</span>
+<span class="nc" id="L18"> this.setLanguage(language);</span>
+<span class="nc" id="L19"> this.setCategory(category);</span>
+<span class="nc" id="L20"> }</span>
+
+ public AudioBook(Element xmlElement) {
+<span class="nc" id="L23"> super(xmlElement);</span>
+<span class="nc" id="L24"> this.setLanguage(xmlElement.getElementsByTagName(&quot;language&quot;).item(0).getTextContent());</span>
+<span class="nc" id="L25"> this.setCategory(xmlElement.getElementsByTagName(&quot;category&quot;).item(0).getTextContent());</span>
+<span class="nc" id="L26"> }</span>
+
+ public Language getLanguage() {
+<span class="nc" id="L29"> return this.language;</span>
+ }
+
+ public void setLanguage(String language) {
+<span class="nc bnc" id="L33" title="All 5 branches missed."> switch (language.toLowerCase()) {</span>
+<span class="nc" id="L34"> default -&gt; this.language = Language.ENGLISH;</span>
+<span class="nc" id="L35"> case &quot;french&quot; -&gt; this.language = Language.FRENCH;</span>
+<span class="nc" id="L36"> case &quot;german&quot; -&gt; this.language = Language.GERMAN;</span>
+<span class="nc" id="L37"> case &quot;spanish&quot; -&gt; this.language = Language.SPANISH;</span>
+<span class="nc" id="L38"> case &quot;italian&quot; -&gt; this.language = Language.ITALIAN;</span>
+ }
+<span class="nc" id="L40"> }</span>
+
+ public Category getCategory() {
+<span class="nc" id="L43"> return this.category;</span>
+ }
+
+ public void setCategory(String category) {
+<span class="nc bnc" id="L47" title="All 5 branches missed."> switch (category.toLowerCase()) {</span>
+<span class="nc" id="L48"> default -&gt; this.category = Category.YOUTH;</span>
+<span class="nc" id="L49"> case &quot;novel&quot; -&gt; this.category = Category.NOVEL;</span>
+<span class="nc" id="L50"> case &quot;theater&quot; -&gt; this.category = Category.THEATER;</span>
+<span class="nc" id="L51"> case &quot;documentary&quot; -&gt; this.category = Category.DOCUMENTARY;</span>
+<span class="nc" id="L52"> case &quot;speech&quot; -&gt; this.category = Category.SPEECH;</span>
+ }
+<span class="nc" id="L54"> }</span>
+
+
+ public String toString() {
+<span class="nc" id="L58"> return super.toString() + &quot;, Language = &quot; + getLanguage() + &quot;, Category = &quot; + getCategory() + &quot;\n&quot;;</span>
+ }
+
+
+ public void createXMLElement(Document document, Element parentElement) {
+ // audiobook element
+<span class="nc" id="L64"> Element audioBook = document.createElement(&quot;audiobook&quot;);</span>
+
+<span class="nc" id="L66"> super.createXMLElement(document, audioBook);</span>
+
+<span class="nc" id="L68"> Element languageElement = document.createElement(&quot;language&quot;);</span>
+<span class="nc" id="L69"> languageElement.appendChild(document.createTextNode(language.getLanguage()));</span>
+<span class="nc" id="L70"> audioBook.appendChild(languageElement);</span>
+
+<span class="nc" id="L72"> Element categoryElement = document.createElement(&quot;category&quot;);</span>
+<span class="nc" id="L73"> categoryElement.appendChild(document.createTextNode(category.getCategory()));</span>
+<span class="nc" id="L74"> audioBook.appendChild(categoryElement);</span>
+
+<span class="nc" id="L76"> parentElement.appendChild(audioBook);</span>
+<span class="nc" id="L77"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/AudioElement.html b/target/site/jacoco/musichub.business/AudioElement.html
new file mode 100644
index 0000000..7a6e499
--- /dev/null
+++ b/target/site/jacoco/musichub.business/AudioElement.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AudioElement</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">AudioElement</span></div><h1>AudioElement</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">266 of 266</td><td class="ctr2">0 %</td><td class="bar">11 of 11</td><td class="ctr2">0 %</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">72</td><td class="ctr2">72</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a3"><a href="AudioElement.java.html#L75" class="el_method">createXMLElement(Document, Element)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">16</td><td class="ctr2" id="i1">16</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="AudioElement.java.html#L99" class="el_method">manageAudioElement()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="103" height="10" title="68" alt="68"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="7" alt="7"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">24</td><td class="ctr2" id="i0">24</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="AudioElement.java.html#L40" class="el_method">AudioElement(Element)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="95" height="10" title="63" alt="63"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h2">14</td><td class="ctr2" id="i2">14</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="AudioElement.java.html#L24" class="el_method">AudioElement(String, String, int, String, String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="28" height="10" title="19" alt="19"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="AudioElement.java.html#L32" class="el_method">AudioElement(String, String, int, String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="18" alt="18"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">7</td><td class="ctr2" id="i4">7</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="AudioElement.java.html#L71" class="el_method">toString()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="10" alt="10"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="AudioElement.java.html#L59" class="el_method">getUUID()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a4"><a href="AudioElement.java.html#L63" class="el_method">getArtist()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0 %</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="AudioElement.java.html#L67" class="el_method">getTitle()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0 %</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/AudioElement.java.html b/target/site/jacoco/musichub.business/AudioElement.java.html
new file mode 100644
index 0000000..4401836
--- /dev/null
+++ b/target/site/jacoco/musichub.business/AudioElement.java.html
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AudioElement.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">AudioElement.java</span></div><h1>AudioElement.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Scanner;
+import java.util.UUID;
+
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.Clip;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.UnsupportedAudioFileException;
+
+public abstract class AudioElement {
+ protected String title;
+ protected String artist;
+ protected int lengthInSeconds;
+ protected UUID uuid;
+ protected String content;
+
+<span class="nc" id="L24"> public AudioElement(String title, String artist, int lengthInSeconds, String id, String content) {</span>
+<span class="nc" id="L25"> this.title = title;</span>
+<span class="nc" id="L26"> this.artist = artist;</span>
+<span class="nc" id="L27"> this.lengthInSeconds = lengthInSeconds;</span>
+<span class="nc" id="L28"> this.uuid = UUID.fromString(id);</span>
+<span class="nc" id="L29"> this.content = content;</span>
+<span class="nc" id="L30"> }</span>
+
+<span class="nc" id="L32"> public AudioElement(String title, String artist, int lengthInSeconds, String content) {</span>
+<span class="nc" id="L33"> this.title = title;</span>
+<span class="nc" id="L34"> this.artist = artist;</span>
+<span class="nc" id="L35"> this.lengthInSeconds = lengthInSeconds;</span>
+<span class="nc" id="L36"> this.content = content;</span>
+<span class="nc" id="L37"> this.uuid = UUID.randomUUID();</span>
+<span class="nc" id="L38"> }</span>
+
+<span class="nc" id="L40"> public AudioElement(Element xmlElement) {</span>
+ {
+<span class="nc" id="L42"> title = xmlElement.getElementsByTagName(&quot;title&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L43"> artist = xmlElement.getElementsByTagName(&quot;artist&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L44"> lengthInSeconds = Integer.parseInt(xmlElement.getElementsByTagName(&quot;length&quot;).item(0).getTextContent());</span>
+<span class="nc" id="L45"> content = xmlElement.getElementsByTagName(&quot;content&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L46"> String uuid = null;</span>
+ try {
+<span class="nc" id="L48"> uuid = xmlElement.getElementsByTagName(&quot;UUID&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L49"> } catch (Exception ex) {</span>
+<span class="nc" id="L50"> System.out.println(&quot;Empty element UUID, will create a new one&quot;);</span>
+<span class="nc" id="L51"> }</span>
+<span class="nc bnc" id="L52" title="All 4 branches missed."> if ((uuid == null) || (uuid.isEmpty()))</span>
+<span class="nc" id="L53"> this.uuid = UUID.randomUUID();</span>
+<span class="nc" id="L54"> else this.uuid = UUID.fromString(uuid);</span>
+ }
+<span class="nc" id="L56"> }</span>
+
+ public UUID getUUID() {
+<span class="nc" id="L59"> return this.uuid;</span>
+ }
+
+ public String getArtist() {
+<span class="nc" id="L63"> return this.artist;</span>
+ }
+
+ public String getTitle() {
+<span class="nc" id="L67"> return this.title;</span>
+ }
+
+ public String toString() {
+<span class="nc" id="L71"> return &quot;Title = &quot; + this.title + &quot;, Artist = &quot; + this.artist + &quot;, Length = &quot; + this.lengthInSeconds + &quot;, Content = &quot; + this.content;</span>
+ }
+
+ public void createXMLElement(Document document, Element parentElement) {
+<span class="nc" id="L75"> Element nameElement = document.createElement(&quot;title&quot;);</span>
+<span class="nc" id="L76"> nameElement.appendChild(document.createTextNode(title));</span>
+<span class="nc" id="L77"> parentElement.appendChild(nameElement);</span>
+
+<span class="nc" id="L79"> Element artistElement = document.createElement(&quot;artist&quot;);</span>
+<span class="nc" id="L80"> artistElement.appendChild(document.createTextNode(artist));</span>
+<span class="nc" id="L81"> parentElement.appendChild(artistElement);</span>
+
+<span class="nc" id="L83"> Element lengthElement = document.createElement(&quot;length&quot;);</span>
+<span class="nc" id="L84"> lengthElement.appendChild(document.createTextNode(Integer.valueOf(lengthInSeconds).toString()));</span>
+<span class="nc" id="L85"> parentElement.appendChild(lengthElement);</span>
+
+<span class="nc" id="L87"> Element UUIDElement = document.createElement(&quot;UUID&quot;);</span>
+<span class="nc" id="L88"> UUIDElement.appendChild(document.createTextNode(uuid.toString()));</span>
+<span class="nc" id="L89"> parentElement.appendChild(UUIDElement);</span>
+
+<span class="nc" id="L91"> Element contentElement = document.createElement(&quot;content&quot;);</span>
+<span class="nc" id="L92"> contentElement.appendChild(document.createTextNode(content));</span>
+<span class="nc" id="L93"> parentElement.appendChild(contentElement);</span>
+
+<span class="nc" id="L95"> }</span>
+
+ public void manageAudioElement() throws UnsupportedAudioFileException, IOException, LineUnavailableException {
+
+<span class="nc" id="L99"> Scanner scanner = new Scanner(System.in); </span>
+
+<span class="nc" id="L101"> File file = new File(this.content);</span>
+<span class="nc" id="L102"> AudioInputStream audioStream = AudioSystem.getAudioInputStream(file);</span>
+<span class="nc" id="L103"> Clip clip = AudioSystem.getClip();</span>
+<span class="nc" id="L104"> clip.open(audioStream);</span>
+
+<span class="nc" id="L106"> String action = &quot;&quot;;</span>
+
+<span class="nc bnc" id="L108" title="All 2 branches missed."> while(!action.equals(&quot;Q&quot;)) {</span>
+<span class="nc" id="L109"> System.out.println(&quot;P = Play \b S = Stop \b R = Reset \b Q = Quit&quot;);</span>
+<span class="nc" id="L110"> System.out.println(&quot;Enter your choice&quot;);</span>
+<span class="nc" id="L111"> action = scanner.next();</span>
+<span class="nc" id="L112"> action = action.toUpperCase();</span>
+
+<span class="nc bnc" id="L114" title="All 5 branches missed."> switch(action) {</span>
+<span class="nc" id="L115"> case &quot;S&quot; : clip.stop();</span>
+<span class="nc" id="L116"> break;</span>
+<span class="nc" id="L117"> case &quot;P&quot; : clip.start();</span>
+<span class="nc" id="L118"> break;</span>
+<span class="nc" id="L119"> case &quot;R&quot; : clip.setMicrosecondPosition(0);</span>
+<span class="nc" id="L120"> break;</span>
+<span class="nc" id="L121"> case &quot;Q&quot; : clip.stop();</span>
+<span class="nc" id="L122"> break;</span>
+<span class="nc" id="L123"> default : System.out.println(&quot;try again&quot;);</span>
+ }
+<span class="nc" id="L125"> System.out.println(&quot;You stoped the Audio element&quot;);</span>
+ }
+
+<span class="nc" id="L128"> clip.close();</span>
+
+<span class="nc" id="L130"> }</span>
+
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Category.html b/target/site/jacoco/musichub.business/Category.html
new file mode 100644
index 0000000..d7e4df0
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Category.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Category</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">Category</span></div><h1>Category</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">49 of 49</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="Category.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="Category.java.html#L7" class="el_method">Category(String, int, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="Category.java.html#L12" class="el_method">getCategory()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Category.java.html b/target/site/jacoco/musichub.business/Category.java.html
new file mode 100644
index 0000000..cdef51f
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Category.java.html
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Category.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">Category.java</span></div><h1>Category.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+<span class="nc" id="L3">public enum Category {</span>
+<span class="nc" id="L4"> YOUTH(&quot;youth&quot;), NOVEL(&quot;novel&quot;), THEATER(&quot;theater&quot;), DOCUMENTARY(&quot;documentary&quot;), SPEECH(&quot;speech&quot;);</span>
+ private final String category;
+
+<span class="nc" id="L7"> Category(String category) {</span>
+<span class="nc" id="L8"> this.category = category;</span>
+<span class="nc" id="L9"> }</span>
+
+ public String getCategory() {
+<span class="nc" id="L12"> return category;</span>
+ }
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Genre.html b/target/site/jacoco/musichub.business/Genre.html
new file mode 100644
index 0000000..88e0ecd
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Genre.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Genre</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">Genre</span></div><h1>Genre</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">56 of 56</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="Genre.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="45" alt="45"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="Genre.java.html#L7" class="el_method">Genre(String, int, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="Genre.java.html#L12" class="el_method">getGenre()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Genre.java.html b/target/site/jacoco/musichub.business/Genre.java.html
new file mode 100644
index 0000000..021bb4b
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Genre.java.html
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Genre.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">Genre.java</span></div><h1>Genre.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+<span class="nc" id="L3">public enum Genre {</span>
+<span class="nc" id="L4"> JAZZ(&quot;jazz&quot;), CLASSIC(&quot;classic&quot;), HIPHOP(&quot;hiphop&quot;), ROCK(&quot;rock&quot;), POP(&quot;pop&quot;), RAP(&quot;rap&quot;);</span>
+ private final String genre;
+
+<span class="nc" id="L7"> Genre(String genre) {</span>
+<span class="nc" id="L8"> this.genre = genre;</span>
+<span class="nc" id="L9"> }</span>
+
+ public String getGenre() {
+<span class="nc" id="L12"> return genre;</span>
+ }
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Language.html b/target/site/jacoco/musichub.business/Language.html
new file mode 100644
index 0000000..604af85
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Language.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Language</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">Language</span></div><h1>Language</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">49 of 49</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="Language.java.html#L3" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="Language.java.html#L7" class="el_method">Language(String, int, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="Language.java.html#L12" class="el_method">getLanguage()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Language.java.html b/target/site/jacoco/musichub.business/Language.java.html
new file mode 100644
index 0000000..f974811
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Language.java.html
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Language.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">Language.java</span></div><h1>Language.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+<span class="nc" id="L3">public enum Language {</span>
+<span class="nc" id="L4"> FRENCH(&quot;french&quot;), ENGLISH(&quot;english&quot;), ITALIAN(&quot;italian&quot;), SPANISH(&quot;spanish&quot;), GERMAN(&quot;german&quot;);</span>
+ private final String language;
+
+<span class="nc" id="L7"> Language(String language) {</span>
+<span class="nc" id="L8"> this.language = language;</span>
+<span class="nc" id="L9"> }</span>
+
+ public String getLanguage() {
+<span class="nc" id="L12"> return language;</span>
+ }
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/MusicHub.html b/target/site/jacoco/musichub.business/MusicHub.html
new file mode 100644
index 0000000..6bedc98
--- /dev/null
+++ b/target/site/jacoco/musichub.business/MusicHub.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>MusicHub</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">MusicHub</span></div><h1>MusicHub</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">803 of 803</td><td class="ctr2">0 %</td><td class="bar">114 of 114</td><td class="ctr2">0 %</td><td class="ctr1">79</td><td class="ctr2">79</td><td class="ctr1">195</td><td class="ctr2">195</td><td class="ctr1">22</td><td class="ctr2">22</td></tr></tfoot><tbody><tr><td id="a2"><a href="MusicHub.java.html#L158" class="el_method">addElementToAlbum(String, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="82" alt="82"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="102" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g2">7</td><td class="ctr1" id="h0">20</td><td class="ctr2" id="i0">20</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="MusicHub.java.html#L187" class="el_method">addElementToPlayList(String, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="82" alt="82"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="102" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f3">7</td><td class="ctr2" id="g3">7</td><td class="ctr1" id="h1">20</td><td class="ctr2" id="i1">20</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a9"><a href="MusicHub.java.html#L135" class="el_method">getAlbumSongsSortedByGenre(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="115" height="10" title="79" alt="79"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="e2">0 %</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h3">16</td><td class="ctr2" id="i3">16</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="MusicHub.java.html#L113" class="el_method">getAlbumSongs(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="106" height="10" title="73" alt="73"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="e3">0 %</td><td class="ctr1" id="f1">8</td><td class="ctr2" id="g1">8</td><td class="ctr1" id="h4">15</td><td class="ctr2" id="i4">15</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a14"><a href="MusicHub.java.html#L254" class="el_method">loadElements()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="93" height="10" title="64" alt="64"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="85" height="10" title="10" alt="10"/></td><td class="ctr2" id="e4">0 %</td><td class="ctr1" id="f4">6</td><td class="ctr2" id="g4">6</td><td class="ctr1" id="h2">18</td><td class="ctr2" id="i2">18</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a11"><a href="MusicHub.java.html#L101" class="el_method">getAudiobooksTitlesSortedByAuthor()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="77" height="10" title="53" alt="53"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d9"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0 %</td><td class="ctr1" id="f9">4</td><td class="ctr2" id="g9">4</td><td class="ctr1" id="h11">9</td><td class="ctr2" id="i11">9</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a19"><a href="MusicHub.java.html#L314" class="el_method">saveElements()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="47" alt="47"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e6">0 %</td><td class="ctr1" id="f5">5</td><td class="ctr2" id="g5">5</td><td class="ctr1" id="h5">12</td><td class="ctr2" id="i5">12</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a13"><a href="MusicHub.java.html#L218" class="el_method">loadAlbums()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="64" height="10" title="44" alt="44"/></td><td class="ctr2" id="c7">0 %</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e7">0 %</td><td class="ctr1" id="f6">5</td><td class="ctr2" id="g6">5</td><td class="ctr1" id="h6">11</td><td class="ctr2" id="i6">11</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a15"><a href="MusicHub.java.html#L236" class="el_method">loadPlaylists()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="64" height="10" title="44" alt="44"/></td><td class="ctr2" id="c8">0 %</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e8">0 %</td><td class="ctr1" id="f7">5</td><td class="ctr2" id="g7">5</td><td class="ctr1" id="h7">11</td><td class="ctr2" id="i7">11</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a6"><a href="MusicHub.java.html#L66" class="el_method">deletePlayList(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="58" height="10" title="40" alt="40"/></td><td class="ctr2" id="c9">0 %</td><td class="bar" id="d8"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e9">0 %</td><td class="ctr1" id="f8">5</td><td class="ctr2" id="g8">5</td><td class="ctr1" id="h8">11</td><td class="ctr2" id="i8">11</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a18"><a href="MusicHub.java.html#L282" class="el_method">saveAlbums()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="36" alt="36"/></td><td class="ctr2" id="c10">0 %</td><td class="bar" id="d10"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e10">0 %</td><td class="ctr1" id="f10">3</td><td class="ctr2" id="g10">3</td><td class="ctr1" id="h9">10</td><td class="ctr2" id="i9">10</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a20"><a href="MusicHub.java.html#L298" class="el_method">savePlayLists()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="36" alt="36"/></td><td class="ctr2" id="c11">0 %</td><td class="bar" id="d11"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e11">0 %</td><td class="ctr1" id="f11">3</td><td class="ctr2" id="g11">3</td><td class="ctr1" id="h10">10</td><td class="ctr2" id="i10">10</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a href="MusicHub.java.html#L93" class="el_method">getAlbumsTitlesSortedByDate()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="46" height="10" title="32" alt="32"/></td><td class="ctr2" id="c12">0 %</td><td class="bar" id="d13"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="2" alt="2"/></td><td class="ctr2" id="e12">0 %</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h13">5</td><td class="ctr2" id="i13">5</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a16"><a href="MusicHub.java.html#L41" class="el_method">MusicHub()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="42" height="10" title="29" alt="29"/></td><td class="ctr2" id="c13">0 %</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h12">9</td><td class="ctr2" id="i12">9</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a12"><a href="MusicHub.java.html#L335" class="el_method">getAudioElement(List, String)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="19" alt="19"/></td><td class="ctr2" id="c14">0 %</td><td class="bar" id="d12"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e13">0 %</td><td class="ctr1" id="f12">3</td><td class="ctr2" id="g12">3</td><td class="ctr1" id="h14">5</td><td class="ctr2" id="i14">5</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a21"><a href="MusicHub.java.html#L34" class="el_method">static {...}</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="13" alt="13"/></td><td class="ctr2" id="c15">0 %</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">4</td><td class="ctr2" id="i15">4</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a1"><a href="MusicHub.java.html#L53" class="el_method">addElement(AudioElement)</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c16">0 %</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">2</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a0"><a href="MusicHub.java.html#L57" class="el_method">addAlbum(Album)</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c17">0 %</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">2</td><td class="ctr2" id="i17">2</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a4"><a href="MusicHub.java.html#L61" class="el_method">addPlaylist(PlayList)</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c18">0 %</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">2</td><td class="ctr2" id="i18">2</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a5"><a href="MusicHub.java.html#L81" class="el_method">albums()</a></td><td class="bar" id="b19"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c19">0 %</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a17"><a href="MusicHub.java.html#L85" class="el_method">playlists()</a></td><td class="bar" id="b20"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c20">0 %</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a7"><a href="MusicHub.java.html#L89" class="el_method">elements()</a></td><td class="bar" id="b21"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c21">0 %</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/MusicHub.java.html b/target/site/jacoco/musichub.business/MusicHub.java.html
new file mode 100644
index 0000000..b9dfd09
--- /dev/null
+++ b/target/site/jacoco/musichub.business/MusicHub.java.html
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>MusicHub.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">MusicHub.java</span></div><h1>MusicHub.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import musichub.util.XMLHandler;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.io.IOException;
+import java.util.*;
+
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.UnsupportedAudioFileException;
+
+<span class="nc" id="L15">class SortByDate implements Comparator&lt;Album&gt; {</span>
+ public int compare(Album a1, Album a2) {
+<span class="nc" id="L17"> return a1.getDate().compareTo(a2.getDate());</span>
+ }
+}
+
+<span class="nc" id="L21">class SortByGenre implements Comparator&lt;Song&gt; {</span>
+ public int compare(Song s1, Song s2) {
+<span class="nc" id="L23"> return s1.getGenre().compareTo(s2.getGenre());</span>
+ }
+}
+
+<span class="nc" id="L27">class SortByAuthor implements Comparator&lt;AudioElement&gt; {</span>
+ public int compare(AudioElement e1, AudioElement e2) {
+<span class="nc" id="L29"> return e1.getArtist().compareTo(e2.getArtist());</span>
+ }
+}
+
+public class MusicHub {
+<span class="nc" id="L34"> public static final String DIR = System.getProperty(&quot;user.dir&quot;);</span>
+<span class="nc" id="L35"> public static final String ALBUMS_FILE_PATH = DIR + &quot;/files/albums.xml&quot;;</span>
+<span class="nc" id="L36"> public static final String PLAYLISTS_FILE_PATH = DIR + &quot;/files/playlists.xml&quot;;</span>
+<span class="nc" id="L37"> public static final String ELEMENTS_FILE_PATH = DIR + &quot;/files/elements.xml&quot;;</span>
+ private final List&lt;Album&gt; albums;
+ private final List&lt;PlayList&gt; playlists;
+ private final List&lt;AudioElement&gt; elements;
+<span class="nc" id="L41"> private final XMLHandler xmlHandler = new XMLHandler();</span>
+
+<span class="nc" id="L43"> public MusicHub() {</span>
+<span class="nc" id="L44"> albums = new LinkedList&lt;&gt;();</span>
+<span class="nc" id="L45"> playlists = new LinkedList&lt;&gt;();</span>
+<span class="nc" id="L46"> elements = new LinkedList&lt;&gt;();</span>
+<span class="nc" id="L47"> this.loadElements();</span>
+<span class="nc" id="L48"> this.loadAlbums();</span>
+<span class="nc" id="L49"> this.loadPlaylists();</span>
+<span class="nc" id="L50"> }</span>
+
+ public void addElement(AudioElement element) {
+<span class="nc" id="L53"> elements.add(element);</span>
+<span class="nc" id="L54"> }</span>
+
+ public void addAlbum(Album album) {
+<span class="nc" id="L57"> albums.add(album);</span>
+<span class="nc" id="L58"> }</span>
+
+ public void addPlaylist(PlayList playlist) {
+<span class="nc" id="L61"> playlists.add(playlist);</span>
+<span class="nc" id="L62"> }</span>
+
+ public void deletePlayList(String playListTitle) throws NoPlayListFoundException {
+
+<span class="nc" id="L66"> PlayList thePlayList = null;</span>
+<span class="nc" id="L67"> boolean result = false;</span>
+<span class="nc bnc" id="L68" title="All 2 branches missed."> for (PlayList pl : playlists) {</span>
+<span class="nc bnc" id="L69" title="All 2 branches missed."> if (pl.getTitle().equalsIgnoreCase(playListTitle)) {</span>
+<span class="nc" id="L70"> thePlayList = pl;</span>
+<span class="nc" id="L71"> break;</span>
+ }
+<span class="nc" id="L73"> }</span>
+
+<span class="nc bnc" id="L75" title="All 2 branches missed."> if (thePlayList != null)</span>
+<span class="nc" id="L76"> result = playlists.remove(thePlayList);</span>
+<span class="nc bnc" id="L77" title="All 2 branches missed."> if (!result) throw new NoPlayListFoundException(&quot;Playlist &quot; + playListTitle + &quot; not found!&quot;);</span>
+<span class="nc" id="L78"> }</span>
+
+ public Iterator&lt;Album&gt; albums() {
+<span class="nc" id="L81"> return albums.listIterator();</span>
+ }
+
+ public Iterator&lt;PlayList&gt; playlists() {
+<span class="nc" id="L85"> return playlists.listIterator();</span>
+ }
+
+ public Iterator&lt;AudioElement&gt; elements() {
+<span class="nc" id="L89"> return elements.listIterator();</span>
+ }
+
+ public String getAlbumsTitlesSortedByDate() {
+<span class="nc" id="L93"> StringBuilder titleList = new StringBuilder();</span>
+<span class="nc" id="L94"> albums.sort(new SortByDate());</span>
+<span class="nc bnc" id="L95" title="All 2 branches missed."> for (Album al : albums)</span>
+<span class="nc" id="L96"> titleList.append(al.getTitle()).append(&quot;\n&quot;);</span>
+<span class="nc" id="L97"> return titleList.toString();</span>
+ }
+
+ public String getAudiobooksTitlesSortedByAuthor() {
+<span class="nc" id="L101"> StringBuilder titleList = new StringBuilder();</span>
+<span class="nc" id="L102"> List&lt;AudioElement&gt; audioBookList = new ArrayList&lt;&gt;();</span>
+<span class="nc bnc" id="L103" title="All 2 branches missed."> for (AudioElement ae : elements)</span>
+<span class="nc bnc" id="L104" title="All 2 branches missed."> if (ae instanceof AudioBook)</span>
+<span class="nc" id="L105"> audioBookList.add(ae);</span>
+<span class="nc" id="L106"> audioBookList.sort(new SortByAuthor());</span>
+<span class="nc bnc" id="L107" title="All 2 branches missed."> for (AudioElement ab : audioBookList)</span>
+<span class="nc" id="L108"> titleList.append(ab.getArtist()).append(&quot;\n&quot;);</span>
+<span class="nc" id="L109"> return titleList.toString();</span>
+ }
+
+ public List&lt;AudioElement&gt; getAlbumSongs(String albumTitle) throws NoAlbumFoundException {
+<span class="nc" id="L113"> Album theAlbum = null;</span>
+<span class="nc" id="L114"> ArrayList&lt;AudioElement&gt; songsInAlbum = new ArrayList&lt;&gt;();</span>
+<span class="nc bnc" id="L115" title="All 2 branches missed."> for (Album al : albums) {</span>
+<span class="nc bnc" id="L116" title="All 2 branches missed."> if (al.getTitle().equalsIgnoreCase(albumTitle)) {</span>
+<span class="nc" id="L117"> theAlbum = al;</span>
+<span class="nc" id="L118"> break;</span>
+ }
+<span class="nc" id="L120"> }</span>
+<span class="nc bnc" id="L121" title="All 2 branches missed."> if (theAlbum == null) throw new NoAlbumFoundException(&quot;No album with this title in the MusicHub!&quot;);</span>
+
+<span class="nc" id="L123"> List&lt;UUID&gt; songIDs = theAlbum.getSongs();</span>
+<span class="nc bnc" id="L124" title="All 2 branches missed."> for (UUID id : songIDs)</span>
+<span class="nc bnc" id="L125" title="All 2 branches missed."> for (AudioElement el : elements) {</span>
+<span class="nc bnc" id="L126" title="All 2 branches missed."> if (el instanceof Song) {</span>
+<span class="nc bnc" id="L127" title="All 2 branches missed."> if (el.getUUID().equals(id)) songsInAlbum.add(el);</span>
+ }
+<span class="nc" id="L129"> }</span>
+<span class="nc" id="L130"> return songsInAlbum;</span>
+
+ }
+
+ public List&lt;Song&gt; getAlbumSongsSortedByGenre(String albumTitle) throws NoAlbumFoundException {
+<span class="nc" id="L135"> Album theAlbum = null;</span>
+<span class="nc" id="L136"> ArrayList&lt;Song&gt; songsInAlbum = new ArrayList&lt;&gt;();</span>
+<span class="nc bnc" id="L137" title="All 2 branches missed."> for (Album al : albums) {</span>
+<span class="nc bnc" id="L138" title="All 2 branches missed."> if (al.getTitle().equalsIgnoreCase(albumTitle)) {</span>
+<span class="nc" id="L139"> theAlbum = al;</span>
+<span class="nc" id="L140"> break;</span>
+ }
+<span class="nc" id="L142"> }</span>
+<span class="nc bnc" id="L143" title="All 2 branches missed."> if (theAlbum == null) throw new NoAlbumFoundException(&quot;No album with this title in the MusicHub!&quot;);</span>
+
+<span class="nc" id="L145"> List&lt;UUID&gt; songIDs = theAlbum.getSongs();</span>
+<span class="nc bnc" id="L146" title="All 2 branches missed."> for (UUID id : songIDs)</span>
+<span class="nc bnc" id="L147" title="All 2 branches missed."> for (AudioElement el : elements) {</span>
+<span class="nc bnc" id="L148" title="All 2 branches missed."> if (el instanceof Song) {</span>
+<span class="nc bnc" id="L149" title="All 2 branches missed."> if (el.getUUID().equals(id)) songsInAlbum.add((Song) el);</span>
+ }
+<span class="nc" id="L151"> }</span>
+<span class="nc" id="L152"> songsInAlbum.sort(new SortByGenre());</span>
+<span class="nc" id="L153"> return songsInAlbum;</span>
+
+ }
+
+ public void addElementToAlbum(String elementTitle, String albumTitle) throws NoAlbumFoundException, NoElementFoundException {
+<span class="nc" id="L158"> Album theAlbum = null;</span>
+ int i;
+<span class="nc" id="L160"> boolean found = false;</span>
+<span class="nc bnc" id="L161" title="All 2 branches missed."> for (i = 0; i &lt; albums.size(); i++) {</span>
+<span class="nc bnc" id="L162" title="All 2 branches missed."> if (albums.get(i).getTitle().equalsIgnoreCase(albumTitle)) {</span>
+<span class="nc" id="L163"> theAlbum = albums.get(i);</span>
+<span class="nc" id="L164"> found = true;</span>
+<span class="nc" id="L165"> break;</span>
+ }
+ }
+
+<span class="nc bnc" id="L169" title="All 2 branches missed."> if (found) {</span>
+<span class="nc" id="L170"> AudioElement theElement = null;</span>
+<span class="nc bnc" id="L171" title="All 2 branches missed."> for (AudioElement ae : elements) {</span>
+<span class="nc bnc" id="L172" title="All 2 branches missed."> if (ae.getTitle().equalsIgnoreCase(elementTitle)) {</span>
+<span class="nc" id="L173"> theElement = ae;</span>
+<span class="nc" id="L174"> break;</span>
+ }
+<span class="nc" id="L176"> }</span>
+<span class="nc bnc" id="L177" title="All 2 branches missed."> if (theElement != null) {</span>
+<span class="nc" id="L178"> theAlbum.addSong(theElement.getUUID());</span>
+ //replace the album in the list
+<span class="nc" id="L180"> albums.set(i, theAlbum);</span>
+<span class="nc" id="L181"> } else throw new NoElementFoundException(&quot;Element &quot; + elementTitle + &quot; not found!&quot;);</span>
+<span class="nc" id="L182"> } else throw new NoAlbumFoundException(&quot;Album &quot; + albumTitle + &quot; not found!&quot;);</span>
+
+<span class="nc" id="L184"> }</span>
+
+ public void addElementToPlayList(String elementTitle, String playListTitle) throws NoPlayListFoundException, NoElementFoundException {
+<span class="nc" id="L187"> PlayList thePlaylist = null;</span>
+ int i;
+<span class="nc" id="L189"> boolean found = false;</span>
+
+<span class="nc bnc" id="L191" title="All 2 branches missed."> for (i = 0; i &lt; playlists.size(); i++) {</span>
+<span class="nc bnc" id="L192" title="All 2 branches missed."> if (playlists.get(i).getTitle().equalsIgnoreCase(playListTitle)) {</span>
+<span class="nc" id="L193"> thePlaylist = playlists.get(i);</span>
+<span class="nc" id="L194"> found = true;</span>
+<span class="nc" id="L195"> break;</span>
+ }
+ }
+
+<span class="nc bnc" id="L199" title="All 2 branches missed."> if (found) {</span>
+<span class="nc" id="L200"> AudioElement theElement = null;</span>
+<span class="nc bnc" id="L201" title="All 2 branches missed."> for (AudioElement ae : elements) {</span>
+<span class="nc bnc" id="L202" title="All 2 branches missed."> if (ae.getTitle().equalsIgnoreCase(elementTitle)) {</span>
+<span class="nc" id="L203"> theElement = ae;</span>
+<span class="nc" id="L204"> break;</span>
+ }
+<span class="nc" id="L206"> }</span>
+<span class="nc bnc" id="L207" title="All 2 branches missed."> if (theElement != null) {</span>
+<span class="nc" id="L208"> thePlaylist.addElement(theElement.getUUID());</span>
+ //replace the album in the list
+<span class="nc" id="L210"> playlists.set(i, thePlaylist);</span>
+<span class="nc" id="L211"> } else throw new NoElementFoundException(&quot;Element &quot; + elementTitle + &quot; not found!&quot;);</span>
+
+<span class="nc" id="L213"> } else throw new NoPlayListFoundException(&quot;Playlist &quot; + playListTitle + &quot; not found!&quot;);</span>
+
+<span class="nc" id="L215"> }</span>
+
+ private void loadAlbums() {
+<span class="nc" id="L218"> NodeList albumNodes = xmlHandler.parseXMLFile(ALBUMS_FILE_PATH);</span>
+<span class="nc bnc" id="L219" title="All 2 branches missed."> if (albumNodes == null) return;</span>
+
+<span class="nc bnc" id="L221" title="All 2 branches missed."> for (int i = 0; i &lt; albumNodes.getLength(); i++) {</span>
+<span class="nc bnc" id="L222" title="All 2 branches missed."> if (albumNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {</span>
+<span class="nc" id="L223"> Element albumElement = (Element) albumNodes.item(i);</span>
+<span class="nc bnc" id="L224" title="All 2 branches missed."> if (albumElement.getNodeName().equals(&quot;album&quot;)) {</span>
+ try {
+<span class="nc" id="L226"> this.addAlbum(new Album(albumElement));</span>
+<span class="nc" id="L227"> } catch (Exception ex) {</span>
+<span class="nc" id="L228"> System.out.println(&quot;Something is wrong with the XML album element&quot;);</span>
+<span class="nc" id="L229"> }</span>
+ }
+ }
+ }
+<span class="nc" id="L233"> }</span>
+
+ private void loadPlaylists() {
+<span class="nc" id="L236"> NodeList playlistNodes = xmlHandler.parseXMLFile(PLAYLISTS_FILE_PATH);</span>
+<span class="nc bnc" id="L237" title="All 2 branches missed."> if (playlistNodes == null) return;</span>
+
+<span class="nc bnc" id="L239" title="All 2 branches missed."> for (int i = 0; i &lt; playlistNodes.getLength(); i++) {</span>
+<span class="nc bnc" id="L240" title="All 2 branches missed."> if (playlistNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {</span>
+<span class="nc" id="L241"> Element playlistElement = (Element) playlistNodes.item(i);</span>
+<span class="nc bnc" id="L242" title="All 2 branches missed."> if (playlistElement.getNodeName().equals(&quot;playlist&quot;)) {</span>
+ try {
+<span class="nc" id="L244"> this.addPlaylist(new PlayList(playlistElement));</span>
+<span class="nc" id="L245"> } catch (Exception ex) {</span>
+<span class="nc" id="L246"> System.out.println(&quot;Something is wrong with the XML playlist element&quot;);</span>
+<span class="nc" id="L247"> }</span>
+ }
+ }
+ }
+<span class="nc" id="L251"> }</span>
+
+ private void loadElements() {
+<span class="nc" id="L254"> NodeList audioelementsNodes = xmlHandler.parseXMLFile(ELEMENTS_FILE_PATH);</span>
+<span class="nc bnc" id="L255" title="All 2 branches missed."> if (audioelementsNodes == null) return;</span>
+
+<span class="nc bnc" id="L257" title="All 2 branches missed."> for (int i = 0; i &lt; audioelementsNodes.getLength(); i++) {</span>
+<span class="nc bnc" id="L258" title="All 2 branches missed."> if (audioelementsNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {</span>
+<span class="nc" id="L259"> Element audioElement = (Element) audioelementsNodes.item(i);</span>
+<span class="nc bnc" id="L260" title="All 2 branches missed."> if (audioElement.getNodeName().equals(&quot;song&quot;)) {</span>
+ try {
+<span class="nc" id="L262"> AudioElement newSong = new Song(audioElement);</span>
+<span class="nc" id="L263"> this.addElement(newSong);</span>
+<span class="nc" id="L264"> } catch (Exception ex) {</span>
+<span class="nc" id="L265"> System.out.println(&quot;Something is wrong with the XML song element&quot;);</span>
+<span class="nc" id="L266"> }</span>
+ }
+<span class="nc bnc" id="L268" title="All 2 branches missed."> if (audioElement.getNodeName().equals(&quot;audiobook&quot;)) {</span>
+ try {
+<span class="nc" id="L270"> AudioElement newAudioBook = new AudioBook(audioElement);</span>
+<span class="nc" id="L271"> this.addElement(newAudioBook);</span>
+<span class="nc" id="L272"> } catch (Exception ex) {</span>
+<span class="nc" id="L273"> System.out.println(&quot;Something is wrong with the XML audiobook element&quot;);</span>
+<span class="nc" id="L274"> }</span>
+ }
+ }
+ }
+<span class="nc" id="L278"> }</span>
+
+
+ public void saveAlbums() {
+<span class="nc" id="L282"> Document document = xmlHandler.createXMLDocument();</span>
+<span class="nc bnc" id="L283" title="All 2 branches missed."> if (document == null) return;</span>
+
+ // root element
+<span class="nc" id="L286"> Element root = document.createElement(&quot;albums&quot;);</span>
+<span class="nc" id="L287"> document.appendChild(root);</span>
+
+ //save all albums
+<span class="nc bnc" id="L290" title="All 2 branches missed."> for (Iterator&lt;Album&gt; albumsIter = this.albums(); albumsIter.hasNext(); ) {</span>
+<span class="nc" id="L291"> Album currentAlbum = albumsIter.next();</span>
+<span class="nc" id="L292"> currentAlbum.createXMLElement(document, root);</span>
+<span class="nc" id="L293"> }</span>
+<span class="nc" id="L294"> xmlHandler.createXMLFile(document, ALBUMS_FILE_PATH);</span>
+<span class="nc" id="L295"> }</span>
+
+ public void savePlayLists() {
+<span class="nc" id="L298"> Document document = xmlHandler.createXMLDocument();</span>
+<span class="nc bnc" id="L299" title="All 2 branches missed."> if (document == null) return;</span>
+
+ // root element
+<span class="nc" id="L302"> Element root = document.createElement(&quot;playlists&quot;);</span>
+<span class="nc" id="L303"> document.appendChild(root);</span>
+
+ //save all playlists
+<span class="nc bnc" id="L306" title="All 2 branches missed."> for (Iterator&lt;PlayList&gt; playlistsIter = this.playlists(); playlistsIter.hasNext(); ) {</span>
+<span class="nc" id="L307"> PlayList currentPlayList = playlistsIter.next();</span>
+<span class="nc" id="L308"> currentPlayList.createXMLElement(document, root);</span>
+<span class="nc" id="L309"> }</span>
+<span class="nc" id="L310"> xmlHandler.createXMLFile(document, PLAYLISTS_FILE_PATH);</span>
+<span class="nc" id="L311"> }</span>
+
+ public void saveElements() {
+<span class="nc" id="L314"> Document document = xmlHandler.createXMLDocument();</span>
+<span class="nc bnc" id="L315" title="All 2 branches missed."> if (document == null) return;</span>
+
+ // root element
+<span class="nc" id="L318"> Element root = document.createElement(&quot;elements&quot;);</span>
+<span class="nc" id="L319"> document.appendChild(root);</span>
+
+ //save all AudioElements
+<span class="nc bnc" id="L322" title="All 2 branches missed."> for (AudioElement currentElement : elements) {</span>
+
+<span class="nc bnc" id="L324" title="All 2 branches missed."> if (currentElement instanceof Song) {</span>
+<span class="nc" id="L325"> currentElement.createXMLElement(document, root);</span>
+ }
+<span class="nc bnc" id="L327" title="All 2 branches missed."> if (currentElement instanceof AudioBook) {</span>
+<span class="nc" id="L328"> currentElement.createXMLElement(document, root);</span>
+ }
+<span class="nc" id="L330"> }</span>
+<span class="nc" id="L331"> xmlHandler.createXMLFile(document, ELEMENTS_FILE_PATH);</span>
+<span class="nc" id="L332"> }</span>
+
+ public void getAudioElement(List&lt;AudioElement&gt; audios, String elementTitle) throws NoAlbumFoundException, UnsupportedAudioFileException, IOException, LineUnavailableException {
+<span class="nc bnc" id="L335" title="All 2 branches missed."> for (AudioElement el : audios) {</span>
+<span class="nc bnc" id="L336" title="All 2 branches missed."> if (el.getTitle().equalsIgnoreCase(elementTitle)) {</span>
+<span class="nc" id="L337"> el.manageAudioElement();</span>
+ }
+<span class="nc" id="L339"> }</span>
+
+<span class="nc" id="L341"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/NoAlbumFoundException.html b/target/site/jacoco/musichub.business/NoAlbumFoundException.html
new file mode 100644
index 0000000..51bf5be
--- /dev/null
+++ b/target/site/jacoco/musichub.business/NoAlbumFoundException.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NoAlbumFoundException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">NoAlbumFoundException</span></div><h1>NoAlbumFoundException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="NoAlbumFoundException.java.html#L6" class="el_method">NoAlbumFoundException(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/NoAlbumFoundException.java.html b/target/site/jacoco/musichub.business/NoAlbumFoundException.java.html
new file mode 100644
index 0000000..d78347b
--- /dev/null
+++ b/target/site/jacoco/musichub.business/NoAlbumFoundException.java.html
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NoAlbumFoundException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">NoAlbumFoundException.java</span></div><h1>NoAlbumFoundException.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+public class NoAlbumFoundException extends Exception {
+
+ public NoAlbumFoundException(String msg) {
+<span class="nc" id="L6"> super(msg);</span>
+<span class="nc" id="L7"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/NoElementFoundException.html b/target/site/jacoco/musichub.business/NoElementFoundException.html
new file mode 100644
index 0000000..01fecbd
--- /dev/null
+++ b/target/site/jacoco/musichub.business/NoElementFoundException.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NoElementFoundException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">NoElementFoundException</span></div><h1>NoElementFoundException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="NoElementFoundException.java.html#L6" class="el_method">NoElementFoundException(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/NoElementFoundException.java.html b/target/site/jacoco/musichub.business/NoElementFoundException.java.html
new file mode 100644
index 0000000..4d5f6bb
--- /dev/null
+++ b/target/site/jacoco/musichub.business/NoElementFoundException.java.html
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NoElementFoundException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">NoElementFoundException.java</span></div><h1>NoElementFoundException.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+public class NoElementFoundException extends Exception {
+
+ public NoElementFoundException(String msg) {
+<span class="nc" id="L6"> super(msg);</span>
+<span class="nc" id="L7"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/NoPlayListFoundException.html b/target/site/jacoco/musichub.business/NoPlayListFoundException.html
new file mode 100644
index 0000000..d1803ad
--- /dev/null
+++ b/target/site/jacoco/musichub.business/NoPlayListFoundException.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NoPlayListFoundException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">NoPlayListFoundException</span></div><h1>NoPlayListFoundException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="NoPlayListFoundException.java.html#L6" class="el_method">NoPlayListFoundException(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/NoPlayListFoundException.java.html b/target/site/jacoco/musichub.business/NoPlayListFoundException.java.html
new file mode 100644
index 0000000..f93e9a4
--- /dev/null
+++ b/target/site/jacoco/musichub.business/NoPlayListFoundException.java.html
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NoPlayListFoundException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">NoPlayListFoundException.java</span></div><h1>NoPlayListFoundException.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+public class NoPlayListFoundException extends Exception {
+
+ public NoPlayListFoundException(String msg) {
+<span class="nc" id="L6"> super(msg);</span>
+<span class="nc" id="L7"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/PathValidation.html b/target/site/jacoco/musichub.business/PathValidation.html
new file mode 100644
index 0000000..3b58bb2
--- /dev/null
+++ b/target/site/jacoco/musichub.business/PathValidation.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>PathValidation</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">PathValidation</span></div><h1>PathValidation</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 17</td><td class="ctr2">100 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="PathValidation.java.html#L34" class="el_method">isPathValid(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">100 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="PathValidation.java.html#L22" class="el_method">PathValidation()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="84" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">100 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/PathValidation.java.html b/target/site/jacoco/musichub.business/PathValidation.java.html
new file mode 100644
index 0000000..4d22953
--- /dev/null
+++ b/target/site/jacoco/musichub.business/PathValidation.java.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>PathValidation.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">PathValidation.java</span></div><h1>PathValidation.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Class offering a path validation method.
+ *
+ * @author Aimeric ADJUTOR
+ * @version 1.0
+ */
+
+public final class PathValidation {
+
+ /**
+ * Method that just throws an AssertionError if the class is called
+ * @author Aimeric ADJUTOR
+ * @throws AssertionError you can't instantiate this class
+ */
+
+<span class="fc" id="L22"> public PathValidation() {</span>
+<span class="fc" id="L23"> throw new AssertionError(&quot;You just can't instantiate this class.&quot;);</span>
+ }
+
+ /**
+ * Method that checks the validity of a given path
+ *
+ * @param inputPath the path given by the user
+ * @return a boolean
+ */
+
+ public static boolean isPathValid(String inputPath) {
+<span class="fc" id="L34"> Path path = Paths.get(inputPath);</span>
+<span class="fc" id="L35"> return Files.exists(path);</span>
+ }
+
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/PlayList.html b/target/site/jacoco/musichub.business/PlayList.html
new file mode 100644
index 0000000..ae17a14
--- /dev/null
+++ b/target/site/jacoco/musichub.business/PlayList.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>PlayList</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">PlayList</span></div><h1>PlayList</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">202 of 202</td><td class="ctr2">0 %</td><td class="bar">14 of 14</td><td class="ctr2">0 %</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">53</td><td class="ctr2">53</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a4"><a href="PlayList.java.html#L28" class="el_method">PlayList(Element)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="88" alt="88"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">23</td><td class="ctr2" id="i0">23</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="PlayList.java.html#L78" class="el_method">createXMLElement(Document, Element)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="102" height="10" title="75" alt="75"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">16</td><td class="ctr2" id="i1">16</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="PlayList.java.html#L22" class="el_method">PlayList(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="PlayList.java.html#L16" class="el_method">PlayList(String, String, ArrayList)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="PlayList.java.html#L66" class="el_method">addElement(UUID)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="PlayList.java.html#L70" class="el_method">getElements()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="PlayList.java.html#L74" class="el_method">getTitle()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/PlayList.java.html b/target/site/jacoco/musichub.business/PlayList.java.html
new file mode 100644
index 0000000..6a45004
--- /dev/null
+++ b/target/site/jacoco/musichub.business/PlayList.java.html
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>PlayList.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">PlayList.java</span></div><h1>PlayList.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.ArrayList;
+import java.util.UUID;
+
+public class PlayList {
+ private final String title;
+ private final UUID uuid;
+ private ArrayList&lt;UUID&gt; elementUUIDs;
+
+<span class="nc" id="L16"> public PlayList(String title, String id, ArrayList&lt;UUID&gt; elementUUIDs) {</span>
+<span class="nc" id="L17"> this.title = title;</span>
+<span class="nc" id="L18"> this.uuid = UUID.fromString(id);</span>
+<span class="nc" id="L19"> this.elementUUIDs = elementUUIDs;</span>
+<span class="nc" id="L20"> }</span>
+
+<span class="nc" id="L22"> public PlayList(String title) {</span>
+<span class="nc" id="L23"> this.title = title;</span>
+<span class="nc" id="L24"> this.uuid = UUID.randomUUID();</span>
+<span class="nc" id="L25"> this.elementUUIDs = new ArrayList&lt;&gt;();</span>
+<span class="nc" id="L26"> }</span>
+
+<span class="nc" id="L28"> public PlayList(Element xmlElement) {</span>
+ {
+<span class="nc" id="L30"> this.title = xmlElement.getElementsByTagName(&quot;title&quot;).item(0).getTextContent();</span>
+
+<span class="nc" id="L32"> String uuid = null;</span>
+ try {
+<span class="nc" id="L34"> uuid = xmlElement.getElementsByTagName(&quot;UUID&quot;).item(0).getTextContent();</span>
+<span class="nc" id="L35"> } catch (Exception ex) {</span>
+<span class="nc" id="L36"> System.out.println(&quot;Empty playlist UUID, will create a new one&quot;);</span>
+<span class="nc" id="L37"> }</span>
+<span class="nc bnc" id="L38" title="All 4 branches missed."> if ((uuid == null) || (uuid.isEmpty()))</span>
+<span class="nc" id="L39"> this.uuid = UUID.randomUUID();</span>
+<span class="nc" id="L40"> else this.uuid = UUID.fromString(uuid);</span>
+
+ //parse list of elements:
+<span class="nc" id="L43"> Node elementsElement = xmlElement.getElementsByTagName(&quot;elements&quot;).item(0);</span>
+<span class="nc" id="L44"> NodeList elementUUIDNodes = elementsElement.getChildNodes();</span>
+<span class="nc bnc" id="L45" title="All 2 branches missed."> if (elementUUIDNodes == null) return;</span>
+
+<span class="nc" id="L47"> this.elementUUIDs = new ArrayList&lt;&gt;();</span>
+
+
+<span class="nc bnc" id="L50" title="All 2 branches missed."> for (int i = 0; i &lt; elementUUIDNodes.getLength(); i++) {</span>
+<span class="nc bnc" id="L51" title="All 2 branches missed."> if (elementUUIDNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {</span>
+<span class="nc" id="L52"> Element elementElement = (Element) elementUUIDNodes.item(i);</span>
+<span class="nc bnc" id="L53" title="All 2 branches missed."> if (elementElement.getNodeName().equals(&quot;UUID&quot;)) {</span>
+ try {
+<span class="nc" id="L55"> this.addElement(UUID.fromString(elementElement.getTextContent()));</span>
+<span class="nc" id="L56"> } catch (Exception ex) {</span>
+<span class="nc" id="L57"> ex.printStackTrace();</span>
+<span class="nc" id="L58"> }</span>
+ }
+ }
+ }
+ }
+<span class="nc" id="L63"> }</span>
+
+ public void addElement(UUID element) {
+<span class="nc" id="L66"> elementUUIDs.add(element);</span>
+<span class="nc" id="L67"> }</span>
+
+ public ArrayList&lt;UUID&gt; getElements() {
+<span class="nc" id="L70"> return elementUUIDs;</span>
+ }
+
+ public String getTitle() {
+<span class="nc" id="L74"> return title;</span>
+ }
+
+ public void createXMLElement(Document document, Element parentElement) {
+<span class="nc" id="L78"> Element playlistElement = document.createElement(&quot;playlist&quot;);</span>
+<span class="nc" id="L79"> parentElement.appendChild(playlistElement);</span>
+
+<span class="nc" id="L81"> Element nameElement = document.createElement(&quot;title&quot;);</span>
+<span class="nc" id="L82"> nameElement.appendChild(document.createTextNode(title));</span>
+<span class="nc" id="L83"> playlistElement.appendChild(nameElement);</span>
+
+<span class="nc" id="L85"> Element UUIDElement = document.createElement(&quot;UUID&quot;);</span>
+<span class="nc" id="L86"> UUIDElement.appendChild(document.createTextNode(uuid.toString()));</span>
+<span class="nc" id="L87"> playlistElement.appendChild(UUIDElement);</span>
+
+
+<span class="nc" id="L90"> Element elementsElement = document.createElement(&quot;elements&quot;);</span>
+<span class="nc bnc" id="L91" title="All 2 branches missed."> for (UUID currentUUID : this.elementUUIDs) {</span>
+
+<span class="nc" id="L93"> Element elementUUIDElement = document.createElement(&quot;UUID&quot;);</span>
+<span class="nc" id="L94"> elementUUIDElement.appendChild(document.createTextNode(currentUUID.toString()));</span>
+<span class="nc" id="L95"> elementsElement.appendChild(elementUUIDElement);</span>
+<span class="nc" id="L96"> }</span>
+<span class="nc" id="L97"> playlistElement.appendChild(elementsElement);</span>
+<span class="nc" id="L98"> }</span>
+
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Song.html b/target/site/jacoco/musichub.business/Song.html
new file mode 100644
index 0000000..4af18c3
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Song.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Song</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">Song</span></div><h1>Song</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">105 of 105</td><td class="ctr2">0 %</td><td class="bar">6 of 6</td><td class="ctr2">0 %</td><td class="ctr1">12</td><td class="ctr2">12</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a2"><a href="Song.java.html#L30" class="el_method">setGenre(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="Song.java.html#L46" class="el_method">createXMLElement(Document, Element)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="105" height="10" title="29" alt="29"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="Song.java.html#L21" class="el_method">Song(Element)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="Song.java.html#L11" class="el_method">Song(String, String, int, String, String, String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="11" alt="11"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="Song.java.html#L16" class="el_method">Song(String, String, int, String, String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="10" alt="10"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="Song.java.html#L41" class="el_method">toString()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="Song.java.html#L26" class="el_method">getGenre()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/Song.java.html b/target/site/jacoco/musichub.business/Song.java.html
new file mode 100644
index 0000000..4f7f01d
--- /dev/null
+++ b/target/site/jacoco/musichub.business/Song.java.html
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Song.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.business</a> &gt; <span class="el_source">Song.java</span></div><h1>Song.java</h1><pre class="source lang-java linenums">package musichub.business;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+
+public class Song extends AudioElement {
+ private Genre genre;
+
+ public Song(String title, String artist, int length, String uid, String content, String genre) {
+<span class="nc" id="L11"> super(title, artist, length, uid, content);</span>
+<span class="nc" id="L12"> this.setGenre(genre);</span>
+<span class="nc" id="L13"> }</span>
+
+ public Song(String title, String artist, int length, String content, String genre) {
+<span class="nc" id="L16"> super(title, artist, length, content);</span>
+<span class="nc" id="L17"> this.setGenre(genre);</span>
+<span class="nc" id="L18"> }</span>
+
+ public Song(Element xmlElement) {
+<span class="nc" id="L21"> super(xmlElement);</span>
+<span class="nc" id="L22"> this.setGenre(xmlElement.getElementsByTagName(&quot;genre&quot;).item(0).getTextContent());</span>
+<span class="nc" id="L23"> }</span>
+
+ public String getGenre() {
+<span class="nc" id="L26"> return genre.getGenre();</span>
+ }
+
+ public void setGenre(String genre) {
+<span class="nc bnc" id="L30" title="All 6 branches missed."> switch (genre.toLowerCase()) {</span>
+<span class="nc" id="L31"> default -&gt; this.genre = Genre.JAZZ;</span>
+<span class="nc" id="L32"> case &quot;classic&quot; -&gt; this.genre = Genre.CLASSIC;</span>
+<span class="nc" id="L33"> case &quot;hiphop&quot; -&gt; this.genre = Genre.HIPHOP;</span>
+<span class="nc" id="L34"> case &quot;rock&quot; -&gt; this.genre = Genre.ROCK;</span>
+<span class="nc" id="L35"> case &quot;pop&quot; -&gt; this.genre = Genre.POP;</span>
+<span class="nc" id="L36"> case &quot;rap&quot; -&gt; this.genre = Genre.RAP;</span>
+ }
+<span class="nc" id="L38"> }</span>
+
+ public String toString() {
+<span class="nc" id="L41"> return super.toString() + &quot;, Genre = &quot; + getGenre() + &quot;\n&quot;;</span>
+ }
+
+ public void createXMLElement(Document document, Element parentElement) {
+ // song element
+<span class="nc" id="L46"> Element song = document.createElement(&quot;song&quot;);</span>
+
+<span class="nc" id="L48"> super.createXMLElement(document, song);</span>
+
+<span class="nc" id="L50"> Element genreElement = document.createElement(&quot;genre&quot;);</span>
+<span class="nc" id="L51"> genreElement.appendChild(document.createTextNode(genre.getGenre()));</span>
+<span class="nc" id="L52"> song.appendChild(genreElement);</span>
+
+<span class="nc" id="L54"> parentElement.appendChild(song);</span>
+<span class="nc" id="L55"> }</span>
+
+
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/SortByAuthor.html b/target/site/jacoco/musichub.business/SortByAuthor.html
new file mode 100644
index 0000000..851cdce
--- /dev/null
+++ b/target/site/jacoco/musichub.business/SortByAuthor.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SortByAuthor</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">SortByAuthor</span></div><h1>SortByAuthor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">9 of 9</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="MusicHub.java.html#L29" class="el_method">compare(AudioElement, AudioElement)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="MusicHub.java.html#L27" class="el_method">SortByAuthor()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/SortByDate.html b/target/site/jacoco/musichub.business/SortByDate.html
new file mode 100644
index 0000000..8f4b2f7
--- /dev/null
+++ b/target/site/jacoco/musichub.business/SortByDate.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SortByDate</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">SortByDate</span></div><h1>SortByDate</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">9 of 9</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="MusicHub.java.html#L17" class="el_method">compare(Album, Album)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="MusicHub.java.html#L15" class="el_method">SortByDate()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/SortByGenre.html b/target/site/jacoco/musichub.business/SortByGenre.html
new file mode 100644
index 0000000..6dd6e7d
--- /dev/null
+++ b/target/site/jacoco/musichub.business/SortByGenre.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SortByGenre</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.business</a> &gt; <span class="el_class">SortByGenre</span></div><h1>SortByGenre</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">9 of 9</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="MusicHub.java.html#L23" class="el_method">compare(Song, Song)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="MusicHub.java.html#L21" class="el_method">SortByGenre()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/index.html b/target/site/jacoco/musichub.business/index.html
new file mode 100644
index 0000000..178e60b
--- /dev/null
+++ b/target/site/jacoco/musichub.business/index.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>musichub.business</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <span class="el_package">musichub.business</span></div><h1>musichub.business</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2 063 of 2 080</td><td class="ctr2">0 %</td><td class="bar">169 of 169</td><td class="ctr2">0 %</td><td class="ctr1">172</td><td class="ctr2">174</td><td class="ctr1">499</td><td class="ctr2">503</td><td class="ctr1">81</td><td class="ctr2">83</td><td class="ctr1">15</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a6"><a href="MusicHub.html" class="el_class">MusicHub</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="803" alt="803"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="114" alt="114"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">79</td><td class="ctr2" id="g0">79</td><td class="ctr1" id="h0">195</td><td class="ctr2" id="i0">195</td><td class="ctr1" id="j0">22</td><td class="ctr2" id="k0">22</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="Album.html" class="el_class">Album</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="49" height="10" title="330" alt="330"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f2">16</td><td class="ctr2" id="g2">16</td><td class="ctr1" id="h1">84</td><td class="ctr2" id="i1">84</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="AudioElement.html" class="el_class">AudioElement</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="39" height="10" title="266" alt="266"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="11" alt="11"/></td><td class="ctr2" id="e2">0 %</td><td class="ctr1" id="f3">16</td><td class="ctr2" id="g3">16</td><td class="ctr1" id="h2">72</td><td class="ctr2" id="i2">72</td><td class="ctr1" id="j2">9</td><td class="ctr2" id="k2">9</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a11"><a href="PlayList.html" class="el_class">PlayList</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="202" alt="202"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="14" alt="14"/></td><td class="ctr2" id="e3">0 %</td><td class="ctr1" id="f4">14</td><td class="ctr2" id="g4">14</td><td class="ctr1" id="h3">53</td><td class="ctr2" id="i3">53</td><td class="ctr1" id="j4">7</td><td class="ctr2" id="k4">7</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a1"><a href="AudioBook.html" class="el_class">AudioBook</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="164" alt="164"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="10" alt="10"/></td><td class="ctr2" id="e4">0 %</td><td class="ctr1" id="f1">17</td><td class="ctr2" id="g1">17</td><td class="ctr1" id="h4">39</td><td class="ctr2" id="i4">39</td><td class="ctr1" id="j3">9</td><td class="ctr2" id="k3">9</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a12"><a href="Song.html" class="el_class">Song</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="105" alt="105"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0 %</td><td class="ctr1" id="f5">12</td><td class="ctr2" id="g5">12</td><td class="ctr1" id="h5">26</td><td class="ctr2" id="i5">26</td><td class="ctr1" id="j5">7</td><td class="ctr2" id="k5">7</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a4"><a href="Genre.html" class="el_class">Genre</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="56" alt="56"/></td><td class="ctr2" id="c7">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h6">6</td><td class="ctr2" id="i6">6</td><td class="ctr1" id="j6">3</td><td class="ctr2" id="k6">3</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a5"><a href="Language.html" class="el_class">Language</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="49" alt="49"/></td><td class="ctr2" id="c8">0 %</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j7">3</td><td class="ctr2" id="k7">3</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a3"><a href="Category.html" class="el_class">Category</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="49" alt="49"/></td><td class="ctr2" id="c9">0 %</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h8">6</td><td class="ctr2" id="i8">6</td><td class="ctr1" id="j8">3</td><td class="ctr2" id="k8">3</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a13"><a href="SortByAuthor.html" class="el_class">SortByAuthor</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="9" alt="9"/></td><td class="ctr2" id="c10">0 %</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j9">2</td><td class="ctr2" id="k9">2</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a14"><a href="SortByDate.html" class="el_class">SortByDate</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="9" alt="9"/></td><td class="ctr2" id="c11">0 %</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h10">2</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j10">2</td><td class="ctr2" id="k10">2</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a15"><a href="SortByGenre.html" class="el_class">SortByGenre</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="9" alt="9"/></td><td class="ctr2" id="c12">0 %</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h11">2</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j11">2</td><td class="ctr2" id="k11">2</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a7"><a href="NoAlbumFoundException.html" class="el_class">NoAlbumFoundException</a></td><td class="bar" id="b12"/><td class="ctr2" id="c13">0 %</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h12">2</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k13">1</td><td class="ctr1" id="l12">1</td><td class="ctr2" id="m12">1</td></tr><tr><td id="a9"><a href="NoPlayListFoundException.html" class="el_class">NoPlayListFoundException</a></td><td class="bar" id="b13"/><td class="ctr2" id="c14">0 %</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h13">2</td><td class="ctr2" id="i14">2</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k14">1</td><td class="ctr1" id="l13">1</td><td class="ctr2" id="m13">1</td></tr><tr><td id="a8"><a href="NoElementFoundException.html" class="el_class">NoElementFoundException</a></td><td class="bar" id="b14"/><td class="ctr2" id="c15">0 %</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h14">2</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k15">1</td><td class="ctr1" id="l14">1</td><td class="ctr2" id="m14">1</td></tr><tr><td id="a10"><a href="PathValidation.html" class="el_class">PathValidation</a></td><td class="bar" id="b15"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="17" alt="17"/></td><td class="ctr2" id="c0">100 %</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i9">4</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k12">2</td><td class="ctr1" id="l15">0</td><td class="ctr2" id="m15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.business/index.source.html b/target/site/jacoco/musichub.business/index.source.html
new file mode 100644
index 0000000..45a5b59
--- /dev/null
+++ b/target/site/jacoco/musichub.business/index.source.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>musichub.business</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <span class="el_package">musichub.business</span></div><h1>musichub.business</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2 063 of 2 080</td><td class="ctr2">0 %</td><td class="bar">169 of 169</td><td class="ctr2">0 %</td><td class="ctr1">172</td><td class="ctr2">174</td><td class="ctr1">499</td><td class="ctr2">503</td><td class="ctr1">81</td><td class="ctr2">83</td><td class="ctr1">15</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a6"><a href="MusicHub.java.html" class="el_source">MusicHub.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="830" alt="830"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="114" alt="114"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">85</td><td class="ctr2" id="g0">85</td><td class="ctr1" id="h0">201</td><td class="ctr2" id="i0">201</td><td class="ctr1" id="j0">28</td><td class="ctr2" id="k0">28</td><td class="ctr1" id="l0">4</td><td class="ctr2" id="m0">4</td></tr><tr><td id="a0"><a href="Album.java.html" class="el_source">Album.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="330" alt="330"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0 %</td><td class="ctr1" id="f2">16</td><td class="ctr2" id="g2">16</td><td class="ctr1" id="h1">84</td><td class="ctr2" id="i1">84</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="AudioElement.java.html" class="el_source">AudioElement.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="38" height="10" title="266" alt="266"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="11" alt="11"/></td><td class="ctr2" id="e2">0 %</td><td class="ctr1" id="f3">16</td><td class="ctr2" id="g3">16</td><td class="ctr1" id="h2">72</td><td class="ctr2" id="i2">72</td><td class="ctr1" id="j2">9</td><td class="ctr2" id="k2">9</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a11"><a href="PlayList.java.html" class="el_source">PlayList.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="29" height="10" title="202" alt="202"/></td><td class="ctr2" id="c4">0 %</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="14" alt="14"/></td><td class="ctr2" id="e3">0 %</td><td class="ctr1" id="f4">14</td><td class="ctr2" id="g4">14</td><td class="ctr1" id="h3">53</td><td class="ctr2" id="i3">53</td><td class="ctr1" id="j4">7</td><td class="ctr2" id="k4">7</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a1"><a href="AudioBook.java.html" class="el_source">AudioBook.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="23" height="10" title="164" alt="164"/></td><td class="ctr2" id="c5">0 %</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="10" alt="10"/></td><td class="ctr2" id="e4">0 %</td><td class="ctr1" id="f1">17</td><td class="ctr2" id="g1">17</td><td class="ctr1" id="h4">39</td><td class="ctr2" id="i4">39</td><td class="ctr1" id="j3">9</td><td class="ctr2" id="k3">9</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a12"><a href="Song.java.html" class="el_source">Song.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="105" alt="105"/></td><td class="ctr2" id="c6">0 %</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0 %</td><td class="ctr1" id="f5">12</td><td class="ctr2" id="g5">12</td><td class="ctr1" id="h5">26</td><td class="ctr2" id="i5">26</td><td class="ctr1" id="j5">7</td><td class="ctr2" id="k5">7</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a4"><a href="Genre.java.html" class="el_source">Genre.java</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="56" alt="56"/></td><td class="ctr2" id="c7">0 %</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h6">6</td><td class="ctr2" id="i6">6</td><td class="ctr1" id="j6">3</td><td class="ctr2" id="k6">3</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a5"><a href="Language.java.html" class="el_source">Language.java</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="49" alt="49"/></td><td class="ctr2" id="c8">0 %</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j7">3</td><td class="ctr2" id="k7">3</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a3"><a href="Category.java.html" class="el_source">Category.java</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="49" alt="49"/></td><td class="ctr2" id="c9">0 %</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h8">6</td><td class="ctr2" id="i8">6</td><td class="ctr1" id="j8">3</td><td class="ctr2" id="k8">3</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a7"><a href="NoAlbumFoundException.java.html" class="el_source">NoAlbumFoundException.java</a></td><td class="bar" id="b9"/><td class="ctr2" id="c10">0 %</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k10">1</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a9"><a href="NoPlayListFoundException.java.html" class="el_source">NoPlayListFoundException.java</a></td><td class="bar" id="b10"/><td class="ctr2" id="c11">0 %</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h10">2</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k11">1</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a8"><a href="NoElementFoundException.java.html" class="el_source">NoElementFoundException.java</a></td><td class="bar" id="b11"/><td class="ctr2" id="c12">0 %</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h11">2</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k12">1</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a10"><a href="PathValidation.java.html" class="el_source">PathValidation.java</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="17" alt="17"/></td><td class="ctr2" id="c0">100 %</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i9">4</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k9">2</td><td class="ctr1" id="l12">0</td><td class="ctr2" id="m12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.main/Main.html b/target/site/jacoco/musichub.main/Main.html
new file mode 100644
index 0000000..de45b84
--- /dev/null
+++ b/target/site/jacoco/musichub.main/Main.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Main</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.main</a> &gt; <span class="el_class">Main</span></div><h1>Main</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">588 of 588</td><td class="ctr2">0 %</td><td class="bar">40 of 40</td><td class="ctr2">0 %</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">199</td><td class="ctr2">199</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="Main.java.html#L17" class="el_method">main(String[])</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="548" alt="548"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="40" alt="40"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">27</td><td class="ctr2" id="g0">27</td><td class="ctr1" id="h0">185</td><td class="ctr2" id="i0">185</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="Main.java.html#L252" class="el_method">printAvailableCommands()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="37" alt="37"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">13</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="Main.java.html#L14" class="el_method">Main()</a></td><td class="bar" id="b2"/><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.main/Main.java.html b/target/site/jacoco/musichub.main/Main.java.html
new file mode 100644
index 0000000..df39af0
--- /dev/null
+++ b/target/site/jacoco/musichub.main/Main.java.html
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Main.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.main</a> &gt; <span class="el_source">Main.java</span></div><h1>Main.java</h1><pre class="source lang-java linenums">package musichub.main;
+
+import musichub.business.*;
+
+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.business.PathValidation.isPathValid;
+
+<span class="nc" id="L14">public class Main {</span>
+ public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException {
+
+<span class="nc" id="L17"> MusicHub theHub = new MusicHub();</span>
+
+<span class="nc" id="L19"> System.out.println(&quot;Type h for available commands&quot;);</span>
+
+
+<span class="nc" id="L22"> Scanner scan = new Scanner(System.in);</span>
+<span class="nc" id="L23"> String choice = scan.nextLine();</span>
+
+ String albumTitle;
+
+<span class="nc bnc" id="L27" title="All 2 branches missed."> if (choice.length() == 0) System.exit(0);</span>
+
+<span class="nc bnc" id="L29" title="All 2 branches missed."> while (!choice.equals(&quot;&quot;)) { //if the user puts nothing, quit the loop/system</span>
+<span class="nc bnc" id="L30" title="All 14 branches missed."> switch (choice.charAt(0)) {</span>
+ case 'q': //added the option directly in the switch instead of the loop
+<span class="nc" id="L32"> System.exit(0);</span>
+ case 'h':
+<span class="nc" id="L34"> printAvailableCommands();</span>
+<span class="nc" id="L35"> choice = scan.nextLine();</span>
+<span class="nc" id="L36"> break;</span>
+ case 't':
+ //album titles, ordered by date
+<span class="nc" id="L39"> System.out.println(theHub.getAlbumsTitlesSortedByDate());</span>
+<span class="nc" id="L40"> printAvailableCommands();</span>
+<span class="nc" id="L41"> choice = scan.nextLine();</span>
+<span class="nc" id="L42"> break;</span>
+ case 'g':
+ //songs of an album, sorted by genre
+<span class="nc" id="L45"> System.out.println(&quot;Songs of an album sorted by genre will be displayed; enter the album name, available albums are:&quot;);</span>
+<span class="nc" id="L46"> System.out.println(theHub.getAlbumsTitlesSortedByDate());</span>
+
+<span class="nc" id="L48"> albumTitle = scan.nextLine();</span>
+ try {
+<span class="nc" id="L50"> List&lt;Song&gt; songs = theHub.getAlbumSongsSortedByGenre(albumTitle);</span>
+<span class="nc" id="L51"> System.out.println(songs);</span>
+<span class="nc" id="L52"> } catch (NoAlbumFoundException ex) {</span>
+<span class="nc" id="L53"> System.out.println(&quot;No album found with the requested title &quot; + ex.getMessage());</span>
+<span class="nc" id="L54"> }</span>
+<span class="nc" id="L55"> printAvailableCommands();</span>
+<span class="nc" id="L56"> choice = scan.nextLine();</span>
+<span class="nc" id="L57"> break;</span>
+ case 'd':
+ //songs of an album
+<span class="nc" id="L60"> System.out.println(&quot;Songs of an album will be displayed; enter the album name, available albums are:&quot;);</span>
+<span class="nc" id="L61"> System.out.println(theHub.getAlbumsTitlesSortedByDate());</span>
+
+<span class="nc" id="L63"> albumTitle = scan.nextLine();</span>
+ try {
+<span class="nc" id="L65"> List&lt;AudioElement&gt; songs = theHub.getAlbumSongs(albumTitle);</span>
+<span class="nc" id="L66"> System.out.println(theHub.getAlbumSongs(albumTitle));</span>
+<span class="nc" id="L67"> String song = scan.nextLine();</span>
+<span class="nc" id="L68"> theHub.getAudioElement(songs, song);</span>
+<span class="nc" id="L69"> } catch (NoAlbumFoundException ex) {</span>
+<span class="nc" id="L70"> System.out.println(&quot;No album found with the requested title &quot; + ex.getMessage());</span>
+<span class="nc" id="L71"> }</span>
+<span class="nc" id="L72"> printAvailableCommands();</span>
+<span class="nc" id="L73"> choice = scan.nextLine();</span>
+<span class="nc" id="L74"> break;</span>
+ case 'u':
+ //audiobooks ordered by author
+<span class="nc" id="L77"> System.out.println(theHub.getAudiobooksTitlesSortedByAuthor());</span>
+<span class="nc" id="L78"> printAvailableCommands();</span>
+<span class="nc" id="L79"> choice = scan.nextLine();</span>
+<span class="nc" id="L80"> break;</span>
+ case 'c':
+ // add a new song
+<span class="nc" id="L83"> System.out.println(&quot;Enter a new song: &quot;);</span>
+<span class="nc" id="L84"> System.out.println(&quot;Song title: &quot;);</span>
+<span class="nc" id="L85"> String title = scan.nextLine();</span>
+<span class="nc" id="L86"> System.out.println(&quot;Song genre (jazz, classic, hiphop, rock, pop, rap):&quot;);</span>
+<span class="nc" id="L87"> String genre = scan.nextLine();</span>
+<span class="nc" id="L88"> System.out.println(&quot;Song artist: &quot;);</span>
+<span class="nc" id="L89"> String artist = scan.nextLine();</span>
+<span class="nc" id="L90"> System.out.println(&quot;Song length in seconds: &quot;);</span>
+<span class="nc" id="L91"> int length = Integer.parseInt(scan.nextLine());</span>
+
+<span class="nc" id="L93"> System.out.println(&quot;Song content: &quot;);</span>
+<span class="nc" id="L94"> String content = scan.nextLine();</span>
+<span class="nc bnc" id="L95" title="All 2 branches missed."> if (!isPathValid(content)) {</span>
+<span class="nc" id="L96"> System.out.println(&quot;The music file was not found with the path you've provided.\nType h for available commands&quot;);</span>
+<span class="nc" id="L97"> choice = scan.nextLine();</span>
+<span class="nc" id="L98"> break;</span>
+ }
+
+<span class="nc" id="L101"> Song s = new Song(title, artist, length, content, genre);</span>
+<span class="nc" id="L102"> theHub.addElement(s);</span>
+<span class="nc" id="L103"> System.out.println(&quot;New element list: &quot;);</span>
+<span class="nc" id="L104"> Iterator&lt;AudioElement&gt; it = theHub.elements();</span>
+<span class="nc bnc" id="L105" title="All 2 branches missed."> while (it.hasNext()) System.out.println(it.next().getTitle());</span>
+<span class="nc" id="L106"> System.out.println(&quot;Song created!&quot;);</span>
+<span class="nc" id="L107"> printAvailableCommands();</span>
+<span class="nc" id="L108"> choice = scan.nextLine();</span>
+<span class="nc" id="L109"> break;</span>
+ case 'a':
+ // add a new album
+<span class="nc" id="L112"> System.out.println(&quot;Enter a new album: &quot;);</span>
+<span class="nc" id="L113"> System.out.println(&quot;Album title: &quot;);</span>
+<span class="nc" id="L114"> String aTitle = scan.nextLine();</span>
+<span class="nc" id="L115"> System.out.println(&quot;Album artist: &quot;);</span>
+<span class="nc" id="L116"> String aArtist = scan.nextLine();</span>
+<span class="nc" id="L117"> System.out.println(&quot;Album length in seconds: &quot;);</span>
+<span class="nc" id="L118"> int aLength = Integer.parseInt(scan.nextLine());</span>
+<span class="nc" id="L119"> System.out.println(&quot;Album date as YYYY-DD-MM: &quot;);</span>
+<span class="nc" id="L120"> String aDate = scan.nextLine();</span>
+<span class="nc" id="L121"> Album a = new Album(aTitle, aArtist, aLength, aDate);</span>
+<span class="nc" id="L122"> theHub.addAlbum(a);</span>
+<span class="nc" id="L123"> System.out.println(&quot;New list of albums: &quot;);</span>
+<span class="nc" id="L124"> Iterator&lt;Album&gt; ita = theHub.albums();</span>
+<span class="nc bnc" id="L125" title="All 2 branches missed."> while (ita.hasNext()) System.out.println(ita.next().getTitle());</span>
+<span class="nc" id="L126"> System.out.println(&quot;Album created!&quot;);</span>
+<span class="nc" id="L127"> printAvailableCommands();</span>
+<span class="nc" id="L128"> choice = scan.nextLine();</span>
+<span class="nc" id="L129"> break;</span>
+ case '+':
+ //add a song to an album:
+<span class="nc" id="L132"> System.out.println(&quot;Add an existing song to an existing album&quot;);</span>
+<span class="nc" id="L133"> System.out.println(&quot;Type the name of the song you wish to add. Available songs: &quot;);</span>
+<span class="nc" id="L134"> Iterator&lt;AudioElement&gt; itae = theHub.elements();</span>
+<span class="nc bnc" id="L135" title="All 2 branches missed."> while (itae.hasNext()) {</span>
+<span class="nc" id="L136"> AudioElement ae = itae.next();</span>
+<span class="nc bnc" id="L137" title="All 2 branches missed."> if (ae instanceof Song) System.out.println(ae.getTitle());</span>
+<span class="nc" id="L138"> }</span>
+<span class="nc" id="L139"> String songTitle = scan.nextLine();</span>
+
+<span class="nc" id="L141"> System.out.println(&quot;Type the name of the album you wish to enrich. Available albums: &quot;);</span>
+<span class="nc" id="L142"> Iterator&lt;Album&gt; ait = theHub.albums();</span>
+<span class="nc bnc" id="L143" title="All 2 branches missed."> while (ait.hasNext()) {</span>
+<span class="nc" id="L144"> Album al = ait.next();</span>
+<span class="nc" id="L145"> System.out.println(al.getTitle());</span>
+<span class="nc" id="L146"> }</span>
+<span class="nc" id="L147"> String titleAlbum = scan.nextLine();</span>
+ try {
+<span class="nc" id="L149"> theHub.addElementToAlbum(songTitle, titleAlbum);</span>
+<span class="nc" id="L150"> } catch (NoAlbumFoundException | NoElementFoundException ex) {</span>
+<span class="nc" id="L151"> System.out.println(ex.getMessage());</span>
+<span class="nc" id="L152"> }</span>
+<span class="nc" id="L153"> System.out.println(&quot;Song added to the album!&quot;);</span>
+<span class="nc" id="L154"> printAvailableCommands();</span>
+<span class="nc" id="L155"> choice = scan.nextLine();</span>
+<span class="nc" id="L156"> break;</span>
+ case 'l':
+ // add a new audiobook
+<span class="nc" id="L159"> System.out.println(&quot;Enter a new audiobook: &quot;);</span>
+<span class="nc" id="L160"> System.out.println(&quot;AudioBook title: &quot;);</span>
+<span class="nc" id="L161"> String bTitle = scan.nextLine();</span>
+<span class="nc" id="L162"> System.out.println(&quot;AudioBook category (youth, novel, theater, documentary, speech)&quot;);</span>
+<span class="nc" id="L163"> String bCategory = scan.nextLine();</span>
+<span class="nc" id="L164"> System.out.println(&quot;AudioBook artist: &quot;);</span>
+<span class="nc" id="L165"> String bArtist = scan.nextLine();</span>
+<span class="nc" id="L166"> System.out.println(&quot;AudioBook length in seconds: &quot;);</span>
+<span class="nc" id="L167"> int bLength = Integer.parseInt(scan.nextLine());</span>
+<span class="nc" id="L168"> System.out.println(&quot;AudioBook content: &quot;);</span>
+<span class="nc" id="L169"> String bContent = scan.nextLine();</span>
+<span class="nc" id="L170"> System.out.println(&quot;AudioBook language (french, english, italian, spanish, german)&quot;);</span>
+<span class="nc" id="L171"> String bLanguage = scan.nextLine();</span>
+<span class="nc" id="L172"> AudioBook b = new AudioBook(bTitle, bArtist, bLength, bContent, bLanguage, bCategory);</span>
+<span class="nc" id="L173"> theHub.addElement(b);</span>
+<span class="nc" id="L174"> System.out.println(&quot;Audiobook created! New element list: &quot;);</span>
+<span class="nc" id="L175"> Iterator&lt;AudioElement&gt; itl = theHub.elements();</span>
+<span class="nc bnc" id="L176" title="All 2 branches missed."> while (itl.hasNext()) System.out.println(itl.next().getTitle());</span>
+<span class="nc" id="L177"> printAvailableCommands();</span>
+<span class="nc" id="L178"> choice = scan.nextLine();</span>
+<span class="nc" id="L179"> break;</span>
+ case 'p':
+ //create a new playlist from existing elements
+<span class="nc" id="L182"> System.out.println(&quot;Add an existing song or audiobook to a new playlist&quot;);</span>
+<span class="nc" id="L183"> System.out.println(&quot;Existing playlists:&quot;);</span>
+<span class="nc" id="L184"> Iterator&lt;PlayList&gt; itpl = theHub.playlists();</span>
+<span class="nc bnc" id="L185" title="All 2 branches missed."> while (itpl.hasNext()) {</span>
+<span class="nc" id="L186"> PlayList pl = itpl.next();</span>
+<span class="nc" id="L187"> System.out.println(pl.getTitle());</span>
+<span class="nc" id="L188"> }</span>
+<span class="nc" id="L189"> System.out.println(&quot;Type the name of the playlist you wish to create:&quot;);</span>
+<span class="nc" id="L190"> String playListTitle = scan.nextLine();</span>
+<span class="nc" id="L191"> PlayList pl = new PlayList(playListTitle);</span>
+<span class="nc" id="L192"> theHub.addPlaylist(pl);</span>
+<span class="nc" id="L193"> System.out.println(&quot;Available elements: &quot;);</span>
+
+<span class="nc" id="L195"> Iterator&lt;AudioElement&gt; itael = theHub.elements();</span>
+<span class="nc bnc" id="L196" title="All 2 branches missed."> while (itael.hasNext()) {</span>
+<span class="nc" id="L197"> AudioElement ae = itael.next();</span>
+<span class="nc" id="L198"> System.out.println(ae.getTitle());</span>
+<span class="nc" id="L199"> }</span>
+<span class="nc bnc" id="L200" title="All 2 branches missed."> while (choice.charAt(0) != 'n') {</span>
+<span class="nc" id="L201"> System.out.println(&quot;Type the name of the audio element you wish to add or 'n' to exit:&quot;);</span>
+<span class="nc" id="L202"> String elementTitle = scan.nextLine();</span>
+ try {
+<span class="nc" id="L204"> theHub.addElementToPlayList(elementTitle, playListTitle);</span>
+<span class="nc" id="L205"> } catch (NoPlayListFoundException | NoElementFoundException ex) {</span>
+<span class="nc" id="L206"> System.out.println(ex.getMessage());</span>
+<span class="nc" id="L207"> }</span>
+
+<span class="nc" id="L209"> System.out.println(&quot;Type y to add a new one, n to end&quot;);</span>
+<span class="nc" id="L210"> choice = scan.nextLine();</span>
+<span class="nc" id="L211"> }</span>
+<span class="nc" id="L212"> System.out.println(&quot;Playlist created!&quot;);</span>
+<span class="nc" id="L213"> printAvailableCommands();</span>
+<span class="nc" id="L214"> choice = scan.nextLine();</span>
+<span class="nc" id="L215"> break;</span>
+ case '-':
+ //delete a playlist
+<span class="nc" id="L218"> System.out.println(&quot;Delete an existing playlist. Available playlists:&quot;);</span>
+<span class="nc" id="L219"> Iterator&lt;PlayList&gt; itp = theHub.playlists();</span>
+<span class="nc bnc" id="L220" title="All 2 branches missed."> while (itp.hasNext()) {</span>
+<span class="nc" id="L221"> PlayList p = itp.next();</span>
+<span class="nc" id="L222"> System.out.println(p.getTitle());</span>
+<span class="nc" id="L223"> }</span>
+<span class="nc" id="L224"> String plTitle = scan.nextLine();</span>
+ try {
+<span class="nc" id="L226"> theHub.deletePlayList(plTitle);</span>
+<span class="nc" id="L227"> } catch (NoPlayListFoundException ex) {</span>
+<span class="nc" id="L228"> System.out.println(ex.getMessage());</span>
+<span class="nc" id="L229"> }</span>
+<span class="nc" id="L230"> System.out.println(&quot;Playlist deleted!&quot;);</span>
+<span class="nc" id="L231"> printAvailableCommands();</span>
+<span class="nc" id="L232"> choice = scan.nextLine();</span>
+<span class="nc" id="L233"> break;</span>
+ case 's':
+ //save elements, albums, playlists
+<span class="nc" id="L236"> theHub.saveElements();</span>
+<span class="nc" id="L237"> theHub.saveAlbums();</span>
+<span class="nc" id="L238"> theHub.savePlayLists();</span>
+<span class="nc" id="L239"> System.out.println(&quot;Elements, albums and playlists saved!&quot;);</span>
+<span class="nc" id="L240"> printAvailableCommands();</span>
+<span class="nc" id="L241"> choice = scan.nextLine();</span>
+<span class="nc" id="L242"> break;</span>
+ default:
+
+<span class="nc" id="L245"> break;</span>
+ }
+ }
+<span class="nc" id="L248"> scan.close();</span>
+<span class="nc" id="L249"> }</span>
+
+ private static void printAvailableCommands() {
+<span class="nc" id="L252"> System.out.println(&quot;t: display the album titles, ordered by date&quot;);</span>
+<span class="nc" id="L253"> System.out.println(&quot;g: display songs of an album, ordered by genre&quot;);</span>
+<span class="nc" id="L254"> System.out.println(&quot;d: display songs of an album&quot;);</span>
+<span class="nc" id="L255"> System.out.println(&quot;u: display audiobooks ordered by author&quot;);</span>
+<span class="nc" id="L256"> System.out.println(&quot;c: add a new song&quot;);</span>
+<span class="nc" id="L257"> System.out.println(&quot;a: add a new album&quot;);</span>
+<span class="nc" id="L258"> System.out.println(&quot;+: add a song to an album&quot;);</span>
+<span class="nc" id="L259"> System.out.println(&quot;l: add a new audiobook&quot;);</span>
+<span class="nc" id="L260"> System.out.println(&quot;p: create a new playlist from existing songs and audio books&quot;);</span>
+<span class="nc" id="L261"> System.out.println(&quot;-: delete an existing playlist&quot;);</span>
+<span class="nc" id="L262"> System.out.println(&quot;s: save elements, albums, playlists&quot;);</span>
+<span class="nc" id="L263"> System.out.println(&quot;q: quit program&quot;);</span>
+<span class="nc" id="L264"> }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.main/index.html b/target/site/jacoco/musichub.main/index.html
new file mode 100644
index 0000000..c4e995d
--- /dev/null
+++ b/target/site/jacoco/musichub.main/index.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>musichub.main</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <span class="el_package">musichub.main</span></div><h1>musichub.main</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">588 of 588</td><td class="ctr2">0 %</td><td class="bar">40 of 40</td><td class="ctr2">0 %</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">199</td><td class="ctr2">199</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="Main.html" class="el_class">Main</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="588" alt="588"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="40" alt="40"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">29</td><td class="ctr2" id="g0">29</td><td class="ctr1" id="h0">199</td><td class="ctr2" id="i0">199</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.main/index.source.html b/target/site/jacoco/musichub.main/index.source.html
new file mode 100644
index 0000000..189774f
--- /dev/null
+++ b/target/site/jacoco/musichub.main/index.source.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>musichub.main</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <span class="el_package">musichub.main</span></div><h1>musichub.main</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">588 of 588</td><td class="ctr2">0 %</td><td class="bar">40 of 40</td><td class="ctr2">0 %</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">199</td><td class="ctr2">199</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="Main.java.html" class="el_source">Main.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="588" alt="588"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="40" alt="40"/></td><td class="ctr2" id="e0">0 %</td><td class="ctr1" id="f0">29</td><td class="ctr2" id="g0">29</td><td class="ctr1" id="h0">199</td><td class="ctr2" id="i0">199</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.util/XMLHandler.html b/target/site/jacoco/musichub.util/XMLHandler.html
new file mode 100644
index 0000000..7aff8c8
--- /dev/null
+++ b/target/site/jacoco/musichub.util/XMLHandler.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>XMLHandler</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.html" class="el_package">musichub.util</a> &gt; <span class="el_class">XMLHandler</span></div><h1>XMLHandler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">72 of 72</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="XMLHandler.java.html#L26" class="el_method">XMLHandler()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="23" alt="23"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="XMLHandler.java.html#L41" class="el_method">createXMLFile(Document, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="23" alt="23"/></td><td class="ctr2" id="c1">0 %</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="XMLHandler.java.html#L61" class="el_method">parseXMLFile(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="114" height="10" title="22" alt="22"/></td><td class="ctr2" id="c2">0 %</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="XMLHandler.java.html#L57" class="el_method">createXMLDocument()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0 %</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.util/XMLHandler.java.html b/target/site/jacoco/musichub.util/XMLHandler.java.html
new file mode 100644
index 0000000..b8ee27a
--- /dev/null
+++ b/target/site/jacoco/musichub.util/XMLHandler.java.html
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>XMLHandler.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <a href="index.source.html" class="el_package">musichub.util</a> &gt; <span class="el_source">XMLHandler.java</span></div><h1>XMLHandler.java</h1><pre class="source lang-java linenums">package musichub.util;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import java.io.File;
+import java.io.IOException;
+
+
+public class XMLHandler {
+ TransformerFactory transformerFactory;
+ Transformer transformer;
+ DocumentBuilderFactory documentFactory;
+ DocumentBuilder documentBuilder;
+
+<span class="nc" id="L26"> public XMLHandler() {</span>
+ try {
+<span class="nc" id="L28"> transformerFactory = TransformerFactory.newInstance();</span>
+<span class="nc" id="L29"> transformer = transformerFactory.newTransformer();</span>
+<span class="nc" id="L30"> documentFactory = DocumentBuilderFactory.newInstance();</span>
+<span class="nc" id="L31"> documentBuilder = documentFactory.newDocumentBuilder();</span>
+<span class="nc" id="L32"> } catch (TransformerException | ParserConfigurationException tfe) {</span>
+<span class="nc" id="L33"> tfe.printStackTrace();</span>
+<span class="nc" id="L34"> }</span>
+<span class="nc" id="L35"> }</span>
+
+ public void createXMLFile(Document document, String filePath) {
+ try {
+ // create the xml file
+ //transform the DOM Object to an XML File
+<span class="nc" id="L41"> DOMSource domSource = new DOMSource(document);</span>
+<span class="nc" id="L42"> StreamResult streamResult = new StreamResult(new File(filePath));</span>
+
+ // If you use
+ // StreamResult result = new StreamResult(System.out);
+ // the output will be pushed to the standard output ...
+ // You can use that for debugging
+
+<span class="nc" id="L49"> transformer.transform(domSource, streamResult);</span>
+
+<span class="nc" id="L51"> } catch (TransformerException tfe) {</span>
+<span class="nc" id="L52"> tfe.printStackTrace();</span>
+<span class="nc" id="L53"> }</span>
+<span class="nc" id="L54"> }</span>
+
+ public Document createXMLDocument() {
+<span class="nc" id="L57"> return documentBuilder.newDocument();</span>
+ }
+
+ public NodeList parseXMLFile(String filePath) {
+<span class="nc" id="L61"> NodeList elementNodes = null;</span>
+ try {
+<span class="nc" id="L63"> Document document = documentBuilder.parse(new File(filePath));</span>
+<span class="nc" id="L64"> Element root = document.getDocumentElement();</span>
+
+<span class="nc" id="L66"> elementNodes = root.getChildNodes();</span>
+<span class="nc" id="L67"> } catch (SAXException | IOException e) {</span>
+<span class="nc" id="L68"> e.printStackTrace();</span>
+<span class="nc" id="L69"> }</span>
+<span class="nc" id="L70"> return elementNodes;</span>
+ }
+
+
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.util/index.html b/target/site/jacoco/musichub.util/index.html
new file mode 100644
index 0000000..1194ec1
--- /dev/null
+++ b/target/site/jacoco/musichub.util/index.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>musichub.util</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <span class="el_package">musichub.util</span></div><h1>musichub.util</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">72 of 72</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="XMLHandler.html" class="el_class">XMLHandler</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">25</td><td class="ctr2" id="i0">25</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k0">4</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/site/jacoco/musichub.util/index.source.html b/target/site/jacoco/musichub.util/index.source.html
new file mode 100644
index 0000000..e6f6dba
--- /dev/null
+++ b/target/site/jacoco/musichub.util/index.source.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="fr"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>musichub.util</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">spoteezer</a> &gt; <span class="el_package">musichub.util</span></div><h1>musichub.util</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">72 of 72</td><td class="ctr2">0 %</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="XMLHandler.java.html" class="el_source">XMLHandler.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0 %</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">25</td><td class="ctr2" id="i0">25</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k0">4</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html> \ No newline at end of file
diff --git a/target/spoteezer-0.1.0.jar b/target/spoteezer-0.1.0.jar
index 9f65573..16e8971 100644
--- a/target/spoteezer-0.1.0.jar
+++ b/target/spoteezer-0.1.0.jar
Binary files differ
diff --git a/target/surefire-reports/TEST-musichub.business.PathValidationTest.xml b/target/surefire-reports/TEST-musichub.business.PathValidationTest.xml
new file mode 100644
index 0000000..4a19c26
--- /dev/null
+++ b/target/surefire-reports/TEST-musichub.business.PathValidationTest.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="musichub.business.PathValidationTest" time="0.014" tests="2" errors="0" skipped="0" failures="0">
+ <properties>
+ <property name="java.specification.version" value="16"/>
+ <property name="sun.cpu.isalist" value="amd64"/>
+ <property name="sun.jnu.encoding" value="Cp1252"/>
+ <property name="java.class.path" value="C:\Users\SoftA\Documents\spoteezer\target\test-classes;C:\Users\SoftA\Documents\spoteezer\target\classes;C:\Users\SoftA\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.0.2\junit-jupiter-api-5.0.2.jar;C:\Users\SoftA\.m2\repository\org\opentest4j\opentest4j\1.0.0\opentest4j-1.0.0.jar;C:\Users\SoftA\.m2\repository\org\junit\platform\junit-platform-commons\1.0.2\junit-platform-commons-1.0.2.jar;C:\Users\SoftA\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.0.2\junit-jupiter-engine-5.0.2.jar;C:\Users\SoftA\.m2\repository\org\junit\platform\junit-platform-engine\1.0.2\junit-platform-engine-1.0.2.jar;"/>
+ <property name="java.vm.vendor" value="Oracle Corporation"/>
+ <property name="sun.arch.data.model" value="64"/>
+ <property name="user.variant" value=""/>
+ <property name="java.vendor.url" value="https://java.oracle.com/"/>
+ <property name="user.timezone" value="Europe/Paris"/>
+ <property name="os.name" value="Windows 10"/>
+ <property name="java.vm.specification.version" value="16"/>
+ <property name="sun.java.launcher" value="SUN_STANDARD"/>
+ <property name="user.country" value="FR"/>
+ <property name="sun.boot.library.path" value="C:\Users\SoftA\.jdks\openjdk-16.0.1\bin"/>
+ <property name="sun.java.command" value="C:\Users\SoftA\AppData\Local\Temp\surefire432352315427642492\surefirebooter9321675300695943827.jar C:\Users\SoftA\AppData\Local\Temp\surefire432352315427642492 2021-06-26T14-30-52_984-jvmRun1 surefire12207114920762145658tmp surefire_04118465738105299962tmp"/>
+ <property name="jdk.debug" value="release"/>
+ <property name="surefire.test.class.path" value="C:\Users\SoftA\Documents\spoteezer\target\test-classes;C:\Users\SoftA\Documents\spoteezer\target\classes;C:\Users\SoftA\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.0.2\junit-jupiter-api-5.0.2.jar;C:\Users\SoftA\.m2\repository\org\opentest4j\opentest4j\1.0.0\opentest4j-1.0.0.jar;C:\Users\SoftA\.m2\repository\org\junit\platform\junit-platform-commons\1.0.2\junit-platform-commons-1.0.2.jar;C:\Users\SoftA\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.0.2\junit-jupiter-engine-5.0.2.jar;C:\Users\SoftA\.m2\repository\org\junit\platform\junit-platform-engine\1.0.2\junit-platform-engine-1.0.2.jar;"/>
+ <property name="sun.cpu.endian" value="little"/>
+ <property name="user.home" value="C:\Users\SoftA"/>
+ <property name="user.language" value="fr"/>
+ <property name="java.specification.vendor" value="Oracle Corporation"/>
+ <property name="java.version.date" value="2021-04-20"/>
+ <property name="java.home" value="C:\Users\SoftA\.jdks\openjdk-16.0.1"/>
+ <property name="file.separator" value="\"/>
+ <property name="basedir" value="C:\Users\SoftA\Documents\spoteezer"/>
+ <property name="java.vm.compressedOopsMode" value="Zero based"/>
+ <property name="line.separator" value="&#10;"/>
+ <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
+ <property name="java.specification.name" value="Java Platform API Specification"/>
+ <property name="surefire.real.class.path" value="C:\Users\SoftA\AppData\Local\Temp\surefire432352315427642492\surefirebooter9321675300695943827.jar"/>
+ <property name="user.script" value=""/>
+ <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
+ <property name="java.runtime.version" value="16.0.1+9-24"/>
+ <property name="user.name" value="SoftA"/>
+ <property name="path.separator" value=";"/>
+ <property name="os.version" value="10.0"/>
+ <property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
+ <property name="file.encoding" value="Cp1252"/>
+ <property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
+ <property name="localRepository" value="C:\Users\SoftA\.m2\repository"/>
+ <property name="java.vendor.url.bug" value="https://bugreport.java.com/bugreport/"/>
+ <property name="java.io.tmpdir" value="C:\Users\SoftA\AppData\Local\Temp\"/>
+ <property name="java.version" value="16.0.1"/>
+ <property name="user.dir" value="C:\Users\SoftA\Documents\spoteezer"/>
+ <property name="os.arch" value="amd64"/>
+ <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+ <property name="sun.os.patch.level" value=""/>
+ <property name="java.library.path" value="C:\Users\SoftA\.jdks\openjdk-16.0.1\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Oculus\Support\oculus-runtime;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Git\cmd;C:\Users\SoftA\.jdks\openjdk-16.0.1\bin;C:\Users\SoftA\AppData\Local\Microsoft\WindowsApps;C:\ffmpeg\bin;C:\apache-maven-3.8.1\bin;;."/>
+ <property name="java.vm.info" value="mixed mode, sharing"/>
+ <property name="java.vendor" value="Oracle Corporation"/>
+ <property name="java.vm.version" value="16.0.1+9-24"/>
+ <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+ <property name="java.class.version" value="60.0"/>
+ </properties>
+ <testcase name="testPathValidationClass" classname="musichub.business.PathValidationTest" time="0.007"/>
+ <testcase name="testIsPathValid" classname="musichub.business.PathValidationTest" time="0.002"/>
+</testsuite> \ No newline at end of file
diff --git a/target/surefire-reports/musichub.business.PathValidationTest.txt b/target/surefire-reports/musichub.business.PathValidationTest.txt
new file mode 100644
index 0000000..87f14cb
--- /dev/null
+++ b/target/surefire-reports/musichub.business.PathValidationTest.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: musichub.business.PathValidationTest
+-------------------------------------------------------------------------------
+Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 s - in musichub.business.PathValidationTest
diff --git a/target/test-classes/musichub/business/PathValidationTest.class b/target/test-classes/musichub/business/PathValidationTest.class
new file mode 100644
index 0000000..24d063b
--- /dev/null
+++ b/target/test-classes/musichub/business/PathValidationTest.class
Binary files differ