From 12c506eaf7209c13759518dda911bdca20f57a5d Mon Sep 17 00:00:00 2001
From: Lukas Karsch <lk224@hdm-stuttgart.de>
Date: Wed, 10 May 2023 12:09:46 +0200
Subject: [PATCH] added BaseController that stores FXML files for all views,
 started bugfixing for equals methods, started working on recipe view fxml
 file

---
 src/main/java/mi/hdm/FxmlGuiDriver.java       |  2 --
 src/main/java/mi/hdm/TastyPages.java          | 17 +++++++---
 .../mi/hdm/controllers/BaseController.java    |  9 +++++
 .../hdm/controllers/RecipeViewController.java |  4 +++
 src/main/java/mi/hdm/controllers/Views.java   |  6 ++++
 .../java/mi/hdm/filesystem/CSVParser.java     |  1 +
 src/main/java/mi/hdm/recipes/Category.java    |  2 +-
 src/main/java/mi/hdm/recipes/Ingredient.java  |  5 ++-
 src/main/java/mi/hdm/recipes/Recipe.java      |  8 ++---
 .../mi/hdm/shoppingList/ShoppingList.java     |  2 +-
 src/main/java/module-info.java                |  1 +
 src/main/resources/fxml/recipe-view.fxml      | 33 +++++++++++++++++++
 .../mi/hdm/shoppingList/ShoppingListTest.java |  2 +-
 13 files changed, 75 insertions(+), 17 deletions(-)
 create mode 100644 src/main/java/mi/hdm/controllers/BaseController.java
 create mode 100644 src/main/java/mi/hdm/controllers/RecipeViewController.java
 create mode 100644 src/main/java/mi/hdm/controllers/Views.java
 create mode 100644 src/main/resources/fxml/recipe-view.fxml

