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 e2df33f50a05c944abaca08c1dee82c52867c6f9..5f5ad545a128657db5d563776322db5af6759bc1 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 ba7622a97c6f79e42c547b974d27ea84018cb900..75af4a24f9cf0c98fd3696f279cc7a74e9166ee5 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 d3708f3f461a9814539f6db281a65f6d503791d3..ef4ccf0adb04e2d50422740da6caf19b7e4c4ea5 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 57c23bbd2e72598d21864d220a8383cabb8096c0..fb1ef97c3dafb895dfa2bf4f030bcf5e2bdb2483 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 89a4fcd2e33da791375ca7be2979d2c84b86e6df..db5e96d15b266482da62a13476c5b2e92272f9c1 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 181d21fe06094041d0cfc0783071558a747fdd3d..dbde1809a1a61c0db8597086fbd805773865a9c9 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>