From b7cd7e4636829092ecefa29c8ea58714f35b225b Mon Sep 17 00:00:00 2001
From: HSoreide <sofie.scisly@gmail.com>
Date: Tue, 18 Apr 2023 11:42:48 +0200
Subject: [PATCH] List of all recipes with navigation to selected recipe

---
 .../demo/controller/AllRecipesController.java | 63 ++++++++++++++++---
 .../demo/controller/RecipeController.java     | 15 +++++
 src/main/resources/view/AllRecipes.fxml       | 14 ++---
 src/main/resources/view/Recipe.fxml           |  7 ++-
 4 files changed, 77 insertions(+), 22 deletions(-)

diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/AllRecipesController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/AllRecipesController.java
index 48bcc9e4..5d85372b 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/AllRecipesController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/AllRecipesController.java
@@ -3,6 +3,7 @@ package no.ntnu.idatt1002.demo.controller;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.fxml.Initializable;
@@ -10,13 +11,11 @@ import javafx.scene.Node;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
+import javafx.scene.control.ListView;
+import javafx.scene.input.MouseEvent;
 import javafx.stage.Stage;
-import no.ntnu.idatt1002.demo.data.recipes.FileHandler;
-import no.ntnu.idatt1002.demo.data.recipes.IngredientsAtHand;
-import no.ntnu.idatt1002.demo.data.recipes.Recipe;
-import no.ntnu.idatt1002.demo.data.recipes.RecipeRegister;
+import no.ntnu.idatt1002.demo.data.recipes.*;
 
