package windowsform;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.*;
import core.business.Reservation;
import core.business.Room;
import core.formcontroller.MDIDesktopPane;
public class RoomStatusForm extends JInternalFrame {
/**
*
*/
private int selectedRoomID;
private int selectedResID;
MDIDesktopPane desktop;
private static final long serialVersionUID = 1L;
GridLayout gridLayout1 = new GridLayout();
JPanel jPanel1 = new JPanel();
JPanel pnFloor1 = new JPanel();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JPanel pnFloor2 = new JPanel();
JLabel jLabel3 = new JLabel();
JPanel pnFloor3 = new JPanel();
JLabel jLabel4 = new JLabel();
JPanel pnFloor4 = new JPanel();
JLabel jLabel5 = new JLabel();
JPanel pnFloor5 = new JPanel();
JPopupMenu popAvailable = new JPopupMenu();
JPopupMenu popResv = new JPopupMenu();
JPopupMenu popOcc = new JPopupMenu();
JMenuItem miRes = new JMenuItem("Reserv");
JMenuItem miCheckIn = new JMenuItem("Check in");
JMenuItem miCheckOut = new JMenuItem("Check out");
JMenuItem miUpdateAvaiServ = new JMenuItem("Update Available Service");
JMenuItem miCancelResv = new JMenuItem("Cancel Reservation");
JMenuItem miCheckInWithResv = new JMenuItem("Check in");
JMenuItem miAddMoreServ = new JMenuItem("Add Services");
JPanel pnAvailable = new JPanel();
JPanel pnBooked = new JPanel();
JPanel pnOccupied = new JPanel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JLabel jLabel8 = new JLabel();
JInternalFrame owner;
public RoomStatusForm(MDIDesktopPane desktop, JInternalFrame owner) {
try {
this.owner = owner;
jbInit();
this.desktop = desktop;
this.setClosable(true);
this.setMaximizable(true);
this.setVisible(true);
this.setResizable(true);
layoutRoom();
this.setSize(550, 350);
}
catch(Exception e) {
e.printStackTrace();
}
}
public void updateRoomLayout(){
try {
this.jPanel1.removeAll();
jPanel1.add(pnFloor2, null);
pnFloor2.add(jLabel2, null);
jPanel1.add(pnFloor3, null);
pnFloor3.add(jLabel3, null);
jPanel1.add(pnFloor5, null);
pnFloor5.add(jLabel5, null);
jPanel1.add(pnFloor4, null);
pnFloor4.add(jLabel4, null);
jPanel1.add(pnFloor1, null);
pnFloor1.add(jLabel1, null);
jPanel1.add(pnAvailable, null);
jPanel1.add(pnBooked, null);
jPanel1.add(pnOccupied, null);
jPanel1.add(jLabel6, null);
jPanel1.add(jLabel7, null);
jPanel1.add(jLabel8, null);
layoutRoom();
this.jPanel1.revalidate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void layoutRoom() throws SQLException {
ResultSet rs = Room.getAllRoom();
while(rs.next()){
Room room = new Room(rs);
final RoomControl rCont = new RoomControl(room);
switch(room.getRoomFloor()){
case 1:
rCont.setBounds(new Rectangle(pnFloor1.getX() + 70*room.getRoomOrder() +room.getRoomOrder()*10, pnFloor1.getY(), 70, 36));
break;
case 2:
rCont.setBounds(pnFloor2.getX()+ 70*room.getRoomOrder() +room.getRoomOrder()*10, pnFloor2.getY(), 70, 36);
break;
case 3:
rCont.setBounds(pnFloor3.getX() + 70*room.getRoomOrder() +room.getRoomOrder()*10, pnFloor3.getY(), 70, 36);
break;
case 4:
rCont.setBounds(pnFloor4.getX() + 70*room.getRoomOrder() +room.getRoomOrder()*10, pnFloor4.getY(), 70, 36);
break;
case 5:
rCont.setBounds(pnFloor5.getX() + 70*room.getRoomOrder() +room.getRoomOrder()*10, pnFloor5.getY(), 70, 36);
break;
}
this.jPanel1.add(rCont, null);
rCont.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
selectedRoomID = rCont.room.getRoomID();
selectedResID = rCont.room.getResID();
if(e.isPopupTrigger()){
RoomControl rc = (RoomControl)e.getComponent();
switch(rc.room.getRoomStatusID()){
case 1://available
popAvailable.show(e.getComponent(),e.getX(), e.getY());
break;
case 2://reserv
popResv.show(e.getComponent(),e.getX(), e.getY());
break;
case 3: //occupied
popOcc.show(e.getComponent(),e.getX(), e.getY());
break;
}
}
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
selectedRoomID = rCont.room.getRoomID();
selectedResID = rCont.room.getResID();
//System.out.println();
if(e.getClickCount()==2 && owner!=null){
selectedRoomID = rCont.room.getRoomID();
closingForm();
}
}
});
}
}
public void closingForm(){
this.setVisible(false);
((ReservationForm)owner).updateRoomInfo(selectedRoomID);
desktop.remove(this);
}
private void callResForm(boolean isReservation, int resrvID){
ReservationForm res = new ReservationForm(this, desktop, selectedRoomID, isReservation, resrvID);//true: res. 0: new
desktop.add(res);
}
private void jbInit() throws Exception {
this.setMinimumSize(new Dimension(100, 100));
this.getContentPane().setLayout(gridLayout1);
jPanel1.setLayout(null);
pnFloor1.setBackground(Color.gray);
pnFloor1.setBorder(BorderFactory.createLineBorder(Color.black));
pnFloor1.setToolTipText("");
pnFloor1.setBounds(new Rectangle(27, 214, 70, 36));
jLabel1.setFont(new java.awt.Font("Dialog", 1, 15));
jLabel1.setText("Floor 1");
jLabel2.setText("Floor 2");
jLabel2.setFont(new java.awt.Font("Dialog", 1, 15));
pnFloor2.setBounds(new Rectangle(27, 170, 70, 36));
pnFloor2.setToolTipText("");
pnFloor2.setBorder(BorderFactory.createLineBorder(Color.black));
pnFloor2.setBackground(Color.gray);
jLabel3.setText("Floor 3");
jLabel3.setFont(new java.awt.Font("Dialog", 1, 15));
pnFloor3.setBounds(new Rectangle(27, 126, 70, 36));
pnFloor3.setToolTipText("");
pnFloor3.setBorder(BorderFactory.createLineBorder(Color.black));
pnFloor3.setBackground(Color.gray);
jLabel4.setText("Floor 4");
jLabel4.setFont(new java.awt.Font("Dialog", 1, 15));
pnFloor4.setBounds(new Rectangle(27, 79, 70, 36));
pnFloor4.setToolTipText("");
pnFloor4.setBorder(BorderFactory.createLineBorder(Color.black));
pnFloor4.setBackground(Color.gray);
jLabel5.setText("Floor 5");
jLabel5.setFont(new java.awt.Font("Dialog", 1, 15));
pnFloor5.setBounds(new Rectangle(27, 35, 70, 36));
pnFloor5.setToolTipText("");
pnFloor5.setBorder(BorderFactory.createLineBorder(Color.black));
pnFloor5.setBackground(Color.gray);
pnAvailable.setBorder(BorderFactory.createLineBorder(Color.black));
pnAvailable.setBounds(new Rectangle(27, 270, 20, 19));
pnAvailable.setBackground(Color.cyan);
pnBooked.setBounds(new Rectangle(167, 269, 20, 19));
pnBooked.setBorder(BorderFactory.createLineBorder(Color.black));
pnBooked.setBackground(Color.yellow);
pnOccupied.setBounds(new Rectangle(308, 269, 20, 19));
pnOccupied.setBorder(BorderFactory.createLineBorder(Color.black));
pnOccupied.setBackground(Color.red);
jLabel6.setText("Available");
jLabel6.setBounds(new Rectangle(64, 271, 71, 17));
jLabel7.setText("Booked");
jLabel7.setBounds(new Rectangle(193, 272, 71, 16));
jLabel8.setBounds(new Rectangle(339, 271, 71, 16));
jLabel8.setText("Occupied");
jPanel1.add(pnFloor2, null);
pnFloor2.add(jLabel2, null);
jPanel1.add(pnFloor3, null);
pnFloor3.add(jLabel3, null);
jPanel1.add(pnFloor5, null);
pnFloor5.add(jLabel5, null);
jPanel1.add(pnFloor4, null);
pnFloor4.add(jLabel4, null);
jPanel1.add(pnFloor1, null);
pnFloor1.add(jLabel1, null);
jPanel1.add(pnAvailable, null);
jPanel1.add(pnBooked, null);
jPanel1.add(pnOccupied, null);
jPanel1.add(jLabel6, null);
jPanel1.add(jLabel7, null);
jPanel1.add(jLabel8, null);
this.getContentPane().add(jPanel1, null);
popAvailable.add(miRes);//ok
popAvailable.add(miCheckIn);//ok
popAvailable.add(miUpdateAvaiServ);//ok
popResv.add(miCheckInWithResv);//ok
popResv.add(miCancelResv);
popOcc.add(miCheckOut);
popOcc.add(miAddMoreServ);//ok
miAddMoreServ.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
AddCheckinServiceForm res = new AddCheckinServiceForm(desktop, selectedResID);
desktop.add(res);
}
});
miRes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
callResForm(true, 0);
//ReservationForm res = new ReservationForm(this, desktop, selectedRoomID, true, 0);//true: res. 0: new
//desktop.add(res);
}
});
miCheckIn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
callResForm(false, 0);
//ReservationForm res = new ReservationForm(desktop, selectedRoomID, false, 0);//checkin, 0: new also
//desktop.add(res);
}
});
miCheckInWithResv.addActionListener(new ActionListener() {
//checkin with available reservation
//reservation ID where?
public void actionPerformed(ActionEvent arg0) {
callResForm(false, selectedResID);
//ReservationForm res = new ReservationForm(desktop, selectedRoomID, false, selectedResID);//checkin, load reservation
//desktop.add(res);
}
});
miUpdateAvaiServ.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
callUpdateRoomService();
}
});
miCancelResv.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int response = JOptionPane.showConfirmDialog(null, "Do you want to continue?", "Confirm",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.YES_OPTION) {
//update status of reservation
Reservation.cancelReservation(selectedResID);
Room.updateStatus(selectedRoomID, 1);
//update room Status
System.out.println("Yes button clicked");
updateRoomLayout();
}
}
});
miCheckOut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
callCheckoutForm();
}
});
}
private void callCheckoutForm(){
CheckoutForm ckout = new CheckoutForm(this, selectedResID);
desktop.add(ckout);
}
private void callUpdateRoomService(){
AddRoomServiceForm aRoom = new AddRoomServiceForm(this, desktop, selectedRoomID);
desktop.add(aRoom);
}
}