package edu.pdx.cs410J.di; import javax.swing.table.AbstractTableModel; import java.text.NumberFormat; import java.util.Iterator; import java.util.Set; /** * A swing table model that lists the contents of a {@link BookInventory} */ public class BookInventoryTableModel extends AbstractTableModel { private static final int AUTHOR_COLUMN = 0; private static final int TITLE_COLUMN = 1; private static final int PRICE_COLUMN = 2; private static final int QUANTITY_COLUMN = 3; protected final BookInventory inventory; public BookInventoryTableModel( BookInventory inventory ) { this.inventory = inventory; } public int getRowCount() { return inventory.getBooks().size(); } public int getColumnCount() { return 4; } @Override public String getColumnName( int column ) { switch(column) { case AUTHOR_COLUMN: return "Author"; case TITLE_COLUMN: return "Title"; case PRICE_COLUMN: return "Price"; case QUANTITY_COLUMN: return "Quantity"; default: throw new IllegalArgumentException( "Unknown column: " + column ); } } public Object getValueAt( int row, int column ) { Book book = getBook( row ); switch(column) { case AUTHOR_COLUMN: return book.getAuthor(); case TITLE_COLUMN: return book.getTitle(); case PRICE_COLUMN: return NumberFormat.getCurrencyInstance().format( book.getPrice() ); case QUANTITY_COLUMN: return inventory.getCopies( book ); default: throw new IllegalArgumentException( "Unknown column: " + column ); } } public Book getBook( int i ) { Set<Book> books = inventory.getBooks(); assert i < books.size(); Iterator<Book> iter = books.iterator(); for (int j = 0; j < i; j++) { iter.next(); } return iter.next(); } public Book decrementInventry( int row ) { Book book = getBook( row ); inventory.remove( book ); fireTableCellUpdated( row, QUANTITY_COLUMN ); return book; } }