From a3d79efd4e4167dfd65241e83096100976ef6928 Mon Sep 17 00:00:00 2001
From: Lara Blersch <lb210@hdm-stuttgart.de>
Date: Fri, 23 Jun 2023 18:56:51 +0200
Subject: [PATCH] updatet setImage in recipe creator and editor, might be not
 correct yet in recipe creator

---
 .../controllers/RecipeCreatorController.java  | 22 ++++--
 .../controllers/RecipeEditorController.java   | 67 +++++++++----------
 .../hdm/controllers/RecipeViewController.java |  1 +
 .../java/mi/hdm/filesystem/FileManager.java   |  1 +
 .../java/mi/hdm/recipes/RecipeManager.java    |  2 +-
 src/main/resources/fxml/recipe-creator.fxml   |  2 +-
 6 files changed, 51 insertions(+), 44 deletions(-)

diff --git a/src/main/java/mi/hdm/controllers/RecipeCreatorController.java b/src/main/java/mi/hdm/controllers/RecipeCreatorController.java
index d8eb4df..2b5a72a 100644
--- a/src/main/java/mi/hdm/controllers/RecipeCreatorController.java
+++ b/src/main/java/mi/hdm/controllers/RecipeCreatorController.java
@@ -2,7 +2,6 @@ package mi.hdm.controllers;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.*;
-import javafx.scene.layout.BorderPane;
 import javafx.scene.layout.FlowPane;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.VBox;
@@ -15,6 +14,12 @@ import mi.hdm.recipes.*;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -38,10 +43,6 @@ public class RecipeCreatorController extends BaseController {
 
     private static final Logger log = LogManager.getLogger(RecipeCreatorController.class);
 
-    @FXML
-    private BorderPane borderPane;
-    @FXML
-    private SplitPane topSplitPane;
     @FXML
     private TextField nameTextField;
     @FXML
@@ -166,8 +167,9 @@ public class RecipeCreatorController extends BaseController {
         try {
             recipe = new Recipe(name, ingredients, description, preparation, categories, preparationTimeMins);
             recipeManager.addRecipe(recipe);
-            //recipe.setImage(imagePathTextField.getText());
-            //TODO: set Image properly
+            if (Files.exists(Paths.get(new URI(imagePathTextField.getText())))) {
+                recipe.setImage(new URL(imagePathTextField.getText()));
+            }
             log.info("Recipe '{}' was created.", name);
             changeScene(View.RECIPE_VIEW, recipe);
         } catch (InvalidRecipeException e) {
@@ -184,6 +186,12 @@ public class RecipeCreatorController extends BaseController {
             a.show();
             log.error(e.getMessage());
             log.error("Recipe not created.");
+        } catch (MalformedURLException | URISyntaxException e) {
+            Recipe r = recipeManager.getRecipeByName(name).get();
+            r.setImage(Recipe.class.getResource("/images/dish-fork-and-knife.png"));
+            log.error("Invalid image path, loaded default image.");
+            log.info("Recipe '{}' was created.", name);
+            changeScene(View.RECIPE_VIEW, r);
         }
     }
 
diff --git a/src/main/java/mi/hdm/controllers/RecipeEditorController.java b/src/main/java/mi/hdm/controllers/RecipeEditorController.java
index 8a73464..6a5e90e 100644
--- a/src/main/java/mi/hdm/controllers/RecipeEditorController.java
+++ b/src/main/java/mi/hdm/controllers/RecipeEditorController.java
@@ -2,6 +2,7 @@ package mi.hdm.controllers;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.*;
+import javafx.scene.image.ImageView;
 import javafx.scene.layout.FlowPane;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.VBox;
@@ -9,11 +10,16 @@ import mi.hdm.components.CategoryCheckBox;
 import mi.hdm.components.CategoryPreviewLabel;
 import mi.hdm.components.IngredientSearchResultLabel;
 import mi.hdm.components.SelectedIngredientLabel;
-import mi.hdm.exceptions.InvalidRecipeException;
 import mi.hdm.recipes.*;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -25,8 +31,7 @@ import static mi.hdm.helpers.Validation.isInteger;
 public class RecipeEditorController extends BaseController {
     private static final int ELEMENTS_PER_SEARCH_PAGE = 100;
 
-    private Recipe recipe;
-    private final RecipeManager recipeManager;
+    private final Recipe recipe;
     private final CategoryManager categoryManager;
     private final IngredientManager ingredientManager;
     private final RecipeSearch recipeSearch;
@@ -34,7 +39,7 @@ public class RecipeEditorController extends BaseController {
     private List<RecipeComponent> searchResults;
     private final List<Category> selectedCategories;
     private final List<RecipeComponent> selectedIngredients;
-    private List<SelectedIngredientLabel> selectedIngredientLabels;
+    private final List<SelectedIngredientLabel> selectedIngredientLabels;
     private int currentPage = 0;
     private int maxPages = 0;
 
@@ -66,7 +71,6 @@ public class RecipeEditorController extends BaseController {
 
     public RecipeEditorController(Recipe recipe, RecipeManager recipeManager, IngredientManager ingredientManager, CategoryManager categoryManager) {
         this.recipe = recipe;
-        this.recipeManager = recipeManager;
         this.categoryManager = categoryManager;
         this.ingredientManager = ingredientManager;
 
@@ -75,13 +79,9 @@ public class RecipeEditorController extends BaseController {
 
         searchResults = new ArrayList<>();
         selectedIngredients = new ArrayList<>();
-        ingredientManager.getIngredientsFromKeys(recipe.getIngredients()).forEach((i, amount) -> {
-            if (i instanceof Ingredient) {
-                selectedIngredients.add(i);
-            } else {
-                log.error("No ingredient with code {}", i.getUniqueCode());
-            }
-        });
+        ingredientManager.getIngredientsFromKeys(recipe.getIngredients()).forEach((i, amount) ->
+                selectedIngredients.add(i)
+        );
         recipeSearch = new RecipeSearch(recipeManager, ingredientManager);
         selectedIngredientsVbox = new VBox();
         selectedIngredientLabels = new ArrayList<>();
@@ -101,10 +101,15 @@ public class RecipeEditorController extends BaseController {
         descriptionTextArea.setText(recipe.getDescription());
         recipe.getIngredients().forEach((k, v) -> {
             HBox ingredientHBox = new HBox();
-            Button deleteIngredientButton = new Button("X");
-            deleteIngredientButton.setStyle("-fx-text-fill: d91c1c;" +
-                    "-fx-font-size: 12;" +
-                    "-fx-background-size: small;");
+            Button deleteIngredientButton = new Button();
+            deleteIngredientButton.setStyle("-fx-background-color: dedede;" +
+                    "-fx-background-radius: 5;" +
+                    "-fx-padding: 5;");
+            ImageView imageView = new ImageView(String.valueOf(Recipe.class.getResource("/images/Tasty_Pages_X_Icon.png")));
+            imageView.setPreserveRatio(true);
+            imageView.setFitHeight(15);
+            imageView.setFitWidth(15);
+            deleteIngredientButton.setGraphic(imageView);
             deleteIngredientButton.setOnAction(h -> {
                 selectedIngredients.remove(ingredientManager.getIngredient(k));
                 log.debug("User deleted ingredient '{}' from recipe.", ingredientManager.getIngredient(k).get().getName());
@@ -204,9 +209,9 @@ public class RecipeEditorController extends BaseController {
 
         recipe.setName(nameTextField.getText());
         Map<RecipeComponent, Integer> ingredients = new HashMap<>();
-        selectedIngredientLabels.forEach(label -> {
-            ingredients.put(label.getComponent(), label.getAmount());
-        });
+        selectedIngredientLabels.forEach(label ->
+                ingredients.put(label.getComponent(), label.getAmount())
+        );
 
 
         try {
@@ -216,24 +221,16 @@ public class RecipeEditorController extends BaseController {
             recipe.setCategoriesFromObjects(List.copyOf(selectedCategories));
             String prepTime = prepTimeTextField.getText();
             recipe.setPreparationTimeMins( isInteger(prepTime) ? Integer.parseInt(prepTime) : null);
-            //recipe.setImage(imagePathTextField.getText());
-            //TODO: set Image properly
+            if (Files.exists(Paths.get(new URI(imagePathTextField.getText())))) {
+                recipe.setImage(new URL(imagePathTextField.getText()));
+            }
+            log.info("Recipe '{}' was edited.", recipe.getName());
+            changeSceneToRecipe();
+        } catch (MalformedURLException | URISyntaxException e) {
+            recipe.setImage(Recipe.class.getResource("/images/dish-fork-and-knife.png"));
+            log.error("Invalid image path, loaded default image.");
             log.info("Recipe '{}' was edited.", recipe.getName());
             changeSceneToRecipe();
-        } catch (InvalidRecipeException e) {
-            Alert a = new Alert(Alert.AlertType.ERROR);
-            a.setHeaderText("Error creating recipe");
-            a.setContentText(e.getMessage());
-            a.show();
-            log.error(e.getMessage());
-            log.error("Recipe not created.");
-        } catch (RuntimeException e) {
-            Alert a = new Alert(Alert.AlertType.ERROR);
-            a.setHeaderText("Error creating recipe");
-            a.setContentText("Something went wrong when creating the recipe. Check all your inputs!");
-            a.show();
-            log.error(e.getMessage());
-            log.error("Recipe not created.");
         }
     }
 
diff --git a/src/main/java/mi/hdm/controllers/RecipeViewController.java b/src/main/java/mi/hdm/controllers/RecipeViewController.java
index d9170e7..d20639b 100644
--- a/src/main/java/mi/hdm/controllers/RecipeViewController.java
+++ b/src/main/java/mi/hdm/controllers/RecipeViewController.java
@@ -79,6 +79,7 @@ public class RecipeViewController extends BaseController {
         Image image = new Image(recipe.getImageURL().toString());
         recipeImage.setImage(image);
         recipeImage.setPreserveRatio(true);
+        //TODO: for some images (f.ex. Tasty_Pages_Arrow_back.png) the image is larger than the image view
     }
 
 
diff --git a/src/main/java/mi/hdm/filesystem/FileManager.java b/src/main/java/mi/hdm/filesystem/FileManager.java
index 96f741e..dd27682 100644
--- a/src/main/java/mi/hdm/filesystem/FileManager.java
+++ b/src/main/java/mi/hdm/filesystem/FileManager.java
@@ -38,6 +38,7 @@ public class FileManager {
 
     private final static Logger log = LogManager.getLogger(FileManager.class);
 
+    //TODO: delete before handing in because not used?
     public static void serializeToFile(TastyPages app) {
         log.info("Writing user data to '{}'", PATH_TO_USER_DATA);
         //Serialize ingredient manager
diff --git a/src/main/java/mi/hdm/recipes/RecipeManager.java b/src/main/java/mi/hdm/recipes/RecipeManager.java
index 8a1e372..5ca03bc 100644
--- a/src/main/java/mi/hdm/recipes/RecipeManager.java
+++ b/src/main/java/mi/hdm/recipes/RecipeManager.java
@@ -53,7 +53,7 @@ public class RecipeManager {
         log.info("Recipe deleted successfully.");
     }
 
-    private Optional<Recipe> getRecipeByName(String name) {
+    public Optional<Recipe> getRecipeByName(String name) {
         for (final Recipe r : allRecipes.values()) {
             if (name.equals(r.getName())) {
                 return Optional.of(r);
diff --git a/src/main/resources/fxml/recipe-creator.fxml b/src/main/resources/fxml/recipe-creator.fxml
index 2007cb5..684ac3f 100644
--- a/src/main/resources/fxml/recipe-creator.fxml
+++ b/src/main/resources/fxml/recipe-creator.fxml
@@ -21,7 +21,7 @@
                     </padding>
                     <VBox prefHeight="200.0" prefWidth="100.0" style="-fx-background-color: ffffff;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                   <Label text="Set path to recipe image" />
-                  <TextField promptText="Set path to recipe image if you want" style="-fx-background-color: transparent; -fx-border-width: 4; -fx-border-radius: 5; -fx-border-color: d91c1c;">
+                  <TextField fx:id="imagePathTextField" promptText="Set path to recipe image if you want" style="-fx-background-color: transparent; -fx-border-width: 4; -fx-border-radius: 5; -fx-border-color: d91c1c;">
                      <VBox.margin>
                         <Insets top="5.0" />
                      </VBox.margin></TextField>
-- 
GitLab