import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;
/**
* Library System.
*
* @author iCarnegie
* @version 1.1.0
* @see CatalogItem
* @see Book
* @see Recording
* @see Catalog
* @see Borrower
* @see BorrowerDatabase
* @see BorroweredItems
* @see CatalogLoader
* @see FileCatalogLoader
* @see DataFormatException
* @see BorrowersFormatter
* @see PlainTextBorrowersFormatter
* @see HTMLBorrowersFormatter
* @see XMLBorrowersFormatter
*
*/
public class LibraryGUI extends JPanel{
/* Standar error stream */
static private PrintWriter stdErr = new PrintWriter(System.err, true);
/* Window width in pixels */
static private int WIDTH = 850;
/* Window height in pixels */
static private int HEIGHT = 600;
/* Size of the catalog list cell in pixels */
static private int CATALOG_CELL_SIZE = 50;
/* Visible rows in catalog list */
static private int CATALOG_LIST_ROWS = 14;
/* Size of the borrower item cell in pixels */
static private int BORROWER_CELL_SIZE = 100;
/* Visible rows in borrower item */
static private int BORROWER_LIST_ROWS = 6;
/* Size borrower ID text field */
static private int BORROWER__TEXTFIELD_SIZE = 5;
/* Rows in status text area rows */
static private int STATUS_ROWS = 10;
/* Rows in status text area cols */
static private int STATUS_COLS = 40;
private JList catalogList;
private JList borrowerItemList;
private JButton addButton;
private JButton removeButton;
private JButton registerBorrowersButton;
private JButton displayBorrowersDBButton;
private JButton saveBorrowersDBButton;
private JButton displayBorrowerItemButton;
private JPanel catalogItemPanel;
private JLabel borrowerLabel;
private JTextField borrowerTextField;
private JTextArea statusTextArea;
private JRadioButton plainRadioButton;
private JRadioButton HTMLRadioButton;
private JRadioButton XMLRadioButton;
private JFileChooser fileChooser;
private Catalog catalog;
private BorrowerDatabase borrowerDB;
private Borrower borrower;
private BorrowersFormatter borrowersFormatter;
/**
* Loads a catalog and starts the application.
*
* @param args String arguments. Not used.
* @throws IOException if there are errors in the loading the catalog.
*/
public static void main(String[] args) throws IOException {
String filename = "";
if (args.length != 1) {
filename = "catalog.dat";
} else {
filename = args[0];
}
try {
Catalog catalog =
(new FileLibraryCatalogLoader()).loadCatalog(filename);
JFrame frame = new JFrame("Library System");
frame.setContentPane(new LibraryGUI(catalog));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WIDTH, HEIGHT);
frame.setResizable(true);
frame.setVisible(true);
} catch (FileNotFoundException fnfe) {
stdErr.println("The file does not exist");
System.exit(1);
} catch (DataFormatException dfe) {
stdErr.println("The file contains malformed data: "
+ dfe.getMessage());
System.exit(1);
}
}
/*
* Loads a BorrowerDatabase object.
*/
private BorrowerDatabase loadBorrowers(Catalog catalog) {
BorrowerDatabase borrowerDB = new BorrowerDatabase();
Borrower borrower = new Borrower("ID001", "James Addy");
borrower.getBorrowedItems().addItem(
catalog.getItem("B003"));
borrower.getBorrowedItems().addItem(
catalog.getItem("R001"));
borrower.getBorrowedItems().addItem(
catalog.getItem("B012"));
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID002", "John Doust");
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID003", "Constance Foster");
borrower.getBorrowedItems().addItem(
catalog.getItem("B006"));
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID004", "Harold Gurske");
borrower.getBorrowedItems().addItem(
catalog.getItem("B002"));
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID005", "Mary A. Rogers");
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID006", "Laura Novelle");
borrower.getBorrowedItems().addItem(
catalog.getItem("B007"));
borrower.getBorrowedItems().addItem(
catalog.getItem("B009"));
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID007", "David M. Prescott");
borrower.getBorrowedItems().addItem(
catalog.getItem("B011"));
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID008", "Francis Matthews");
borrower.getBorrowedItems().addItem(
catalog.getItem("R003"));
borrower.getBorrowedItems().addItem(
catalog.getItem("B005"));
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID009", "Thomas Ferris");
borrowerDB.addBorrower(borrower);
borrower = new Borrower("ID010", "John Johnson");
borrower.getBorrowedItems().addItem(
catalog.getItem("B004"));
borrowerDB.addBorrower(borrower);
return borrowerDB;
}
/**
* Instantiates the components and arranges them in a window.
*
* @param initialCatalog a product catalog.
*/
public LibraryGUI(Catalog initialCatalog) {
// create the components
catalogList = new JList();
borrowerItemList = new JList();
catalogList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
catalogList.setVisibleRowCount(CATALOG_LIST_ROWS);
catalogList.setFixedCellWidth(CATALOG_CELL_SIZE);
borrowerItemList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
borrowerItemList.setVisibleRowCount(BORROWER_LIST_ROWS);
borrowerItemList.setFixedCellWidth(BORROWER_CELL_SIZE);
addButton = new JButton("Add Borrower Item");
displayBorrowerItemButton = new JButton("Display Borrower Item");
removeButton = new JButton("Remove Borrower Item");
registerBorrowersButton = new JButton("Register Borrowered Items");
displayBorrowersDBButton = new JButton("Display Borrower");
saveBorrowersDBButton = new JButton("Save Borrower");
borrowerLabel = new JLabel("Borrower ID:");
borrowerTextField = new JTextField("", BORROWER__TEXTFIELD_SIZE);
statusTextArea = new JTextArea(STATUS_ROWS, STATUS_COLS);
statusTextArea.setEditable(false);
plainRadioButton = new JRadioButton("Plain", true);
HTMLRadioButton = new JRadioButton("HTML");
XMLRadioButton = new JRadioButton("XML");
ButtonGroup group = new ButtonGroup();
group.add(plainRadioButton);
group.add(HTMLRadioButton);
group.add(XMLRadioButton);
// Product Information panel
catalogItemPanel = new JPanel();
catalogItemPanel.setBorder(
BorderFactory.createTitledBorder("Catalog Item Information"));
// Catalog panel
JPanel catalogPanel = new JPanel();
catalogPanel.setBorder(BorderFactory.createTitledBorder("Catalog"));
catalogPanel.add (
new JScrollPane(catalogList,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
// "Add catalog item" panel
JPanel centralPanel = new JPanel(new BorderLayout());
JPanel addPanel = new JPanel(new GridLayout(3, 1));
JPanel borrowerPanel = new JPanel();
borrowerPanel.add(borrowerLabel);
borrowerPanel.add(borrowerTextField);
addPanel.add(borrowerPanel);
addPanel.add(displayBorrowerItemButton);
addPanel.add(addButton);
centralPanel.add(catalogItemPanel, BorderLayout.CENTER);
centralPanel.add(addPanel, BorderLayout.SOUTH);
// Borrowered item panel
JPanel borrowerItemPanel = new JPanel(new BorderLayout());
borrowerItemPanel.setBorder(BorderFactory.createTitledBorder("BorroweredItem"));
JPanel buttonsPanel = new JPanel(new GridLayout(2, 1));
buttonsPanel.add(removeButton);
buttonsPanel.add(registerBorrowersButton);
borrowerItemPanel.add(new JScrollPane(borrowerItemList,
JS