package com.springapp.mvc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public enum BooksDB {
INSTANCE;
private final ConcurrentMap<String, ArrayList<BookData>> books = new ConcurrentHashMap<String, ArrayList<BookData>>();
private final Map<String, BookData> isbnToBook = new HashMap<String, BookData>();
private volatile boolean initialized = false;
public void initialize() {
if (!initialized) {
synchronized (INSTANCE) {
if (!initialized) {
books.put("Thriller", getThrillerBooks());
books.put("Romance", getRomanceBooks());
books.put("Science Fiction", getScienceFictionBooks());
books.put("Drama", getDramaBooks());
books.put("Comedy", getComedyBooks());
initialized = true;
}
}
}
}
public ArrayList<BookData> getBooks(String id) {
return books.get(id);
}
public void loanBook(String isbn) throws Exception {
BookData bookData = isbnToBook.get(isbn);
if (bookData.isLoaned()) {
throw new Exception("Error, book already loaned");
}
bookData.setLoaned(true);
}
private ArrayList<BookData> getThrillerBooks() {
ArrayList<BookData> b = new ArrayList<BookData>();
b.add(new BookData(new Book("The Da Vinci Code", "Dan Brown", "0307474275")));
b.add(new BookData(new Book("Gone Girl", "Gillian Flynn", "030758836x")));
b.add(new BookData(new Book("The Lost Symbol", "Dan Brown", "0307950689")));
b.add(new BookData(new Book("Digital Fortress", "Dan Brown", "0312944926")));
for (BookData bookData : b) {
isbnToBook.put(bookData.getBook().getIsbn10(), bookData);
}
return b;
}
private ArrayList<BookData> getRomanceBooks() {
ArrayList<BookData> b = new ArrayList<BookData>();
b.add(new BookData(new Book("Twilight", "Stephenie Meyer", "0316015849")));
b.add(new BookData(new Book("Pride and Prejudice", "Jane Austen", "0486284735")));
b.add(new BookData(new Book("Fifty Shades of Grey", "E.L. James", "0345803485")));
b.add(new BookData(new Book("The Fault in Our Stars", "John Green", "014242417X")));
addByIsbn(b);
return b;
}
private ArrayList<BookData> getScienceFictionBooks() {
ArrayList<BookData> b = new ArrayList<BookData>();
b.add(new BookData(new Book("Mockingjay", "Suzanne Collins", "0545663261")));
b.add(new BookData(new Book("Breaking Dawn", "Stephenie Meyer", "9780316067935")));
b.add(new BookData(new Book("The Sea of Monsters", "Dan Brown", "1423103343")));
b.add(new BookData(new Book("Stranger in a Strange Land", "Robert A. Heinlein", "0441788386")));
addByIsbn(b);
return b;
}
private ArrayList<BookData> getDramaBooks() {
ArrayList<BookData> b = new ArrayList<BookData>();
b.add(new BookData(new Book("Romeo and Juliet", "William Shakespeare", "0743477111")));
b.add(new BookData(new Book("The Crucible", "Arthur Miller", "0142437336")));
b.add(new BookData(new Book("The Tempest", "William Shakespeare", "0743482832")));
b.add(new BookData(new Book("The Importance of Being Earnest", "Oscar Wilde", "0486264785")));
addByIsbn(b);
return b;
}
private ArrayList<BookData> getComedyBooks() {
ArrayList<BookData> b = new ArrayList<BookData>();
b.add(new BookData(new Book("Bossypants", "Tina Fey", "0316056898")));
b.add(new BookData(new Book("Is Everyone Hanging Out Without Me?", "Mindy Kaling", "9780307886279")));
b.add(new BookData(new Book("The Color of Magic", "Terry Pratchett", "0062225677")));
b.add(new BookData(new Book("Me Talk Pretty One Day", "David Sedaris", "0316776963")));
addByIsbn(b);
return b;
}
private void addByIsbn(ArrayList<BookData> b) {
for (BookData bookData : b) {
isbnToBook.put(bookData.getBook().getIsbn10(), bookData);
}
}
}