package com.oreilly.jent.jsf.library.backing;

/**
 * In general, you may use the code in this book in your programs and 
 * documentation. You do not need to contact us for permission unless 
 * you're reproducing a significant portion of the code. For example, 
 * writing a program that uses several chunks of code from this book does 
 * not require permission. Selling or distributing a CD-ROM of examples 
 * from O'Reilly books does require permission. Answering a question by 
 * citing this book and quoting example code does not require permission. 
 * Incorporating a significant amount of example code from this book into 
 * your product's documentation does require permission.
 * 
 * We appreciate, but do not require, attribution. An attribution usually 
 * includes the title, author, publisher, and ISBN. For example: 
 * 
 *   "Java Enterprise in a Nutshell, Third Edition, 
 *    by Jim Farley and William Crawford 
 *    with Prakash Malani, John G. Norman, and Justin Gehtland. 
 *    Copyright 2006 O'Reilly Media, Inc., 0-596-10142-2."
 *  
 *  If you feel your use of code examples falls outside fair use or the 
 *  permission given above, feel free to contact us at 
 *  permissions@oreilly.com.
 */

import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import com.oreilly.jent.jsf.library.Directory;
import com.oreilly.jent.jsf.library.model.Book;
import com.oreilly.jent.jsf.library.model.Library;

/**
 * Implementation of the BookDisplayForm Class. We could use the Directory to get the Library,
 * but we want to show how property injection in managed beans works.
 *
 */
public class BookDisplayForm {
    private String currentBookID = null;
    private Library library = null;

    public String getCurrentBookID() {
        return currentBookID;
    }

    public void setCurrentBookID(String currentBookID) {
        this.currentBookID = currentBookID;
    }

    public Library getLibrary() {
        return library;
    }

    public void setLibrary(Library library) {
        this.library = library;
    }

    public SelectItem[] getBookList() {
        Library library = Directory.getLibrary();
        List books = library.getBookList();
        SelectItem[] items = new SelectItem[books.size()];
        for (int i = 0; i < books.size(); i++) {
            Book book = (Book)books.get(i);
            items[i] = new SelectItem(book.getTrackingID(), book.getTitle());
        }
       return items;
    }

    public boolean isBookSelected() {
        return currentBookID != null;
    }

    public Book getBook() {
        if (currentBookID == null) return null;
        return (Book)getLibrary().getBooks().get(currentBookID);
    }

    public String checkBookIn() {
        Book book = getBook(); // get the current book
        book.setCheckedOut(false);
        return null;
    }

    public String checkBookOut() {
        Book book = getBook(); // get the current book
        book.setCheckedOut(true);
        return null;
    }

    public void safeModeChange(ValueChangeEvent event) {
        UIComponent buttonHolderGrid =
                event.getComponent().findComponent("buttonHolder");
        if (buttonHolderGrid != null) {
            Object newVal = event.getNewValue();
            if (newVal instanceof Boolean)
                buttonHolderGrid.setRendered(!((Boolean)newVal).booleanValue());
        }
    }
}

