/* * Author: CHEN Yongyuan (Walter) 1930006025 from OOP(1007) * Date: 2022-04-25 * Description: This is the Library class. */ import java.util.ArrayList; public class Library { private String name; private ArrayList users; private ArrayList listeners; /** * Constructor. * * @param name */ public Library(String name) { this.name = name; // init array list this.users = new ArrayList(); this.listeners = new ArrayList(); } // GUI Related public void addListener(ModelListener listener) { listeners.add(listener); } // GUI Related private void notifyListeners() { for (ModelListener listener : listeners) { listener.update(); } } /** * Add the user to the array list. * * @param user The user to be added */ public void addUser(IUser user) { users.add(user); notifyListeners(); } /** * The total number of bookds borrowed by all users. * * @return the number of books. */ public int totalBorrowedBooks() { int total = 0; for (IUser user : users) { total += user.getBook(); } return total; } /** * Get the number of books borrowed by this user. * * @param name the name of the query user * @return the number of books * @throws UnknownUserException if user not found */ public int getBook(String name) throws UnknownUserException { for (IUser user : users) { if (user.getName().equals(name)) { return user.getBook(); } } // user not found throw new UnknownUserException("User " + name + " unknown."); } /** * Change the number of books currently borrowed by that user. * * @param name the user's name * @param number the number of books * @throws UnknownUserException user not found * @throws NotALenderException can not lend book */ public void moreBook(String name, int number) throws UnknownUserException, NotALenderException { for (IUser user : users) { if (user.getName().equals(name)) { user.moreBook(number); notifyListeners(); return; } } // user not found throw new UnknownUserException("User " + name + " unknown."); } /** * Test. */ public static void testLibrary() { Library li = new Library("UIC Library"); System.out.println(li.totalBorrowedBooks() == 0); li.addUser(new Lender("L1", 10)); try { System.out.println(li.getBook("L1") == -10); System.out.println(li.totalBorrowedBooks() == -10); li.addUser(new Borrower("B1", 20)); System.out.println(li.getBook("L1") == -10); System.out.println(li.getBook("B1") == 20); System.out.println(li.totalBorrowedBooks() == 10); li.getBook("B2"); } catch (UnknownUserException ex) { System.out.println(ex.getMessage().equals("User B2 unknown.")); } catch (NotALenderException ex) { // This should never happen! System.out.println(false); } // More test cases are needed } }