import java.util.Collection; import java.util.Optional; import java.util.SortedSet; interface SearchOperations { /** * Returnerar antalet unika artister *

* Exempel: * numberOfArtists() => 0 * numberOfArtists() => 100 * * @return antalet unika artister (long) */ long numberOfArtists(); /** * Returnerar antalet genrer *

* Exempel: * numberOfGenres() => 25 * * @return antalet genrer (long) */ long numberOfGenres(); /** * Returnerar antalet unika titlar *

* Exempel: * numberOfTitles => 500 * * @return antalet unika titlar (long) */ long numberOfTitles(); /** * Kontrollerar om det finns en artist med det sökta namnet. *

* Exempel: * doesArtistExist("Phoebe Bridgers") => false * doesArtistExist("Miles Davis") => true * * @param name Artistens namn * @return true om artisten finns, false om inte */ boolean doesArtistExist(String name); /** * Ger en omodifierbar samling med genrer. *

* Exempel: * getGenres() => en samling med 19 genrer. * * @return en omodifierbar samling med genrer */ Collection getGenres(); /** * Hämtar inspelning med den sökta titeln. *

* Exempel: * getRecordingByName("Punisher") => null * getRecordingByName("Giant Steps") => referens till Recording-objekt gär getTitle().equals("Giant Steps") * * @param title Inspelningens titel * @return ett Recodring-objekt med den sökta inspelningen om den hittades, null annars */ Recording getRecordingByName(String title); /** * Hämtar en omodifierbar samling med inspelningar från och med det angivna året. *

* Exempel: * getRecordingsAfter(2010) => samling med ett antal (kan vara 0) objekt * * @param year året som sökningen startar från (och inkluderar) * @return en omodifierbar samling med inspelningar */ Collection getRecordingsAfter(int year); /** * Hämtar en omodifierbar samling med inspelningar av artisten * sorterade i stigande ordning på år. *

* Exempel: * getRecordingsByArtistOrderedByYearAsc("John Coltrane") => samling med ett antal (kan vara 0) objekt * * @param artist den sökta artisten * @return ett omodifierbar samling med inspelningar */ SortedSet getRecordingsByArtistOrderedByYearAsc(String artist); /** * Hämtar en omodifierbar samling med inspelningar i genren. *

* Exempel: * getRecordingsByGenre("Jazz") => samling med ett antal (kan vara 0) objekt * * @param genre den sökta genren * @return ett omodifierbar samling med inspelningar */ Collection getRecordingsByGenre(String genre); /** * Hämtar en omodifierbar samling med inspelningar i genren gjorda * mellan de angivna åren *

* Exempel: * getRecordingsByGenreAndYear("Jazz", 1950, 1960) => samling med ett antal (kan vara 0) objekt * * @param genre den efterfrågade genren * @param yearFrom första året i intervallet * @param yearTo sista året i intervallet * @return en omodifierbar samling */ Collection getRecordingsByGenreAndYear(String genre, int yearFrom, int yearTo); /** * Tar emot en samling och returnerar en ny samling * som bara innehåller de Recordings som inte redan fanns i databasen. * * @param offered En samling med inspelningar * @return en omodifierbar samling med de inspelningar som inte redan finns */ Collection offerHasNewRecordings(Collection offered); /** * Hämtar en omodifierbar samling med inspelningar innan det angivna året. *

* Exempel: * optionalGetRecordingsBefore(1960) => samling med ett antal (kan vara 0) objekt daterade < 1960 * * @param year året som sökningen löper till (och exkluderar) * @return ett omodifierbar samling med inspelningar */ default Collection optionalGetRecordingsBefore(int year) { return null; } /** * Hämtar en omodifierbar samling med inspelningar av den sökta artisten. * Samlingen ska vara sorterad på titel i stigande ordning A -> Z *

* Exempel: * optionalGetRecordingsByArtistOrderedByTitleAsc(1960) => sorterad samling med ett antal (kan vara 0) objekt * * @param artist den sökta artisten * @return ett omodifierbar samling med inspelningar sorterade på titel */ default SortedSet optionalGetRecordingsByArtistOrderedByTitleAsc(String artist) { return null; } /** * Hämtar en omodifierbar samling med inspelningar från det angivna året. *

* Exempel: * optionalGetRecordingsFrom(1983) => samling med ett antal (kan vara 0) objekt * * @param year det sökta året * @return en omodifierbar samling med inspelningar */ default Collection optionalGetRecordingsFrom(int year) { return null; } }