diff --git a/src/main/java/mi/hdm/FxmlGuiDriver.java b/src/main/java/mi/hdm/FxmlGuiDriver.java
index a270426..b3c0a2d 100644
--- a/src/main/java/mi/hdm/FxmlGuiDriver.java
+++ b/src/main/java/mi/hdm/FxmlGuiDriver.java
@@ -5,7 +5,6 @@ import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
-
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -26,7 +25,6 @@ public class FxmlGuiDriver extends Application {
     }
 
     public void start(Stage stage) throws Exception {
-
         log.info("Starting Hello JavaFX and Maven demonstration application");
 
         final String fxmlFile = "/fxml/hello.fxml";
diff --git a/src/main/java/mi/hdm/TastyPages.java b/src/main/java/mi/hdm/TastyPages.java
index 6172eb3..b2e9966 100644
--- a/src/main/java/mi/hdm/TastyPages.java
+++ b/src/main/java/mi/hdm/TastyPages.java
@@ -1,12 +1,15 @@
 package mi.hdm;
 
 import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
 import javafx.scene.Scene;
-import javafx.scene.layout.GridPane;
 import javafx.stage.Stage;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.io.IOException;
+
 public class TastyPages extends Application {
     private final static Logger log = LogManager.getLogger(TastyPages.class);
 
@@ -19,12 +22,16 @@ public class TastyPages extends Application {
     public void save() {}
 
     @Override
-    public void start(Stage stage) {
-        final GridPane gridPane = new GridPane();
-        final Scene scene = new Scene(gridPane, 1400, 800);
+    public void start(Stage stage) throws IOException {
+        final String fxmlFile = "/fxml/recipe-view.fxml";
+        log.debug("Loading FXML for main view from: {}", fxmlFile);
+        final FXMLLoader loader = new FXMLLoader();
+        final Parent rootNode = (Parent) loader.load(getClass().getResourceAsStream(fxmlFile));
+
+        final Scene scene = new Scene(rootNode, 1400, 800);
         //scene.getStylesheets().add("/styles/styles.css");
 
-        stage.setTitle("Start page");
+        stage.setTitle("View Recipe");
         stage.setMaximized(true); //open scene in full screen
         stage.setScene(scene);
         stage.show();
diff --git a/src/main/java/mi/hdm/controllers/BaseController.java b/src/main/java/mi/hdm/controllers/BaseController.java
new file mode 100644
index 0000000..d7a6ea7
--- /dev/null
+++ b/src/main/java/mi/hdm/controllers/BaseController.java
@@ -0,0 +1,9 @@
+package mi.hdm.controllers;
+
+import java.util.Map;
+
+public class BaseController {
+    protected final static Map<Views, String> VIEWS = Map.of(
+            Views.MAIN, "/fxml/main.fxml",
+            Views.RECIPE_VIEW, "fxml/recipe-view.fxml");
+}
diff --git a/src/main/java/mi/hdm/controllers/RecipeViewController.java b/src/main/java/mi/hdm/controllers/RecipeViewController.java
new file mode 100644
index 0000000..edd3d95
--- /dev/null
+++ b/src/main/java/mi/hdm/controllers/RecipeViewController.java
@@ -0,0 +1,4 @@
+package mi.hdm.controllers;
+
+public class RecipeViewController extends BaseController {
+}
diff --git a/src/main/java/mi/hdm/controllers/Views.java b/src/main/java/mi/hdm/controllers/Views.java
new file mode 100644
index 0000000..e877605
--- /dev/null
+++ b/src/main/java/mi/hdm/controllers/Views.java
@@ -0,0 +1,6 @@
+package mi.hdm.controllers;
+
+public enum Views {
+    MAIN,
+    RECIPE_VIEW
+}
diff --git a/src/main/java/mi/hdm/filesystem/CSVParser.java b/src/main/java/mi/hdm/filesystem/CSVParser.java
index 59fa405..ed4bca7 100644
--- a/src/main/java/mi/hdm/filesystem/CSVParser.java
+++ b/src/main/java/mi/hdm/filesystem/CSVParser.java
@@ -102,6 +102,7 @@ public class CSVParser {
     }
 
     private double parseNumberFromString(String candidate) {
+        //TODO check unit before returning
         if (candidate.isBlank()) return 0.0;
 
         StringBuilder numValue = new StringBuilder();
diff --git a/src/main/java/mi/hdm/recipes/Category.java b/src/main/java/mi/hdm/recipes/Category.java
index 1932640..d66b371 100644
--- a/src/main/java/mi/hdm/recipes/Category.java
+++ b/src/main/java/mi/hdm/recipes/Category.java
@@ -31,7 +31,7 @@ public class Category {
     @Override
     public boolean equals(Object o){
         if (o instanceof Category c) {
-            return this.name.equals(c.getName()) || this.colourCode == c.getColourCode();
+            return this.name.equals(c.getName()) && this.colourCode == c.getColourCode();
         }
         return false;
     }
diff --git a/src/main/java/mi/hdm/recipes/Ingredient.java b/src/main/java/mi/hdm/recipes/Ingredient.java
index 7fabd02..d07cc2e 100644
--- a/src/main/java/mi/hdm/recipes/Ingredient.java
+++ b/src/main/java/mi/hdm/recipes/Ingredient.java
@@ -35,9 +35,8 @@ public class Ingredient implements RecipeComponent {
 
     @Override
     public boolean equals(Object o) {
-        if (o instanceof Ingredient) {
-            Ingredient in = (Ingredient) o;
-            return this.name.equals(in.getName());
+        if (o instanceof Ingredient in) {
+            return this.name.equals(in.getName()) && this.unit.equals(in.getMeasurement()) && this.nutritionTable.equals(in.getNutritionTable());
         }
         return false;
     }
diff --git a/src/main/java/mi/hdm/recipes/Recipe.java b/src/main/java/mi/hdm/recipes/Recipe.java
index bc7523d..4d1d548 100644
--- a/src/main/java/mi/hdm/recipes/Recipe.java
+++ b/src/main/java/mi/hdm/recipes/Recipe.java
@@ -8,12 +8,12 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 public class Recipe implements RecipeComponent {
     //TODO: Add filepath for image
     private static final Logger log = LogManager.getLogger(Recipe.class);
 
-
     private Map<RecipeComponent, Integer> ingredients;
     private String name;
     private String description;
@@ -172,9 +172,9 @@ public class Recipe implements RecipeComponent {
 
     @Override
     public boolean equals(Object o) {
-        if (o instanceof Recipe r) {
-            return r.getName().equals(this.name);
-        }
+        if (this == o) return true;
+        if (o instanceof Recipe recipe)
+            return preparationTimeMins == recipe.preparationTimeMins && Objects.equals(ingredients, recipe.ingredients) && Objects.equals(name, recipe.name) && Objects.equals(description, recipe.description) && Objects.equals(preparation, recipe.preparation) && Objects.equals(categories, recipe.categories) && Objects.equals(nutritionTable, recipe.nutritionTable) && Objects.equals(creationTime, recipe.creationTime);
         return false;
     }
 
diff --git a/src/main/java/mi/hdm/shoppingList/ShoppingList.java b/src/main/java/mi/hdm/shoppingList/ShoppingList.java
index 0ad8c90..a0c4534 100644
--- a/src/main/java/mi/hdm/shoppingList/ShoppingList.java
+++ b/src/main/java/mi/hdm/shoppingList/ShoppingList.java
@@ -40,7 +40,7 @@ public class ShoppingList {
         log.info("Added {} to shopping list.", ingredient.getName());
     }
 
-    public void addAllToShppingList(Recipe recipe) {
+    public void addAllToShoppingList(Recipe recipe) {
         recipe.getIngredients().keySet()
                 .forEach(element -> {
                     if (element instanceof Ingredient i)
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index f3b1e62..80f4d7b 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -5,4 +5,5 @@ module gui {
 
     opens mi.hdm to javafx.fxml;
     exports mi.hdm;
+    exports mi.hdm.controllers;
 }
\ No newline at end of file
diff --git a/src/main/resources/fxml/recipe-view.fxml b/src/main/resources/fxml/recipe-view.fxml
new file mode 100644
index 0000000..95a176c
--- /dev/null
+++ b/src/main/resources/fxml/recipe-view.fxml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<AnchorPane prefHeight="400.0" prefWidth="677.0" xmlns="http://javafx.com/javafx/17.0.2-ea"
+            xmlns:fx="http://javafx.com/fxml/1" fx:controller="mi.hdm.controllers.RecipeViewController">
+    <SplitPane dividerPositions="0.15" orientation="VERTICAL" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
+               AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+        <GridPane alignment="CENTER" prefHeight="100.0" prefWidth="675.0" style="-fx-background-color: D91C1C;">
+            <columnConstraints>
+                <ColumnConstraints percentWidth="15"/>
+                <ColumnConstraints percentWidth="50"/>
+                <ColumnConstraints percentWidth="35"/>
+            </columnConstraints>
+            <MenuButton mnemonicParsing="false" text="MENU">
+                <items>
+                    <MenuItem mnemonicParsing="false" text="Action 1"/>
+                    <MenuItem mnemonicParsing="false" text="Action 2"/>
+                </items>
+            </MenuButton>
+            <Label alignment="CENTER" prefHeight="17.0" prefWidth="352.0" GridPane.columnIndex="1">LOGO</Label>
+            <TextField GridPane.columnIndex="2"/>
+            <rowConstraints>
+                <RowConstraints/>
+            </rowConstraints>
+            <padding>
+                <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
+            </padding>
+        </GridPane>
+        <TilePane prefHeight="333.0" prefWidth="675.0"/>
+    </SplitPane>
+</AnchorPane>
diff --git a/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java b/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java
index 5b2b4c5..b2756c6 100644
--- a/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java
+++ b/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java
@@ -42,7 +42,7 @@ class ShoppingListTest {
         Map<Ingredient, Boolean> expected = Map.of(ing1, false, ing2, false);
 
         //when
-        underTest.addAllToShppingList(r1);
+        underTest.addAllToShoppingList(r1);
 
         //expect
         assertEquals(expected, underTest.getList());
-- 
GitLab