Skip to content
Snippets Groups Projects
Commit a31594bb authored by Guyslain's avatar Guyslain
Browse files

TD 9 exceptions up

parent c5c7887f
Branches
No related tags found
No related merge requests found
...@@ -2,8 +2,4 @@ package fr.univamu.progav.td9; ...@@ -2,8 +2,4 @@ package fr.univamu.progav.td9;
public class BookException extends Exception { public class BookException extends Exception {
public Book book() {
// TODO
return null;
}
} }
package fr.univamu.progav.td9; package fr.univamu.progav.td9;
public class BookNotFoundException extends BookException { public class BookNotFoundException extends BookException {
//TODO
} }
package fr.univamu.progav.td9; package fr.univamu.progav.td9;
public class BookUnavailableException extends BookException { public class BookUnavailableException extends BookException {
// TODO
} }
package fr.univamu.progav.td9; package fr.univamu.progav.td9;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public record BulkCheckoutResult( public record BulkCheckoutResult(
...@@ -7,6 +8,9 @@ public record BulkCheckoutResult( ...@@ -7,6 +8,9 @@ public record BulkCheckoutResult(
List<BookException> failedCheckouts List<BookException> failedCheckouts
) { ) {
public BulkCheckoutResult() {
this(new ArrayList<>(), new ArrayList<>());
}
public boolean isCompletelySuccessful() { public boolean isCompletelySuccessful() {
// TODO // TODO
......
...@@ -5,9 +5,12 @@ import java.util.List; ...@@ -5,9 +5,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class Library { public class Library {
private final Map<String, Book> collection = new HashMap<>();
private final Map<Book, BookStatus> bookStatuses = new HashMap<>(); private final Map<Book, BookStatus> bookStatuses = new HashMap<>();
public void addBook(Book book) { public void addBook(Book book) {
collection.put(book.isbn(), book);
bookStatuses.put(book, BookStatus.AVAILABLE); bookStatuses.put(book, BookStatus.AVAILABLE);
} }
...@@ -16,17 +19,20 @@ public class Library { ...@@ -16,17 +19,20 @@ public class Library {
return null; return null;
} }
public void checkoutBook(Book book) throws BookException {
public BookStatus getBookStatus(String isbn) {
// TODO // TODO
return null;
} }
public BulkCheckoutResult checkoutBooks(List<Book> books) { public Book checkoutBook(String isbn) {
// TODO // TODO
return null; return null;
} }
public BookStatus getBookStatus(Book book) { public BulkCheckoutResult checkoutBooks(List<String> isbns) {
// TODO // TODO
return null; return null;
} }
} }
...@@ -3,7 +3,7 @@ gestion des livres d'une bibliothèque, qui n'est pas un exemple très ...@@ -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 pertinent pour l'utilisation d'exceptions, mais qui a l'avantage d'être
relativement simple pour apprendre les bases de la manipulation des exceptions. 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 les clients peuvent venir emprunter un ou plusieurs livres (méthodes
```checkoutBook``` et ```checkoutBooks```). Un livre peut donc être ```checkoutBook``` et ```checkoutBooks```). Un livre peut donc être
disponible ou indisponible (classe ```BookStatus```), ou bien ne pas faire disponible ou indisponible (classe ```BookStatus```), ou bien ne pas faire
...@@ -16,27 +16,21 @@ bibliothèque, l'exception ```BookNotFoundException``` sera levée. ...@@ -16,27 +16,21 @@ bibliothèque, l'exception ```BookNotFoundException``` sera levée.
Exercice 1 Exercice 1
========== ==========
Compléter la classe d'exception ```BookException```, en y ajoutant une Compléter les 2 extensions ```BookNotFoundException``` (possédant un code
propriété ```Book```, et une méthode ```toString``` affichant le livre. ISBN) et ```BookUnavailable``` (possédant un livre) de la
Compléter aussi la méthode ```book```. 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 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 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 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 livre, il faut émettre l'exception ```BookNotFoundException```. Ajouter la
déclaration d'exception à la méthode. déclaration d'exception à la méthode.
Exercice 4 Exercice 3
========== ==========
Compléter la méthode ```checkBookStatus``` de la classe ```Library```, 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 ...@@ -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 n'existe pas, l'exception ```BookNotFound``` sera émise. Ajouter la
déclaration d'exception à la méthode. déclaration d'exception à la méthode.
Exercice 5 Exercice 4
========== ==========
Compléter la méthode ```checkoutBook``` de la classe ```Library```. 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 ...@@ -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 ne sont pas respectées, la méthode émet l'exception appropriée. Ajouter la
déclaration d'exception à la méthode. déclaration d'exception à la méthode.
Exercice 6 Exercice 5
========== ==========
Compléter la méthode ```isCompletelySuccessful``` de la classe Compléter la méthode ```isCompletelySuccessful``` de la classe
...@@ -62,9 +56,10 @@ réservation d'une liste de livres, comprenant : ...@@ -62,9 +56,10 @@ réservation d'une liste de livres, comprenant :
- la liste des livres empruntés; - la liste des livres empruntés;
- la liste des échecs des tentatives d'emprunt. - la liste des échecs des tentatives d'emprunt.
Exercice 7 Exercice 6
========== ==========
Compléter la méthode ```checkoutBooks``` de la classe ```Library```. 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
...@@ -34,28 +34,34 @@ public class LibraryTest { ...@@ -34,28 +34,34 @@ public class LibraryTest {
@Test @Test
void testSingleCheckoutSuccess() throws BookException { void testSingleCheckoutSuccess() throws BookException {
library.checkoutBook(book1); library.checkoutBook("123");
assertEquals(BookStatus.BORROWED, library.getBookStatus(book1)); assertEquals(BookStatus.BORROWED, library.getBookStatus("123"));
} }
@Test @Test
void testBulkCheckoutPartialSuccess() throws BookException { void testBulkCheckoutPartialSuccess() throws BookException {
library.checkoutBook(book1); library.checkoutBook("123");
Book nonExistentBook = new Book("999", "Nonexistent"); 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); BulkCheckoutResult result = library.checkoutBooks(booksToCheckout);
assertFalse(result.isCompletelySuccessful()); assertFalse(result.isCompletelySuccessful());
assertEquals(1, result.successfulCheckouts().size()); assertEquals(1, result.successfulCheckouts().size());
assertEquals(2, result.failedCheckouts().size()); assertEquals(2, result.failedCheckouts().size());
assertInstanceOf(BookUnavailableException.class, result.failedCheckouts().get(0)); assertInstanceOf(BookUnavailableException.class, result.failedCheckouts().get(0));
assertInstanceOf(BookNotFoundException.class, result.failedCheckouts().get(1)); assertInstanceOf(BookNotFoundException.class, result.failedCheckouts().get(1));
assertEquals(book1,result.failedCheckouts().get(0).book()); assertEquals(
assertEquals(nonExistentBook,result.failedCheckouts().get(1).book()); "Book1 (123): book unavailable",
result.failedCheckouts().get(0).getMessage()
);
assertEquals(
"Nonexistent (999): book not found",
result.failedCheckouts().get(1).getMessage()
);
} }
@Test @Test
void testBulkCheckoutAllSuccess() { void testBulkCheckoutAllSuccess() {
List<Book> booksToCheckout = List.of(book1, book2); List<String> booksToCheckout = List.of("123", "456");
BulkCheckoutResult result = library.checkoutBooks(booksToCheckout); BulkCheckoutResult result = library.checkoutBooks(booksToCheckout);
assertTrue(result.isCompletelySuccessful()); assertTrue(result.isCompletelySuccessful());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment