Projects / Hotel Management System / src / hoteldraft / HomeController.java
HomeController.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 com.sun.scenario.Settings;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URL;
import javafx.util.Duration;
import static java.util.Collections.rotate;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.Animation;
import javafx.animation.RotateTransition;
import javafx.animation.Transition;
import javafx.application.Platform;
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.Label;
import javafx.scene.control.TextField;
import javafx.scene.effect.Blend;
import javafx.scene.effect.BlendMode;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.effect.ColorInput;
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.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.Font;
import javafx.scene.text.Text;
import static javafx.scene.transform.Transform.rotate;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import org.hibernate.Query;
import org.hibernate.Session;

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

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

    private double xOffSet = 0;
    private double yOffSet = 0;
    
    static public String hotelNameOriginal="Grand Beach Hotel";
    
    @FXML
    private VBox navVBox;
    @FXML
    private Button loginBtn;
    @FXML
    private TextField IDTextfield;
    @FXML
    private TextField passwordTextfield;
    @FXML
    private Label loginError;
    @FXML
    private Text hotelName;
    @FXML
    private Label exit;
    @FXML
    private BorderPane parent;
    @FXML
    private ImageView settingsImg;
    @FXML
    private Pane pane;
    @FXML
    private Label minimize;
    @FXML
    private Button settingsImgBtn;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        hotelName.setText("Welcome to "+hotelNameOriginal);
        loginError.setOpacity(0);

        Lighting lighting = new Lighting(new Light.Distant(45, 90, rgb(43, 88, 114)));
        ColorAdjust bright = new ColorAdjust(0, 1, 1, 1);
        lighting.setContentInput(bright);
        lighting.setSurfaceScale(0.0);
        settingsImg.setEffect(lighting);
        settingsImg.setDisable(true);

        navVBox.setDisable(true);

        IDTextfield.textProperty().addListener(new ChangeListener<String>() {
            public void changed(ObservableValue<? extends String> observable, String oldValue,
                    String newValue) {
                if (!newValue.matches("\\d*")) {
                    IDTextfield.setText(newValue.replaceAll("[^\\d]", ""));
                }
            }
        });

        RotateTransition rotation = new RotateTransition(Duration.millis(1000),settingsImgBtn);
        rotation.setCycleCount(Animation.INDEFINITE);
        rotation.setByAngle(180);
        
        
        settingsImgBtn.setOnMouseEntered(e -> rotation.play());
        settingsImgBtn.setOnMouseExited(e -> rotation.pause());
    }

    public static String getHotelNameOriginal() {
        return hotelNameOriginal;
    }

    public static void setHotelNameOriginal(String hotelNameOriginal) {
        HomeController.hotelNameOriginal = hotelNameOriginal;
    }

    @FXML
    private void logIn(ActionEvent event) throws IOException {
        Session session = HibernateUtil.getSessionFactory().openSession();

        String HQL = "from Employees";
        Query q = session.createQuery(HQL);

        List<Employees> empList = q.list();

        for (Employees emp : empList) {
            if (IDTextfield.getText().isEmpty() || passwordTextfield.getText().isEmpty()) {
                loginError.setText("  No input was found.");
                loginError.setOpacity(1);
            } else if (emp.getEmployeeID() == Integer.parseInt(IDTextfield.getText()) && emp.getEmployeePass().equals(passwordTextfield.getText())) {
                String empName = emp.getEmployeeName();
                FXMLLoader loader = new FXMLLoader(getClass().getResource("LoggedIn.fxml"));
                root = loader.load();

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

                LoggedInController loggedInSceneController = loader.getController();
                loggedInSceneController.greetingTextName(empName);
                
                stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
                scene = new Scene(root, Color.TRANSPARENT);
                stage.setScene(scene);
                stage.show();
            } else {
                loginError.setText("  Incorrect ID or password.");
                loginError.setOpacity(1);
            }
        }
    }

    @FXML
    private void enterLogin(KeyEvent event) throws IOException {
        if (event.getCode() == KeyCode.ENTER) {

            Session session = HibernateUtil.getSessionFactory().openSession();

            String HQL = "from Employees";
            Query q = session.createQuery(HQL);

            List<Employees> empList = q.list();

            for (Employees emp : empList) {
                if (IDTextfield.getText().isEmpty() || passwordTextfield.getText().isEmpty()) {
                    loginError.setText("  No input was found.");
                    loginError.setOpacity(1);
                } else if (emp.getEmployeeID() == Integer.parseInt(IDTextfield.getText()) && emp.getEmployeePass().equals(passwordTextfield.getText())) {
                    String empName = emp.getEmployeeName();
                    FXMLLoader loader = new FXMLLoader(getClass().getResource("LoggedIn.fxml"));
                    root = loader.load();

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

                    LoggedInController loggedInSceneController = loader.getController();
                    loggedInSceneController.greetingTextName(empName);
                    stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
                    scene = new Scene(root, Color.TRANSPARENT);
                    stage.setScene(scene);
                    stage.show();
                } else {
                    loginError.setText("  Incorrect ID or password.");
                    loginError.setOpacity(1);
                }
            }
        }
    }
    
    //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.initStyle(StageStyle.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();
    }
}