From 94c0350065c72f682b82be0453c24719a09459fd Mon Sep 17 00:00:00 2001
From: HSoreide <sofie.scisly@gmail.com>
Date: Sun, 16 Apr 2023 17:29:32 +0200
Subject: [PATCH] Ingredients can be added to the fridge

---
 .../controller/AddIngredientController.java   | 44 ++++++++++++++-----
 .../controller/SuggestRecipesController.java  | 27 ++++++++++--
 .../demo/data/recipes/IngredientsAtHand.java  |  4 +-
 src/main/resources/recipes/Fridge.register    |  6 ++-
 src/main/resources/view/AddIngredient.fxml    |  6 +--
 src/main/resources/view/SuggestRecipes.fxml   |  2 +-
 6 files changed, 70 insertions(+), 19 deletions(-)

diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/AddIngredientController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/AddIngredientController.java
index e2df33f5..5f5ad545 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/AddIngredientController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/AddIngredientController.java
@@ -3,11 +3,15 @@ package no.ntnu.idatt1002.demo.controller;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
 import javafx.fxml.Initializable;
+import javafx.scene.Parent;
 import javafx.scene.Scene;
+import javafx.scene.control.DialogPane;
 import javafx.scene.control.ListView;
 import javafx.event.ActionEvent;
 
+import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -18,7 +22,9 @@ import java.util.stream.Collectors;
 
 import javafx.scene.control.Button;
 import javafx.scene.control.TextField;
+import no.ntnu.idatt1002.demo.data.recipes.FileHandler;
 import no.ntnu.idatt1002.demo.data.recipes.FoodItem;