-import javax.swing.text.html.ListView;
 import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -31,9 +30,12 @@ public class AllRecipesController implements Initializable {
     private Button goBackBtn;
 
     @FXML
-   // private ListView<String> recipeList;
+    private ListView<String> allList;
 
-    private ObservableList<Recipe> recipes;
+
+    private ObservableList<String> recipes;
+
+    private String selectedRecipeName;
 
 
     @FXML
@@ -48,6 +50,26 @@ public class AllRecipesController implements Initializable {
         stage.show();
     }
 
+    private void showRecipe(String recipeName) throws IOException {
+        FXMLLoader loader = new FXMLLoader();
+        loader.setLocation(getClass().getResource("/view/Recipe.fxml"));
+
+        Recipe recipeOfInterest = recipeRegister.getRecipe(recipeName);
+
+        Parent root = loader.load();
+
+        RecipeController recipeController = loader.getController();
+
+        recipeController.setData(recipeOfInterest);
+
+        //Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+        Stage stage = (Stage)allList.getParent().getScene().getWindow();
+        Scene scene = new Scene(root);
+        stage.setScene(scene);
+        stage.show();
+
+    }
+
 
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -57,12 +79,33 @@ public class AllRecipesController implements Initializable {
 
         int numberOfRecipes = recipeRegister.getRecipes().size();
 
+        ArrayList<Recipe> sortedRecipes = recipeRegister.pickBestFits(numberOfRecipes, ingredientsAtHand);
+
+        recipes = FXCollections.observableArrayList(sortedRecipes.stream().map(recipe -> {
+            return String.format("# %s  -  %d missing ingredients", recipe.getName(), recipe.getMissingIngredients());
+        }).toList());
+
+        allList.setItems(recipes);
+
+        // split("-").strip().
+
+
+        allList.setOnMouseClicked(new EventHandler<MouseEvent>() {
 
-        ArrayList<Recipe> recipesList = recipeRegister.pickBestFits(numberOfRecipes, ingredientsAtHand);
+            @Override
+            public void handle(MouseEvent mouseEvent) {
+                    selectedRecipeName = allList.getSelectionModel()
+                            .getSelectedItem().split("-|#")[1].strip();
 
-       /* recipes = FXCollections.observableArrayList(recipesList.stream().);
+                System.out.println(selectedRecipeName);
+                try {
+                    showRecipe(selectedRecipeName);
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
 
+            }
+        });
 
-        recipeList.setItems(recipes);*/
     }
 }
diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/RecipeController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/RecipeController.java
index 3bf9d45f..c4ba3654 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/RecipeController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/RecipeController.java
@@ -42,6 +42,9 @@ public class RecipeController implements Initializable {
     @FXML
     private Pane ingredientPane;
 
+    @FXML
+    private Button allRecipesBtn;
+
 
     private Recipe recipe;
 
@@ -88,6 +91,18 @@ public class RecipeController implements Initializable {
         stage.show();
     }
 
+    @FXML
+    private void toAllRecipes(ActionEvent event) throws IOException {
+        FXMLLoader loader = new FXMLLoader();
+        loader.setLocation(getClass().getResource("/view/AllRecipes.fxml"));
+
+        Parent root = loader.load();
+        Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+        Scene scene = new Scene(root);
+        stage.setScene(scene);
+        stage.show();
+    }
+
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
        // ingredients = FXCollections.observableArrayList(recipe.getIngredientList());
diff --git a/src/main/resources/view/AllRecipes.fxml b/src/main/resources/view/AllRecipes.fxml
index 116a05ef..397c2ec4 100644
--- a/src/main/resources/view/AllRecipes.fxml
+++ b/src/main/resources/view/AllRecipes.fxml
@@ -33,15 +33,11 @@
                </children></HBox>
          </top>
          <center>
-            <ScrollPane prefHeight="514.0" prefWidth="830.0" BorderPane.alignment="CENTER">
-              <content>
-                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="526.0" prefWidth="819.0">
-                     <children>
-                        <ListView fx:id="recipeList" prefHeight="526.0" prefWidth="819.0" styleClass="list-cell" stylesheets="@../style.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
-                     </children>
-                  </AnchorPane>
-              </content>
-            </ScrollPane>
+          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="526.0" prefWidth="819.0">
+               <children>
+                  <ListView fx:id="allList" prefHeight="526.0" prefWidth="819.0" styleClass="list-cell" stylesheets="@../style.css" />
+               </children>
+            </AnchorPane>
          </center>
          <left>
             <Pane prefHeight="595.0" prefWidth="148.0" BorderPane.alignment="CENTER" />
diff --git a/src/main/resources/view/Recipe.fxml b/src/main/resources/view/Recipe.fxml
index 8e94ed43..bd7fcfbe 100644
--- a/src/main/resources/view/Recipe.fxml
+++ b/src/main/resources/view/Recipe.fxml
@@ -16,17 +16,18 @@
          <top>
             <HBox prefHeight="136.0" prefWidth="1130.0" BorderPane.alignment="CENTER">
                <children>
-                  <Pane prefHeight="200.0" prefWidth="200.0">
+                  <Pane prefHeight="136.0" prefWidth="411.0">
                      <children>
-                        <Button id="button-stye" fx:id="goBackBtn" layoutX="76.0" layoutY="30.0" mnemonicParsing="false" onAction="#goBack" styleClass="button-style" stylesheets="@../style.css" text="Go Back">
+                        <Button id="button-stye" fx:id="goBackBtn" layoutX="81.0" layoutY="30.0" mnemonicParsing="false" onAction="#goBack" styleClass="button-style" stylesheets="@../style.css" text="Recipe Suggestions">
                            <font>
                               <Font size="14.0" />
                            </font></Button>
+                        <Button fx:id="allRecipesBtn" layoutX="81.0" layoutY="68.0" mnemonicParsing="false" onAction="#toAllRecipes" styleClass="button-style" stylesheets="@../style.css" text="All Recipes" />
                      </children>
                   </Pane>
                   <Pane prefHeight="103.0" prefWidth="853.0">
                      <children>
-                        <Label fx:id="recipeName" alignment="CENTER" contentDisplay="CENTER" layoutX="198.0" layoutY="46.0" text="RecipeName" textAlignment="CENTER">
+                        <Label fx:id="recipeName" alignment="CENTER" contentDisplay="CENTER" layoutX="107.0" layoutY="38.0" text="RecipeName" textAlignment="CENTER">
                            <font>
                               <Font size="36.0" />
                            </font>
-- 
GitLab