package no.ntnu.idatt1002.demo.controller; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.ListView; import javafx.event.ActionEvent; import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.List; import java.util.ResourceBundle; 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 { private ObservableList<String> ingredients; private String[] ingredientsList; private IngredientsAtHand ingredientsAtHand; @FXML private Button addBtn; @FXML private ListView<String> listView; @FXML private TextField searchBar; @FXML private Button searchBtn; @FXML void addToFridge(ActionEvent event) throws IOException { String item = listView.getSelectionModel().getSelectedItem(); if(item != null) { ingredientsAtHand.addIngredient(FoodItem.valueOf(item.replace(" ", "_").toUpperCase())); FileHandler.writeIngredientsAtHand(ingredientsAtHand, "Fridge"); } } @FXML void search(ActionEvent event) { listView.getItems().clear(); listView.getItems().addAll(searchList(searchBar.getText(), ingredientsList)); } @Override public void initialize(URL url, ResourceBundle resourceBundle) { ingredientsAtHand = FileHandler.readIngredientsAtHand("Fridge"); //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); ingredients = FXCollections.observableArrayList(stringIngredients); // Fill list with ingredients listView.setItems(ingredients.sorted()); } private List<String> searchList(String searchWords, String[] listOfStrings) { String[] searchWordsArray = searchWords.trim().split(" "); return Arrays.stream(listOfStrings).filter((in) -> { return Arrays.stream(searchWordsArray).allMatch((word) -> in.toLowerCase().contains(word.toLowerCase())); }).collect(Collectors.toList()); } }