+import no.ntnu.idatt1002.demo.data.recipes.IngredientsAtHand;
 
 public class AddIngredientController implements Initializable {
 
@@ -28,14 +34,14 @@ public class AddIngredientController implements Initializable {
     );*/
 
     /*List<String> testIngredients =  Arrays.asList("Tester words", "Another tester word", "tomatoes that are canned", "minced meat", "blueberries");*/
+/*
     String[] testIngredients =  {"Tester words", "Another tester word", "tomatoes that are canned", "minced meat", "blueberries"};
 
+*/
 
-    private List<String> stringIngredients = Arrays.stream(FoodItem.values()).toList().stream().map(value -> value.label).toList();
-    private int noLengthOfList = stringIngredients.size();
-    String[] arrayIngredients = stringIngredients.stream().toArray(String[] ::new);
-    //private String[] arrayIngredients
-    private ObservableList<String> ingredients = FXCollections.observableArrayList(stringIngredients);
+    private ObservableList<String> ingredients;
+    private String[] ingredientsList;
+    private IngredientsAtHand ingredientsAtHand;
 
     @FXML
     private Button addBtn;
@@ -49,12 +55,24 @@ public class AddIngredientController implements Initializable {
     @FXML
     private Button searchBtn;
 
+
     @FXML
-    void addToFridge(ActionEvent event) {
+    void addToFridge(ActionEvent event) throws IOException {
         System.out.printf("Add ingredient to fridge");
         String item = listView.getSelectionModel().getSelectedItem();
         System.out.printf("The item was: %s", item);
 
+        ingredientsAtHand.addIngredient(FoodItem.valueOf(item.replace(" ", "_").toUpperCase()));
+        FileHandler.writeIngredientsAtHand(ingredientsAtHand, "Fridge");
+
+  /*      FXMLLoader loader = new FXMLLoader();
+        loader.setLocation(getClass().getResource("/view/SuggestRecipesController.fxml"));
+        loader.load();
+        // Location is not set.
+
+        SuggestRecipesController suggestRecipesController = loader.getController();
+        suggestRecipesController.addToFridge(item);*/
+
         // Add to existing at hand and write to file. if not null/blank
 
     }
@@ -63,19 +81,25 @@ public class AddIngredientController implements Initializable {
     void search(ActionEvent event) {
         System.out.printf("Searching for ingredient to fridge");
        listView.getItems().clear();
-       listView.getItems().addAll(searchList(searchBar.getText(), arrayIngredients));
+       listView.getItems().addAll(searchList(searchBar.getText(), ingredientsList));
 
     }
 
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
 
-   /*     ObservableList ingredients = FXCollections.observableArrayList(testIngredients);*/
-
-
+        ingredientsAtHand = FileHandler.readIngredientsAtHand("AtHandRegister");
 
+   /*     ObservableList ingredients = FXCollections.observableArrayList(testIngredients);*/
   /*      ObservableList<FoodItem> ingredients = FXCollections.observableArrayList(
                 FoodItem.values());*/
+
+        //TODO: Move into initializer? - Tidy up!
+        List<String> stringIngredients = Arrays.stream(FoodItem.values()).toList().stream().map(value -> value.label).toList();
+        int noLengthOfList = stringIngredients.size();
+        ingredientsList = stringIngredients.stream().toArray(String[] ::new);
+        //private String[] arrayIngredients
+        ingredients = FXCollections.observableArrayList(stringIngredients);
         // Fill list with ingredients
         listView.setItems(ingredients);
 
diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/SuggestRecipesController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/SuggestRecipesController.java
index ba7622a9..75af4a24 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/controller/SuggestRecipesController.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/controller/SuggestRecipesController.java
@@ -32,6 +32,9 @@ public class SuggestRecipesController implements Initializable {
     @FXML
     private Button addToFridgeBtn;
 
+    @FXML
+    private Button removeBtn;
+
     @FXML
     private Button goBackBtn;
 
@@ -57,7 +60,14 @@ public class SuggestRecipesController implements Initializable {
         dialog.setTitle("Add ingredient to fridge");
 
         Optional<ButtonType> clickedButton = dialog.showAndWait();
-        if (clickedButton.get() == ButtonType.OK) {
+
+        if (clickedButton.get() == ButtonType.APPLY) {
+        // Refresh ingredientsAtHand.
+            ingredientsAtHand = FileHandler.readIngredientsAtHand("Fridge");
+            //TODO: Duplicate
+            fridge = FXCollections.observableArrayList(ingredientsAtHand.getIngredientsAtHand().stream().map(foodItem -> foodItem.label).toList());
+            fridgeList.setItems(fridge);
+
             System.out.println("Clickecked OK!");
         }else if(clickedButton.get() == ButtonType.CANCEL) {
             System.out.println("Close the dialog");
@@ -65,11 +75,21 @@ public class SuggestRecipesController implements Initializable {
     }
 
     @FXML
-    private void removeIngredient(ActionEvent event) throws IOException {
+    private void removeFromFridge(ActionEvent event) throws IOException {
 
         System.out.println("Remove the selected from fridge!");
         String toRemove = fridgeList.getSelectionModel().getSelectedItem();
-        ingredientsAtHand.removeIngredient(FoodItem.valueOf(toRemove.toUpperCase()));
+        ingredientsAtHand.removeIngredient(FoodItem.valueOf(toRemove.replace(" ", "_").toUpperCase()));
+        //TODO: Remove toUppercase solution above.
+        //TODO: Consider factoring out to a update method.
+        fridge = FXCollections.observableArrayList(ingredientsAtHand.getIngredientsAtHand().stream().map(foodItem -> foodItem.label).toList());
+        fridgeList.setItems(fridge);
+    }
+
+    public void addToFridge(String ingredient) {
+        System.out.println("Add to fridge!");
+        String toRemove = fridgeList.getSelectionModel().getSelectedItem();
+        ingredientsAtHand.addIngredient(FoodItem.valueOf(toRemove.toUpperCase()));
         //TODO: Remove toUppercase solution above.
         //TODO: Consider factoring out to a update method.
         fridge = FXCollections.observableArrayList(ingredientsAtHand.getIngredientsAtHand().stream().map(foodItem -> foodItem.label).toList());
@@ -77,6 +97,7 @@ public class SuggestRecipesController implements Initializable {
 
     }
 
+
     @FXML
     private void goBack(ActionEvent event) throws IOException {
         FXMLLoader loader = new FXMLLoader();
diff --git a/src/main/java/no/ntnu/idatt1002/demo/data/recipes/IngredientsAtHand.java b/src/main/java/no/ntnu/idatt1002/demo/data/recipes/IngredientsAtHand.java
index d3708f3f..ef4ccf0a 100644
--- a/src/main/java/no/ntnu/idatt1002/demo/data/recipes/IngredientsAtHand.java
+++ b/src/main/java/no/ntnu/idatt1002/demo/data/recipes/IngredientsAtHand.java
@@ -21,7 +21,9 @@ public class IngredientsAtHand {
      * @param ingredient The ingredient object to add to the collection of ingredients at hand.
      */
     public void addIngredient(FoodItem ingredient) {
-        this.ingredientsAtHand.add(ingredient);
+        if(!this.atHand(ingredient)) {
+            this.ingredientsAtHand.add(ingredient);
+        }
     }
 
     //TODO: Unit tests and javadoc
diff --git a/src/main/resources/recipes/Fridge.register b/src/main/resources/recipes/Fridge.register
index 57c23bbd..fb1ef97c 100644
--- a/src/main/resources/recipes/Fridge.register
+++ b/src/main/resources/recipes/Fridge.register
@@ -1,4 +1,8 @@
 POTATO
 MILK
 LEMON
-MINCED_MEAT
\ No newline at end of file
+MINCED_MEAT
+YELLOW_CHEESE
+ORANGE
+SALSA_SAUCE
+ONION
diff --git a/src/main/resources/view/AddIngredient.fxml b/src/main/resources/view/AddIngredient.fxml
index 89a4fcd2..db5e96d1 100644
--- a/src/main/resources/view/AddIngredient.fxml
+++ b/src/main/resources/view/AddIngredient.fxml
@@ -24,7 +24,7 @@
                               <Insets />
                            </HBox.margin>
                         </TextField>
-                        <Button fx:id="searchBtn" alignment="CENTER" contentDisplay="CENTER" defaultButton="true" mnemonicParsing="false" onAction="#search" text="Search" textAlignment="CENTER">
+                        <Button fx:id="searchBtn" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#search" text="Search" textAlignment="CENTER">
                            <font>
                               <Font size="14.0" />
                            </font>
@@ -47,7 +47,7 @@
                   </ListView>
                   <Pane prefHeight="81.0" prefWidth="600.0">
                      <children>
-                        <Button fx:id="addBtn" layoutX="275.0" layoutY="7.0" mnemonicParsing="false" onAction="#addToFridge" text="ADD">
+                        <Button fx:id="addBtn" defaultButton="true" layoutX="275.0" layoutY="7.0" mnemonicParsing="false" onAction="#addToFridge" text="ADD">
                            <font>
                               <Font size="14.0" />
                            </font>
@@ -69,7 +69,7 @@
       </Label>
    </header>
    <buttonTypes>
-      <ButtonType fx:constant="OK" />
+      <ButtonType fx:constant="APPLY" />
       <ButtonType fx:constant="CANCEL" />
    </buttonTypes>
 </DialogPane>
diff --git a/src/main/resources/view/SuggestRecipes.fxml b/src/main/resources/view/SuggestRecipes.fxml
index 181d21fe..dbde1809 100644
--- a/src/main/resources/view/SuggestRecipes.fxml
+++ b/src/main/resources/view/SuggestRecipes.fxml
@@ -37,7 +37,7 @@
                               <Font size="14.0" />
                            </font>
                         </Button>
-                        <Button fx:id="removeBtn" layoutX="31.0" layoutY="11.0" mnemonicParsing="false" onAction="#removeIngredient" text="Remove">
+                        <Button fx:id="removeBtn" layoutX="31.0" layoutY="11.0" mnemonicParsing="false" onAction="#removeFromFridge" text="Remove">
                            <font>
                               <Font size="14.0" />
                            </font>
-- 
GitLab