diff --git a/src/main/java/fr/univamu/progav/td9/BookException.java b/src/main/java/fr/univamu/progav/td9/BookException.java index 4a4f47b70a570e5241522bb211262e6d87be932f..de3e1e88ce0100ebc3cc56918c82b52359c0831d 100644 --- a/src/main/java/fr/univamu/progav/td9/BookException.java +++ b/src/main/java/fr/univamu/progav/td9/BookException.java @@ -2,8 +2,4 @@ package fr.univamu.progav.td9; public class BookException extends Exception { - public Book book() { - // TODO - return null; - } } diff --git a/src/main/java/fr/univamu/progav/td9/BookNotFoundException.java b/src/main/java/fr/univamu/progav/td9/BookNotFoundException.java index caa7cd3ed44483d4ecfcec5de94a289514f167af..5ab458f0d90a9030ff8f8d6e5856608723738e1d 100644 --- a/src/main/java/fr/univamu/progav/td9/BookNotFoundException.java +++ b/src/main/java/fr/univamu/progav/td9/BookNotFoundException.java @@ -1,4 +1,5 @@ package fr.univamu.progav.td9; public class BookNotFoundException extends BookException { + //TODO } diff --git a/src/main/java/fr/univamu/progav/td9/BookUnavailableException.java b/src/main/java/fr/univamu/progav/td9/BookUnavailableException.java index a6dfffc9384122ce1dfc019c080d44978b350ecd..be7bebdf085627dafae376a74c117a41bbe1538b 100644 --- a/src/main/java/fr/univamu/progav/td9/BookUnavailableException.java +++ b/src/main/java/fr/univamu/progav/td9/BookUnavailableException.java @@ -1,4 +1,5 @@ package fr.univamu.progav.td9; public class BookUnavailableException extends BookException { + // TODO } diff --git a/src/main/java/fr/univamu/progav/td9/BulkCheckoutResult.java b/src/main/java/fr/univamu/progav/td9/BulkCheckoutResult.java index 5cb03a3b043f6b6a81eed1bb548adb662b14a99f..0081304788f23c56f1ad5e5fd2509cc3c69ded88 100644 --- a/src/main/java/fr/univamu/progav/td9/BulkCheckoutResult.java +++ b/src/main/java/fr/univamu/progav/td9/BulkCheckoutResult.java @@ -1,5 +1,6 @@ package fr.univamu.progav.td9; +import java.util.ArrayList; import java.util.List; public record BulkCheckoutResult( @@ -7,6 +8,9 @@ public record BulkCheckoutResult( List<BookException> failedCheckouts ) { + public BulkCheckoutResult() { + this(new ArrayList<>(), new ArrayList<>()); + } public boolean isCompletelySuccessful() { // TODO diff --git a/src/main/java/fr/univamu/progav/td9/Library.java b/src/main/java/fr/univamu/progav/td9/Library.java index cd7509a5ba67533e7529656cc5e949f8be018223..2464642e433d836c85944fc1d3bcf5d0d6513f80 100644 --- a/src/main/java/fr/univamu/progav/td9/Library.java +++ b/src/main/java/fr/univamu/progav/td9/Library.java @@ -5,9 +5,12 @@ import java.util.List; import java.util.Map; public class Library { + + private final Map<String, Book> collection = new HashMap<>(); private final Map<Book, BookStatus> bookStatuses = new HashMap<>(); public void addBook(Book book) { + collection.put(book.isbn(), book); bookStatuses.put(book, BookStatus.AVAILABLE); } @@ -16,17 +19,20 @@ public class Library { return null; } - public void checkoutBook(Book book) throws BookException { + + public BookStatus getBookStatus(String isbn) { // TODO + return null; } - public BulkCheckoutResult checkoutBooks(List<Book> books) { + public Book checkoutBook(String isbn) { // TODO return null; } - public BookStatus getBookStatus(Book book) { + public BulkCheckoutResult checkoutBooks(List<String> isbns) { // TODO return null; } + } diff --git a/src/main/java/fr/univamu/progav/td9/TD9.md b/src/main/java/fr/univamu/progav/td9/TD9.md index 88c4dc51352455702cf55731d46d50af5f77da11..b419a160c9e711f4cb7af77e402c8df36b263d73 100644 --- a/src/main/java/fr/univamu/progav/td9/TD9.md +++ b/src/main/java/fr/univamu/progav/td9/TD9.md @@ -3,7 +3,7 @@ gestion des livres d'une bibliothèque, qui n'est pas un exemple très pertinent pour l'utilisation d'exceptions, mais qui a l'avantage d'être relativement simple pour apprendre les bases de la manipulation des exceptions. -La bibliothèque ```Library``` possède une collection de livre ```Book```, et +La bibliothèque ```Library``` possède une collection de livres ```Book```, et les clients peuvent venir emprunter un ou plusieurs livres (méthodes ```checkoutBook``` et ```checkoutBooks```). Un livre peut donc être disponible ou indisponible (classe ```BookStatus```), ou bien ne pas faire @@ -16,27 +16,21 @@ bibliothèque, l'exception ```BookNotFoundException``` sera levée. Exercice 1 ========== -Compléter la classe d'exception ```BookException```, en y ajoutant une -propriété ```Book```, et une méthode ```toString``` affichant le livre. -Compléter aussi la méthode ```book```. +Compléter les 2 extensions ```BookNotFoundException``` (possédant un code +ISBN) et ```BookUnavailable``` (possédant un livre) de la +classe```BookException```. Assurez-vous que la méthode ```getMessage``` de +chacune délivre un message adapté et mentionnant soit le code ISBN, soit le +livre concerné. Exercice 2 ========== -Compléter les 2 extensions ```BookNotFoundException``` et -```BookUnavailable``` de ```BookException```. Assurez-vous que le -```toString``` de chacune affiche un message adapté et mentionnant le livre -concerné. - -Exercice 3 -========== - Compléter la méthode ```findBook``` de la classe ```Library```. Elle doit retourner le livre dont le code ISBN est fourni. S'il n'existe pas un tel livre, il faut émettre l'exception ```BookNotFoundException```. Ajouter la déclaration d'exception à la méthode. -Exercice 4 +Exercice 3 ========== Compléter la méthode ```checkBookStatus``` de la classe ```Library```, @@ -44,7 +38,7 @@ retournant le status d'un livre précisé par son code ISBN. Si le livre n'existe pas, l'exception ```BookNotFound``` sera émise. Ajouter la déclaration d'exception à la méthode. -Exercice 5 +Exercice 4 ========== Compléter la méthode ```checkoutBook``` de la classe ```Library```. @@ -53,7 +47,7 @@ code ISBN), et modifie alors son status à ```BORROWED```. Si les conditions ne sont pas respectées, la méthode émet l'exception appropriée. Ajouter la déclaration d'exception à la méthode. -Exercice 6 +Exercice 5 ========== Compléter la méthode ```isCompletelySuccessful``` de la classe @@ -62,9 +56,10 @@ réservation d'une liste de livres, comprenant : - la liste des livres empruntés; - la liste des échecs des tentatives d'emprunt. -Exercice 7 +Exercice 6 ========== Compléter la méthode ```checkoutBooks``` de la classe ```Library```. +Vérifier votre travail à l'aide des tests fournis. \ No newline at end of file diff --git a/src/test/java/fr/univamu/progav/td9/LibraryTest.java b/src/test/java/fr/univamu/progav/td9/LibraryTest.java index e5abf05f9a6ce4c36f53332a312f4bd03777c736..8d5d6e894297227568a0d7b980577260f2feea46 100644 --- a/src/test/java/fr/univamu/progav/td9/LibraryTest.java +++ b/src/test/java/fr/univamu/progav/td9/LibraryTest.java @@ -34,28 +34,34 @@ public class LibraryTest { @Test void testSingleCheckoutSuccess() throws BookException { - library.checkoutBook(book1); - assertEquals(BookStatus.BORROWED, library.getBookStatus(book1)); + library.checkoutBook("123"); + assertEquals(BookStatus.BORROWED, library.getBookStatus("123")); } @Test void testBulkCheckoutPartialSuccess() throws BookException { - library.checkoutBook(book1); + library.checkoutBook("123"); Book nonExistentBook = new Book("999", "Nonexistent"); - List<Book> booksToCheckout = List.of(book1, book2, nonExistentBook); + List<String> booksToCheckout = List.of("123", "456", "999"); BulkCheckoutResult result = library.checkoutBooks(booksToCheckout); assertFalse(result.isCompletelySuccessful()); assertEquals(1, result.successfulCheckouts().size()); assertEquals(2, result.failedCheckouts().size()); assertInstanceOf(BookUnavailableException.class, result.failedCheckouts().get(0)); assertInstanceOf(BookNotFoundException.class, result.failedCheckouts().get(1)); - assertEquals(book1,result.failedCheckouts().get(0).book()); - assertEquals(nonExistentBook,result.failedCheckouts().get(1).book()); + assertEquals( + "Book1 (123): book unavailable", + result.failedCheckouts().get(0).getMessage() + ); + assertEquals( + "Nonexistent (999): book not found", + result.failedCheckouts().get(1).getMessage() + ); } @Test void testBulkCheckoutAllSuccess() { - List<Book> booksToCheckout = List.of(book1, book2); + List<String> booksToCheckout = List.of("123", "456"); BulkCheckoutResult result = library.checkoutBooks(booksToCheckout); assertTrue(result.isCompletelySuccessful());