 
package com.wiley.compbooks.brose.chapter10.office;

/** 
 *
 * @author  brose
 * @version 
 */

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class RoomGUI 
    extends javax.swing.JFrame 
    implements java.awt.event.ActionListener, ListSelectionListener
{
    private java.awt.Panel panel1;

    private javax.swing.JButton exitButton;
    private javax.swing.JButton editButton;
    private javax.swing.JButton deleteButton;
    private javax.swing.JButton createButton;

    private javax.swing.JPanel namePanel;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JPanel buttonPanel;

    private JList roomList;
    private DefaultListModel roomListModel;

    private JList bookingList;
    private DefaultListModel bookingListModel;

    private JTextField nameField;
 
    private BuildingImpl server;

    public RoomGUI(BuildingImpl server) 
    {
	this.server = server;
	initComponents ();  
	pack();
	show();
    }

    private void initComponents () 
    {
	setTitle( "Building: " + server.name() );

	deleteButton = new javax.swing.JButton();	
	deleteButton.setActionCommand ("clear");
	deleteButton.setLabel("Clear");
	deleteButton.addActionListener(this);

	createButton = new javax.swing.JButton();	
	createButton.setActionCommand ("create");
	createButton.setLabel("create");
	createButton.addActionListener(this);

	exitButton = new JButton();
	exitButton.setActionCommand ("exit");
	exitButton.setLabel("Exit");
	exitButton.addActionListener(this);

	namePanel = new JPanel();
	namePanel.setLayout(new java.awt.FlowLayout ());

	nameField = new JTextField( 20 );
	namePanel.add( nameField );
	namePanel.add( createButton );

	roomListModel = new DefaultListModel();
	roomList = new JList(roomListModel);
	roomList.addListSelectionListener( this );
	roomList.setCellRenderer( new RoomListCellRenderer());

	bookingListModel = new DefaultListModel();
	bookingList = new JList(bookingListModel);

	buttonPanel = new JPanel();
	buttonPanel.setLayout(new java.awt.FlowLayout ());
	buttonPanel.add( exitButton );


	addWindowListener (new java.awt.event.WindowAdapter () 
			   {
			       public void windowClosing (java.awt.event.WindowEvent evt) {
				   exitForm (evt);
			       }
			   }
			   );
	
	getContentPane ().add ( buttonPanel, java.awt.BorderLayout.SOUTH);
	getContentPane ().add ( namePanel, java.awt.BorderLayout.NORTH);
  	getContentPane ().add ( new JScrollPane( roomList ), java.awt.BorderLayout.WEST);
  	getContentPane ().add ( new JScrollPane( bookingList ), java.awt.BorderLayout.EAST);
	updateList();
    }


    void create(String name)
    {
	if( name != null && name.length() > 0)
	    roomListModel.addElement(server.create( name ));
    }

    void updateList()
    {
	Room[] list = server.list();
	roomListModel.clear();
	for( int i = 0; i < list.length; i++ )
	    roomListModel.addElement( list[i]);
    }

    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
	System.exit (0);
    }


    public void actionPerformed (java.awt.event.ActionEvent evt) 
    {
	if( evt.getActionCommand().equals("exit"))
	{
	    BuildingServer.shutdown();
	}
	else if( evt.getActionCommand().startsWith("create"))
	{	
	    create( nameField.getText() );
	    nameField.setText("");
	}
    }

    public void updateSchedule(Room room )
    {
	bookingListModel.clear();
	String[] meetings =  room.viewBookings();
	for( int i = 0; i < meetings.length; i++ )
	    bookingListModel.addElement( meetings[i]);
    }


    /* ListSelectionLIstener */

    public void valueChanged( ListSelectionEvent e )
    {
	if( e.getSource() == roomList )
	{
	    System.out.println("RoomList selection changed");
	    updateSchedule((Room) roomList.getSelectedValue());
	}
    }

}

class RoomListCellRenderer extends JLabel implements ListCellRenderer
{
    public RoomListCellRenderer()
    {}

    public Component getListCellRendererComponent(JList list,
						  Object value,
						  int index,
						  boolean isSelected,
						  boolean cellHasFocus)
    {
	setText( ((Room)value).name());
	setBackground( isSelected ? Color.blue : Color.white );
	setForeground( Color.black );
	return this;
    }
						  
}
