From c7660d9750b617186b85d17c57e0f0ab4b0ca16d Mon Sep 17 00:00:00 2001
From: Lara Blersch <lb210@hdm-stuttgart.de>
Date: Fri, 9 Jun 2023 08:19:09 +0200
Subject: [PATCH] recipe-view and controller almost finished, ingredients and
 categories missing

---
 src/main/java/mi/hdm/TastyPages.java          |  4 +-
 .../hdm/controllers/MainPageController.java   |  2 +-
 .../hdm/controllers/RecipeViewController.java | 50 +++++++++++++++++--
 src/main/java/mi/hdm/controllers/View.java    |  3 +-
 .../java/mi/hdm/filesystem/FileManager.java   |  1 -
 src/main/resources/fxml/recipe-view.fxml      | 22 ++++----
 6 files changed, 63 insertions(+), 19 deletions(-)

diff --git a/src/main/java/mi/hdm/TastyPages.java b/src/main/java/mi/hdm/TastyPages.java
index c088745..e3c02c6 100644
--- a/src/main/java/mi/hdm/TastyPages.java
+++ b/src/main/java/mi/hdm/TastyPages.java
@@ -83,8 +83,8 @@ public class TastyPages {
         String name = "Something";
         //ingredientManager.getAllIngredients().forEach((k, v) -> System.out.println(k + " : " + v));
         Map<RecipeComponent, Integer> ingredients = Map.of(ingredientManager.getIngredient("i1401213838").get(), 5);
-        String description = "10-Minuten-Rezept";
-        List<String> preparation = List.of("Put it in a pan and heat it.");
+        String description = "10-Minute-Recipe";
+        List<String> preparation = List.of("Put it in a pan and heat it.", "Now enjoy!");
         List<Category> categories = List.of(category);
         Recipe recipe1 = new Recipe(name, ingredients, description, preparation, categories, 10);
         recipeManager.addRecipe(recipe1);
diff --git a/src/main/java/mi/hdm/controllers/MainPageController.java b/src/main/java/mi/hdm/controllers/MainPageController.java
index 3f1a667..a654d0d 100644
--- a/src/main/java/mi/hdm/controllers/MainPageController.java
+++ b/src/main/java/mi/hdm/controllers/MainPageController.java
@@ -57,7 +57,7 @@ public class MainPageController extends BaseController {
 
         for (Recipe recipe : recipes) {
             RecipeVbox recipeVbox = new RecipeVbox(recipe, categoryManager);
-            recipeVbox.setOnMouseClicked(mouseEvent -> changeScene(View.RECIPE_VIEW, recipeVbox.getAssociatedRecipe())); //TODO: this needs to display the recipe view
+            recipeVbox.setOnMouseClicked(mouseEvent -> changeScene(View.RECIPE_VIEW, recipeVbox.getAssociatedRecipe()));
             currentRecipesInGUI.add(recipeVbox);
         }
         recipeTilePane.getChildren().addAll(currentRecipesInGUI); //... and add the new ones
diff --git a/src/main/java/mi/hdm/controllers/RecipeViewController.java b/src/main/java/mi/hdm/controllers/RecipeViewController.java
index 56c40f3..ce60131 100644
--- a/src/main/java/mi/hdm/controllers/RecipeViewController.java
+++ b/src/main/java/mi/hdm/controllers/RecipeViewController.java
@@ -2,30 +2,48 @@ package mi.hdm.controllers;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.cell.PropertyValueFactory;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.AnchorPane;
 import mi.hdm.recipes.Recipe;
+import mi.hdm.recipes.RecipeManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class RecipeViewController extends BaseController {
     private static final Logger log = LogManager.getLogger(RecipeViewController.class);
 
+
     private final Recipe recipe;
+    private RecipeManager recipeManager;
     @FXML
     private AnchorPane parent;
-   // @FXML
-    //private Label recipeDescription;
     @FXML
     private Label recipeName;
     @FXML
+    private Label recipeDescription;
+    @FXML
+    private Label recipePreparation;
+    @FXML
+    private TableView recipeIngredients;
+    @FXML
+    private TableColumn measurement;
+    @FXML
+    private TableColumn ingredient;
+    @FXML
     private ImageView recipeImage;
 
 
 
-    public RecipeViewController(Recipe recipe) {
+    public RecipeViewController(Recipe recipe, RecipeManager recipeManager) {
         this.recipe = recipe;
+        this.recipeManager = recipeManager;
     }
 
     @FXML
@@ -43,12 +61,34 @@ public class RecipeViewController extends BaseController {
         loadHeader(parent);
 
         recipeName.setText(recipe.getName());
-        //recipeDescription.setText(recipe.getDescription());
-        //TODO: display recipe description, preparation and ingredients
+        recipeDescription.setText(recipe.getDescription());
+        recipePreparation.setText(String.join("\n", recipe.getPreparation()));
+        //TODO: display ingredients, this way does not work
+        measurement.setCellValueFactory(new PropertyValueFactory<String, String>("Measurement"));
+        ingredient.setCellValueFactory(new PropertyValueFactory<String, String>("Ingredient"));
+        recipeIngredients.getItems().setAll(recipe.getIngredients());
 
         //idea for solution from: https://stackoverflow.com/questions/22710053/how-can-i-show-an-image-using-the-imageview-component-in-javafx-and-fxml
         log.debug("Trying to load image for recipe from '{}'", recipe.getImageURL());
         Image image = new Image(recipe.getImageURL().toString());
         recipeImage.setImage(image);
     }
+
+    /*private List<String> parseIngredientsToList() {
+        List<String> ingredientList = new ArrayList<>();
+
+        return ingredientList;
+    }*/
+
+    @FXML
+    public void handleEditRecipe() {
+        log.info("User is trying to edit recipe");
+        changeScene(View.RECIPE_CREATOR);
+    }
+    @FXML
+    public void handleDeleteRecipe() {
+        log.info("User is trying to delete recipe");
+        recipeManager.deleteRecipe(recipe);
+        changeSceneToMain();
+    }
 }
diff --git a/src/main/java/mi/hdm/controllers/View.java b/src/main/java/mi/hdm/controllers/View.java
index 286a981..6f1fbbe 100644
--- a/src/main/java/mi/hdm/controllers/View.java
+++ b/src/main/java/mi/hdm/controllers/View.java
@@ -5,6 +5,7 @@ import javafx.scene.Parent;
 import mi.hdm.GuiController;
 import mi.hdm.TastyPages;
 import mi.hdm.recipes.Recipe;
+import mi.hdm.recipes.RecipeManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -42,7 +43,7 @@ public enum View {
 
             case RECIPE_VIEW -> loader.setControllerFactory((callback) -> {
                 if (args != null && args.length == 1 && args[0] instanceof Recipe recipe) {
-                    return new RecipeViewController(recipe);
+                    return new RecipeViewController(recipe, model.getRecipeManager());
                 } else {
                     throw new InvalidParameterException();
                 }
diff --git a/src/main/java/mi/hdm/filesystem/FileManager.java b/src/main/java/mi/hdm/filesystem/FileManager.java
index 0db3c46..1f9b9cb 100644
--- a/src/main/java/mi/hdm/filesystem/FileManager.java
+++ b/src/main/java/mi/hdm/filesystem/FileManager.java
@@ -305,7 +305,6 @@ public class FileManager {
 
     public static String getAbsolutePathFromResourceFolder(String p) {
         try {
-            //TODO: check if this only works for classes or also for images (.png/ .jpeg)
             URL resourceUrl = FileManager.class.getResource(p);
             assert resourceUrl != null;
             Path path = Paths.get(resourceUrl.toURI());
diff --git a/src/main/resources/fxml/recipe-view.fxml b/src/main/resources/fxml/recipe-view.fxml
index e401335..7c68651 100644
--- a/src/main/resources/fxml/recipe-view.fxml
+++ b/src/main/resources/fxml/recipe-view.fxml
@@ -12,11 +12,11 @@
            <padding>
                <Insets bottom="16.0" left="16.0" right="16.0" />
            </padding>
-           <GridPane prefHeight="40.0" prefWidth="840.0">
+           <GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="40.0" prefWidth="840.0">
                <columnConstraints>
                    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
-                   <ColumnConstraints hgrow="SOMETIMES" maxWidth="609.5914306640625" minWidth="10.0" prefWidth="607.0957641601562" />
-                   <ColumnConstraints hgrow="SOMETIMES" maxWidth="274.7779541015625" minWidth="10.0" prefWidth="40.40423583984375" />
+                   <ColumnConstraints hgrow="SOMETIMES" maxWidth="609.5914306640625" minWidth="10.0" prefWidth="585.0" />
+                   <ColumnConstraints hgrow="SOMETIMES" maxWidth="274.7779541015625" minWidth="10.0" prefWidth="110.5" />
                </columnConstraints>
                <rowConstraints>
                    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
@@ -49,12 +49,12 @@
                          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                        </rowConstraints>
                         <children>
-                               <Button fx:id="recipeDelete" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Delete" textAlignment="CENTER" textFill="#d91c1c">
+                               <Button fx:id="recipeDelete" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#handleDeleteRecipe" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Delete" textAlignment="CENTER" textFill="#d91c1c">
                                    <font>
                                        <Font name="System Bold" size="17.0" />
                                    </font>
                                </Button>
-                           <Button fx:id="recipeDelete" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Edit" textAlignment="CENTER" textFill="#d91c1c" GridPane.columnIndex="1">
+                           <Button fx:id="editButton" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#handleEditRecipe" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Edit" textAlignment="CENTER" textFill="#d91c1c" GridPane.columnIndex="1">
                               <font>
                                  <Font name="System Bold" size="17.0" />
                               </font>
@@ -68,9 +68,9 @@
                         <VBox.margin>
                            <Insets bottom="10.0" top="10.0" />
                         </VBox.margin></ListView>
-                     <ScrollPane prefHeight="244.0" prefWidth="393.0" style="-fx-border-color: D91C1C; -fx-border-width: 4; -fx-border-radius: 10; -fx-background-color: transparent;">
+                     <ScrollPane fitToHeight="true" fitToWidth="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="244.0" prefWidth="393.0" style="-fx-border-color: D91C1C; -fx-border-width: 4; -fx-border-radius: 10; -fx-background-color: transparent;">
                         <content>
-                           <Label fx:id="recipePreparation" alignment="TOP_LEFT" contentDisplay="CENTER" lineSpacing="1.5" prefHeight="372.0" prefWidth="393.0" style="-fx-background-color: transparent;" text=" sjdfjakjfkj j kasdjfkasjdkf aorjfaksdjf alösjfailjskdf aöiejraö skjdfoakdjfpoeaijf alskjdf aroijf oajdfo oerajfija oaeijr oaiejrüoj oaejf üoaijer fjüaroifj üeorj ojeaüroit oijetiüfj üeor" wrapText="true">
+                           <Label fx:id="recipePreparation" alignment="TOP_LEFT" contentDisplay="CENTER" lineSpacing="1.5" prefHeight="372.0" prefWidth="393.0" style="-fx-background-color: transparent;" text="Recipe Preparation" wrapText="true">
                               <font>
                                  <Font name="Inter Regular" size="12.0" />
                               </font>
@@ -97,14 +97,18 @@
                         <VBox.margin>
                            <Insets bottom="10.0" />
                         </VBox.margin></Pane>
+                     <Label fx:id="recipeDescription" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="52.0" prefWidth="338.0" style="-fx-border-radius: 10; -fx-background-color: transparent; -fx-border-color: d91c1c; -fx-border-width: 4;" text="Recipe Description">
+                        <padding>
+                           <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
+                        </padding></Label>
                      <Pane layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: transparent; -fx-border-color: d91c1c; -fx-border-radius: 10; -fx-border-width: 4;">
                         <children>
                            <ScrollBar layoutX="317.0" layoutY="5.0" orientation="VERTICAL" prefHeight="190.0" prefWidth="14.0" />
                            <TableView fx:id="recipeIngredients" layoutY="-1.0" prefHeight="200.0" prefWidth="321.0" style="-fx-background-color: transparent;">
 
                              <columns>
-                               <TableColumn editable="false" prefWidth="91.0" text="C1" />
-                               <TableColumn editable="false" prefWidth="229.0" text="C2" />
+                               <TableColumn fx:id="measurement" editable="false" prefWidth="91.0" text="C1" />
+                               <TableColumn fx:id="ingredient" editable="false" prefWidth="229.0" text="C2" />
                              </columns>
                               <padding>
                                  <Insets bottom="4.0" left="4.0" right="4.0" top="4.0" />
-- 
GitLab