diff --git a/BrickLog-Client/pom.xml b/BrickLog-Client/pom.xml index b2f7b4c..5b48ee4 100644 --- a/BrickLog-Client/pom.xml +++ b/BrickLog-Client/pom.xml @@ -25,6 +25,11 @@ javafx-fxml ${javafx.version} + + org.openjfx + javafx-graphics + ${javafx.version} + diff --git a/BrickLog-Client/src/main/java/com/example/bricklog/view/MainLayout.java b/BrickLog-Client/src/main/java/com/example/bricklog/view/MainLayout.java index dff15ae..0df9e16 100644 --- a/BrickLog-Client/src/main/java/com/example/bricklog/view/MainLayout.java +++ b/BrickLog-Client/src/main/java/com/example/bricklog/view/MainLayout.java @@ -131,7 +131,7 @@ public class MainLayout extends BorderPane { this.setCenter(galleryLayout); } private void switchToSettingsLayout() { - SettingsLayout settingsLayout = new SettingsLayout(); + SettingsWindow settingsLayout = new SettingsWindow(); this.setCenter(settingsLayout); } } diff --git a/BrickLog-Client/src/main/java/com/example/bricklog/view/SettingsLayout.java b/BrickLog-Client/src/main/java/com/example/bricklog/view/SettingsLayout.java deleted file mode 100644 index 9002e60..0000000 --- a/BrickLog-Client/src/main/java/com/example/bricklog/view/SettingsLayout.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.example.bricklog.view; - -import javafx.geometry.Insets; -//import javafx.geometry.Pos; -import javafx.scene.control.CheckBox; -import javafx.scene.control.Label; -import javafx.scene.control.TextField; -import javafx.scene.layout.VBox; - -public class SettingsLayout extends VBox { - - public SettingsLayout() { - this.setSpacing(10); - this.setPadding(new Insets(20)); - - Label settingsTitle = new Label("Settings"); - settingsTitle.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;"); - - // Example settings: toggle for sound, username input - CheckBox soundToggle = new CheckBox("Enable Sound"); - TextField usernameField = new TextField(); - usernameField.setPromptText("Enter your username"); - - this.getChildren().addAll(settingsTitle, soundToggle, usernameField); - } -} diff --git a/BrickLog-Client/src/main/java/com/example/bricklog/view/SettingsWindow.java b/BrickLog-Client/src/main/java/com/example/bricklog/view/SettingsWindow.java new file mode 100644 index 0000000..eb7b340 --- /dev/null +++ b/BrickLog-Client/src/main/java/com/example/bricklog/view/SettingsWindow.java @@ -0,0 +1,118 @@ +package com.example.bricklog.view; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import static javafx.scene.paint.Color.WHITE; +import javafx.scene.text.Font; + +public class SettingsWindow extends BorderPane { + + private final StackPane contentPane; + private final VBox generalSettings; + private final VBox serverSettings; + private final Label connectionStatus; + + public SettingsWindow() { + // Menu on the left side for navigation + VBox menu = new VBox(); + menu.setSpacing(10); + menu.setPadding(new Insets(10)); + menu.setStyle("-fx-background-color: #f0f0f0;"); + + // Labels for the menu + Label generalLabel = new Label("General"); + generalLabel.setStyle("-fx-font-weight: bold; cursor: hand;"); + generalLabel.setOnMouseClicked(event -> showGeneralSettings()); + + Label serverLabel = new Label("Server"); + serverLabel.setStyle("-fx-font-weight: bold; cursor: hand;"); + serverLabel.setOnMouseClicked(event -> showServerSettings()); + + menu.getChildren().addAll(generalLabel, serverLabel); + this.setLeft(menu); + + // StackPane to hold different settings panels + contentPane = new StackPane(); + this.setCenter(contentPane); + + // Define General Settings panel + generalSettings = new VBox(10); + generalSettings.setPadding(new Insets(15)); + generalSettings.setAlignment(Pos.TOP_LEFT); + Label themeLabel = new Label("Theme:"); + CheckBox darkTheme = new CheckBox("Dark Theme"); + + Label layoutLabel = new Label("Layout:"); + CheckBox compactLayout = new CheckBox("Compact Layout"); + + generalSettings.getChildren().addAll(themeLabel, darkTheme, layoutLabel, compactLayout); + + // Define Server Settings panel + serverSettings = new VBox(10); + serverSettings.setPadding(new Insets(15)); + serverSettings.setAlignment(Pos.TOP_LEFT); + + // Connection Status Label + connectionStatus = new Label("Server Status: Not Connected"); + connectionStatus.setFont(new Font("Arial", 14)); + connectionStatus.setTextFill(WHITE); + connectionStatus.setStyle("-fx-background-color: lightpink; -fx-padding: 5;"); + connectionStatus.setAlignment(Pos.CENTER); + connectionStatus.setMaxWidth(Double.MAX_VALUE); + + // Server IP field & Connect button + Label ipLabel = new Label("Server IP:"); + TextField ipField = new TextField(); + ipField.setPromptText("Enter server IP address..."); + + Button connectButton = new Button("Connect"); + connectButton.setOnAction(event -> connectToServer(ipField.getText())); + + serverSettings.getChildren().addAll(connectionStatus, ipLabel, ipField, connectButton); + + + // Add panels to contentPane and show the default panel + contentPane.getChildren().addAll(generalSettings, serverSettings); + showGeneralSettings(); // Default to showing the general settings + } + + // Method to show the General Settings panel + private void showGeneralSettings() { + generalSettings.setVisible(true); + generalSettings.toFront(); + serverSettings.setVisible(false); + } + + // Method to show the Server Settings panel + private void showServerSettings() { + serverSettings.setVisible(true); + serverSettings.toFront(); + generalSettings.setVisible(false); + } + + // Method to connect to the server + private void connectToServer(String ipAddress) { + boolean isConnected = simulateServerConnection(ipAddress); // Replace with real connection logic + + if (isConnected) { + connectionStatus.setText("Connected"); + connectionStatus.setStyle("-fx-background-color: lightgreen; -fx-padding: 5;"); + } else { + connectionStatus.setText("Not Connected"); + connectionStatus.setStyle("-fx-background-color: lightpink; -fx-padding: 5;"); + } + } + + // Simulated connection logic for demonstration purposes + private boolean simulateServerConnection(String ipAddress) { + // Here, add logic for real server connection. For now, a simple placeholder: + return !ipAddress.isEmpty() && ipAddress.equals("127.0.0.1"); + } +} diff --git a/BrickLog-Client/target/bricklog-client-0.1-SNAPSHOT.jar b/BrickLog-Client/target/bricklog-client-0.1-SNAPSHOT.jar index 6940f79..75a2272 100644 Binary files a/BrickLog-Client/target/bricklog-client-0.1-SNAPSHOT.jar and b/BrickLog-Client/target/bricklog-client-0.1-SNAPSHOT.jar differ diff --git a/BrickLog-Client/target/classes/com/example/bricklog/view/MainLayout.class b/BrickLog-Client/target/classes/com/example/bricklog/view/MainLayout.class index 47593c7..d13920e 100644 Binary files a/BrickLog-Client/target/classes/com/example/bricklog/view/MainLayout.class and b/BrickLog-Client/target/classes/com/example/bricklog/view/MainLayout.class differ diff --git a/BrickLog-Client/target/classes/com/example/bricklog/view/SettingsLayout.class b/BrickLog-Client/target/classes/com/example/bricklog/view/SettingsLayout.class deleted file mode 100644 index 34ad165..0000000 Binary files a/BrickLog-Client/target/classes/com/example/bricklog/view/SettingsLayout.class and /dev/null differ diff --git a/BrickLog-Client/target/classes/com/example/bricklog/view/SettingsWindow.class b/BrickLog-Client/target/classes/com/example/bricklog/view/SettingsWindow.class new file mode 100644 index 0000000..39254c2 Binary files /dev/null and b/BrickLog-Client/target/classes/com/example/bricklog/view/SettingsWindow.class differ diff --git a/BrickLog-Client/target/classes/css/config/application.properties b/BrickLog-Client/target/classes/css/config/application.properties deleted file mode 100644 index e69de29..0000000 diff --git a/BrickLog-Client/target/classes/css/dark-theme.css b/BrickLog-Client/target/classes/css/dark-theme.css deleted file mode 100644 index e69de29..0000000 diff --git a/BrickLog-Client/target/classes/css/light-theme.css b/BrickLog-Client/target/classes/css/light-theme.css deleted file mode 100644 index e69de29..0000000 diff --git a/BrickLog-Client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/BrickLog-Client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 32bafbc..dd037de 100644 --- a/BrickLog-Client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/BrickLog-Client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,3 +1,4 @@ com\example\bricklog\BrickLogClientApplication.class com\example\bricklog\view\MainLayout.class +com\example\bricklog\view\SettingsWindow.class com\example\bricklog\view\GalleryLayout.class diff --git a/BrickLog-Server/sql/schema.sql b/BrickLog-Server/sql/schema.sql new file mode 100644 index 0000000..725a992 --- /dev/null +++ b/BrickLog-Server/sql/schema.sql @@ -0,0 +1,19 @@ +-- Create a new database called 'bricklog_db' +CREATE DATABASE bricklog_db +GO + +-- Grant Permissions & Flush +GRANT ALL PERMISSIONS TO bl_server IDENTIFIED BY l3g0D3t41l$h3r3 +GO + +-- Create a new table called 'collection_table' in schema 'bricklog_db' +-- Create the table in the specified schema +CREATE TABLE lego_builds ( + id INT NOT NULL PRIMARY KEY, -- Lego Build ID can be used here (hence not Auto_increment) + builder VARCHAR(255) NOT NULL, + buildName VARCHAR(255) NOT NULL, + is_kitset BOOLEAN NOT NULL, + buildDescription VARCHAR(1000) NOT NULL, + record_created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +GO \ No newline at end of file diff --git a/BrickLog-Server/src/.dockerignore b/BrickLog-Server/src/.dockerignore new file mode 100644 index 0000000..d52840a --- /dev/null +++ b/BrickLog-Server/src/.dockerignore @@ -0,0 +1,7 @@ +sql/ +target/ +*.log +*.class +.idea/ +*.iml +*.DS_Store \ No newline at end of file diff --git a/BrickLog-Server/src/Dockerfile b/BrickLog-Server/src/Dockerfile new file mode 100644 index 0000000..053b5a9 --- /dev/null +++ b/BrickLog-Server/src/Dockerfile @@ -0,0 +1,14 @@ +# Use a base image that includes JDK +FROM openjdk:21-jdk-slim + +# Set the working directory +WORKDIR /app + +# Copy the built JAR file into the container +COPY target/BrickLog-Server-0.1.jar app.jar + +# Expose the port your application runs on +EXPOSE 8080 + +# Command to run the application +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/BrickLog-Server/src/docker-compose.yml b/BrickLog-Server/src/docker-compose.yml new file mode 100644 index 0000000..c417cce --- /dev/null +++ b/BrickLog-Server/src/docker-compose.yml @@ -0,0 +1,29 @@ +version: '0.1' + +services: + bricklog-server: + build: + context: ./BrickLog-Server + dockerfile: Dockerfile + ports: + - "8080:8080" # Adjust based on your server's port + environment: + - SPRING_DATASOURCE_URL=jdbc:mariadb://db:3306/bricklog + - SPRING_DATASOURCE_USERNAME=bl_server + - SPRING_DATASOURCE_PASSWORD=l3g0D3t41l$h3r3 + depends_on: + - db # Ensure the database starts before the server + + db: + image: mysql:8.0 + restart: always + environment: + MYSQL_DATABASE: bricklog + MYSQL_ROOT_PASSWORD: root # Set a strong password in production + ports: + - "3306:3306" # Expose MySQL port + volumes: + - db_data:/var/lib/mysql # Persist database data + +volumes: + db_data: