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