Projects / Hotel Management System / src / hoteldraft / SearchController.java
SearchController.java
Raw
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package hoteldraft;

import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.sql.Date;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.RotateTransition;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import static javafx.scene.paint.Color.rgb;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Duration;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Hala
 */
public class SearchController implements Initializable {

    private Stage stage;
    private Scene scene;
    private Parent root;

    private double xOffSet = 0;
    private double yOffSet = 0;
    @FXML
    private BorderPane parent;
    @FXML
    private VBox navVBox;
    @FXML
    private ImageView settingsImg;
    @FXML
    private Pane pane;
    @FXML
    private Label exit;
    @FXML
    private Label minimize;
    @FXML
    private Button settingsImgBtn;

    @FXML
    private ListView gname;

    @FXML
    private ListView gid;

    @FXML
    private ListView gemail;

    @FXML
    private ListView gdate;

    @FXML
    private ListView spreq;

    @FXML
    private ListView groom;

    @FXML
    private ListView gno;

    @FXML
    private ComboBox<String> byCB;

    @FXML
    private TextField sinput;

    @FXML
    private Text vmes;

    @FXML
    private Button s;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //to initilize combobox items
        byCB.getItems().addAll("Guest Name", "Guest ID", "email", "Arrival Date", "Departure Date", "Room NO", "Room Type", "Show All new reservations", "Previous Guest Name", "Previous Guest ID", "Previous email", "Previous Arrival Date", "Previous Departure Date", "Previous Room NO", "Previous Room Type", "Show All previous reservations", "Show All");

        //diable textfield until combobox category is chosen
        sinput.setDisable(true);

        //Listener to empty warning message and textfield when combobox category is changed
        byCB.valueProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue ov, String t, String t1) {
                vmes.setText("");
                sinput.setPromptText("");
                sinput.clear();
            }
        });

        //to change settings imageview color
        Lighting lighting = new Lighting(new Light.Distant(45, 90, rgb(105, 152, 171)));
        ColorAdjust bright = new ColorAdjust(0, 1, 1, 1);
        lighting.setContentInput(bright);
        lighting.setSurfaceScale(0.0);
        settingsImg.setEffect(lighting);
        settingsImg.setDisable(true);

        // to rotate settings button on hover
        RotateTransition rotation = new RotateTransition(Duration.seconds(0.5), settingsImgBtn);
        rotation.setCycleCount(1);
        rotation.setByAngle(180);
        settingsImgBtn.setOnMouseEntered(e -> rotation.play());
        settingsImgBtn.setOnMouseExited(e -> rotation.pause());
    }

    @FXML
    public void byCBm(ActionEvent event) {
        sinput.setDisable(false);

        if (byCB.getValue().equals("Show All new reservations")) {
            List<Reservation> RList = null;
            Session session = HibernateUtil.getSessionFactory().openSession();
            Query q = session.createQuery("from Reservation");
            RList = q.list();
            session.close();

            gname.getItems().clear();
            gid.getItems().clear();
            gemail.getItems().clear();
            gdate.getItems().clear();
            spreq.getItems().clear();
            groom.getItems().clear();
            gno.getItems().clear();

            vmes.setText("");

            for (Reservation R : RList) {

                gname.getItems().add(R.getFname() + " " + R.getLname());
                gid.getItems().add(R.getID());
                gemail.getItems().add(R.getEmail());
                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                spreq.getItems().add(R.getSpecialRequest());
                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                gno.getItems().add(R.getGuestCount());

                vmes.setText("you are viewing all new reservations");

            }
        } else if (byCB.getValue().equals("Arrival Date") || byCB.getValue().equals("Departure Date")) {
            sinput.setPromptText("use this format for dates : yyyy-mm-dd");
        } else if (byCB.getValue().equals("Show All previous reservations")) {
            List<History> hList = null;
            Session session = HibernateUtil.getSessionFactory().openSession();
            Query q = session.createQuery("from History");
            hList = q.list();
            session.close();

            gname.getItems().clear();
            gid.getItems().clear();
            gemail.getItems().clear();
            gdate.getItems().clear();
            spreq.getItems().clear();
            groom.getItems().clear();
            gno.getItems().clear();

            vmes.setText("");

            for (History R : hList) {

                gname.getItems().add(R.getFname() + " " + R.getLname());
                gid.getItems().add(R.getID());
                gemail.getItems().add(R.getEmail());
                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                spreq.getItems().add(R.getSpecialRequest());
                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                gno.getItems().add(R.getGuestCount());

            }
            vmes.setText("you are viewing all previous reservations");
        } else if (byCB.getValue().equals("Show All")) {

            Session session = HibernateUtil.getSessionFactory().openSession();
            Query Q = session.createQuery("from History");
            Query q = session.createQuery("from Reservation");
            List<Reservation> RList = q.list();
            List<History> hList = Q.list();
            session.close();

            gname.getItems().clear();
            gid.getItems().clear();
            gemail.getItems().clear();
            gdate.getItems().clear();
            spreq.getItems().clear();
            groom.getItems().clear();
            gno.getItems().clear();

            vmes.setText("");

            for (History R : hList) {

                gname.getItems().add(R.getFname() + " " + R.getLname());
                gid.getItems().add(R.getID());
                gemail.getItems().add(R.getEmail());
                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                spreq.getItems().add(R.getSpecialRequest());
                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                gno.getItems().add(R.getGuestCount());

            }
            for (Reservation R : RList) {

                gname.getItems().add(R.getFname() + " " + R.getLname());
                gid.getItems().add(R.getID());
                gemail.getItems().add(R.getEmail());
                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                spreq.getItems().add(R.getSpecialRequest());
                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                gno.getItems().add(R.getGuestCount());

            }
            vmes.setText("you are viewing all the data");
        }
    }

    @FXML
    public void search(ActionEvent event) {
        if (sinput.getText().isEmpty()) {
            vmes.setText("please enter the information you are trying to serach first!");
        } else {
            Session session = HibernateUtil.getSessionFactory().openSession();
            Query q = session.createQuery("from Reservation");
            Query Q = session.createQuery("from History");
            List<History> hList = Q.list();
            List<Reservation> RList = q.list();
            session.close();

            gname.getItems().clear();
            gid.getItems().clear();
            gemail.getItems().clear();
            gdate.getItems().clear();
            spreq.getItems().clear();
            groom.getItems().clear();
            gno.getItems().clear();

            vmes.setText("");

            switch (byCB.getValue()) {
                case "Guest Name":
                    vmes.setText("");
                    for (Reservation R : RList) {
                        vmes.setText("");
                        if (R.getFname().toLowerCase().contains(sinput.getText().toLowerCase()) || R.getLname().toLowerCase().contains(sinput.getText().toLowerCase())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this guest name doesnt exists");
                    }
                    break;

                case "Guest ID":
                    for (Reservation R : RList) {

                        if (String.valueOf(R.getID()).contains(sinput.getText())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this guest ID doesnt exists");
                    }
                    break;

                case "email":
                    vmes.setText(null);
                    for (Reservation R : RList) {
                        //vmes.setText("");

                        if (R.getEmail().toLowerCase().contains(sinput.getText().toLowerCase())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this guest email doesnt exists");
                    }
                    break;

                case "Arrival Date":
                    vmes.setText("use this format for dates : yyyy-mm-dd");
                    for (Reservation R : RList) {
                        try {

                            if (R.getArrivalDate().equals(Date.valueOf(sinput.getText()))) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        } catch (IllegalArgumentException dtpe) {
                            vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("This Arrival Date doesnt exists");
                    }
                    break;

                case "Departure Date":
                    vmes.setText("use this format for dates : yyyy-mm-dd");
                    for (Reservation R : RList) {
                        try {

                            if (R.getDepartureDate().equals(Date.valueOf(sinput.getText()))) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        } catch (IllegalArgumentException dtpe) {
                            vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                        }

                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("This Departure Date doesnt exists");
                    }
                    break;

                case "Room NO":
                    for (Reservation R : RList) {

                        if (R.getRoomNo() == Integer.parseInt(sinput.getText())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this Room NO doesnt exists");
                    }
                    break;

                case "Room Type":

                    for (Reservation R : RList) {

                        if (R.getRoomType().contains(sinput.getText())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this Room type doesnt exists");
                    }
                    break;
                case "Previous Guest Name":
                    vmes.setText("");
                    for (History R : hList) {
                        vmes.setText("");
                        if (R.getFname().toLowerCase().contains(sinput.getText().toLowerCase()) || R.getLname().toLowerCase().contains(sinput.getText().toLowerCase())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this guest name doesnt exists");
                    }
                    break;
                case "Previous Guest ID":
                    for (History R : hList) {

                        if (String.valueOf(R.getID()).contains(sinput.getText())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this guest ID doesnt exists");
                    }
                    break;

                case "Previous email":
                    vmes.setText(null);
                    for (History R : hList) {

                        if (R.getEmail().toLowerCase().contains(sinput.getText().toLowerCase())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this guest email doesnt exists");
                    }
                    break;

                case "Previous Arrival Date":
                    vmes.setText("use this format for dates : yyyy-mm-dd");
                    for (History R : hList) {
                        try {

                            if (R.getArrivalDate().equals(Date.valueOf(sinput.getText()))) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        } catch (IllegalArgumentException dtpe) {
                            vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("This Arrival Date doesnt exists");
                    }
                    break;

                case "Previous Departure Date":
                    //vmes.setText("use this format for dates : dd/mm/yy");
                    vmes.setText("use this format for dates : yyyy-mm-dd");
                    for (History R : hList) {
                        try {

                            if (R.getDepartureDate().equals(Date.valueOf(sinput.getText()))) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        } catch (IllegalArgumentException dtpe) {
                            vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                        }

                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("This Departure Date doesnt exists");
                    }
                    break;

                case "Previous Room NO":
                    for (History R : hList) {

                        if (R.getRoomNo() == Integer.parseInt(sinput.getText())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this Room NO doesnt exists");
                    }
                    break;

                case "Previous Room Type":

                    for (History R : hList) {

                        if (R.getRoomType().contains(sinput.getText())) {
                            gname.getItems().add(R.getFname() + " " + R.getLname());
                            gid.getItems().add(R.getID());
                            gemail.getItems().add(R.getEmail());
                            gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                            spreq.getItems().add(R.getSpecialRequest());
                            groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                            gno.getItems().add(R.getGuestCount());

                            vmes.setText("");

                        }
                    }
                    if (gname.getItems().isEmpty()) {
                        vmes.setText("this Room type doesnt exists");
                    }
                    break;
                default:
                    vmes.setText("error");
                    break;
            }
        }
    }

    @FXML
    private void enterSearch(KeyEvent event) throws IOException {
        if (event.getCode() == KeyCode.ENTER) {
            if (sinput.getText().isEmpty()) {
                vmes.setText("please enter the information you are trying to serach first!");
            } else {
                List<Reservation> RList = null;
                Session session = HibernateUtil.getSessionFactory().openSession();
                Query Q = session.createQuery("from History");
                Query q = session.createQuery("from Reservation");
                List<History> hList = Q.list();
                RList = q.list();
                session.close();

                gname.getItems().clear();
                gid.getItems().clear();
                gemail.getItems().clear();
                gdate.getItems().clear();
                spreq.getItems().clear();
                groom.getItems().clear();
                gno.getItems().clear();

                vmes.setText("");

                switch (byCB.getValue()) {
                    case "Guest Name":
                        //sinput.setFocusTraversable(true);
                        vmes.setText("");
                        for (Reservation R : RList) {
                            vmes.setText("");
                            if (R.getFname().toLowerCase().contains(sinput.getText().toLowerCase()) || R.getLname().toLowerCase().contains(sinput.getText().toLowerCase())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this guest name doesnt exists");
                        }
                        break;

                    case "Guest ID":
                        for (Reservation R : RList) {

                            if (String.valueOf(R.getID()).contains(sinput.getText())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this guest ID doesnt exists");
                        }
                        break;

                    case "email":
                        vmes.setText(null);
                        for (Reservation R : RList) {

                            if (R.getEmail().toLowerCase().contains(sinput.getText().toLowerCase())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this guest email doesnt exists");
                        }
                        break;

                    case "Arrival Date":
                        vmes.setText("use this format for dates : yyyy-mm-dd");
                        for (Reservation R : RList) {
                            try {

                                if (R.getArrivalDate().equals(Date.valueOf(sinput.getText()))) {
                                    gname.getItems().add(R.getFname() + " " + R.getLname());
                                    gid.getItems().add(R.getID());
                                    gemail.getItems().add(R.getEmail());
                                    gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                    spreq.getItems().add(R.getSpecialRequest());
                                    groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                    gno.getItems().add(R.getGuestCount());

                                    vmes.setText("");

                                }
                            } catch (IllegalArgumentException dtpe) {
                                vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("This Arrival Date doesnt exists");
                        }
                        break;

                    case "Departure Date":
                        vmes.setText("use this format for dates : yyyy-mm-dd");
                        for (Reservation R : RList) {
                            try {

                                if (R.getDepartureDate().equals(Date.valueOf(sinput.getText()))) {
                                    gname.getItems().add(R.getFname() + " " + R.getLname());
                                    gid.getItems().add(R.getID());
                                    gemail.getItems().add(R.getEmail());
                                    gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                    spreq.getItems().add(R.getSpecialRequest());
                                    groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                    gno.getItems().add(R.getGuestCount());

                                    vmes.setText("");

                                }
                            } catch (IllegalArgumentException dtpe) {
                                vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                            }

                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("This Departure Date doesnt exists");
                        }
                        break;

                    case "Room NO":
                        for (Reservation R : RList) {

                            if (R.getRoomNo() == Integer.parseInt(sinput.getText())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this Room NO doesnt exists");
                        }
                        break;

                    case "Room Type":

                        for (Reservation R : RList) {

                            if (R.getRoomType().contains(sinput.getText())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this Room type doesnt exists");
                        }
                        break;

                    case "Previous Guest Name":
                        vmes.setText("");
                        for (History R : hList) {
                            vmes.setText("");
                            if (R.getFname().toLowerCase().contains(sinput.getText().toLowerCase()) || R.getLname().toLowerCase().contains(sinput.getText().toLowerCase())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this guest name doesnt exists");
                        }
                        break;
                    case "Previous Guest ID":
                        for (History R : hList) {

                            if (String.valueOf(R.getID()).contains(sinput.getText())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this guest ID doesnt exists");
                        }
                        break;

                    case "Previous email":
                        vmes.setText(null);
                        for (History R : hList) {

                            if (R.getEmail().toLowerCase().contains(sinput.getText().toLowerCase())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this guest email doesnt exists");
                        }
                        break;

                    case "Previous Arrival Date":
                        vmes.setText("use this format for dates : yyyy-mm-dd");
                        for (History R : hList) {
                            try {

                                if (R.getArrivalDate().equals(Date.valueOf(sinput.getText()))) {
                                    gname.getItems().add(R.getFname() + " " + R.getLname());
                                    gid.getItems().add(R.getID());
                                    gemail.getItems().add(R.getEmail());
                                    gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                    spreq.getItems().add(R.getSpecialRequest());
                                    groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                    gno.getItems().add(R.getGuestCount());

                                    vmes.setText("");

                                }
                            } catch (IllegalArgumentException dtpe) {
                                vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("This Arrival Date doesnt exists");
                        }
                        break;

                    case "Previous Departure Date":
                        vmes.setText("use this format for dates : yyyy-mm-dd");
                        for (History R : hList) {
                            try {

                                if (R.getDepartureDate().equals(Date.valueOf(sinput.getText()))) {
                                    gname.getItems().add(R.getFname() + " " + R.getLname());
                                    gid.getItems().add(R.getID());
                                    gemail.getItems().add(R.getEmail());
                                    gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                    spreq.getItems().add(R.getSpecialRequest());
                                    groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                    gno.getItems().add(R.getGuestCount());

                                    vmes.setText("");

                                }
                            } catch (IllegalArgumentException dtpe) {
                                vmes.setText("EXCEPTION CAUGHT - wrong format (yyyy-mm-dd)");
                            }

                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("This Departure Date doesnt exists");
                        }
                        break;

                    case "Previous Room NO":
                        for (History R : hList) {

                            if (R.getRoomNo() == Integer.parseInt(sinput.getText())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this Room NO doesnt exists");
                        }
                        break;

                    case "Previous Room Type":

                        for (History R : hList) {

                            if (R.getRoomType().contains(sinput.getText())) {
                                gname.getItems().add(R.getFname() + " " + R.getLname());
                                gid.getItems().add(R.getID());
                                gemail.getItems().add(R.getEmail());
                                gdate.getItems().add(R.getArrivalDate() + " -> " + R.getDepartureDate());
                                spreq.getItems().add(R.getSpecialRequest());
                                groom.getItems().add(R.getRoomNo() + " - " + R.getRoomType());
                                gno.getItems().add(R.getGuestCount());

                                vmes.setText("");

                            }
                        }
                        if (gname.getItems().isEmpty()) {
                            vmes.setText("this Room type doesnt exists");
                        }
                        break;
                    default:
                        vmes.setText("error");
                        break;
                }
            }
        }
    }

    //Methods to close and minimize window.
    @FXML
    private void close_app(javafx.scene.input.MouseEvent event) {
        System.exit(0);
    }

    @FXML
    private void minimize_app(javafx.scene.input.MouseEvent event) {
        stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
        stage.setIconified(true);
    }

    /*---------------------class switching events---------------------*/
    @FXML
    private void switchToReservations(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Reservations.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    private void switchToNewReservation(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("NewReservation.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();

    }

    @FXML
    private void switchToLoggedIn(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("LoggedIn.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToRooms(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Rooms.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToServices(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Services.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToSearch(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Search.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToSettings(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Settings.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }
}