Newer
Older

Karsch Lukas
committed
package mi.hdm.controllers;
import javafx.fxml.FXML;

Karsch Lukas
committed
import javafx.scene.layout.AnchorPane;

Karsch Lukas
committed
import javafx.scene.layout.TilePane;
import mi.hdm.components.CategoryCheckBox;
import mi.hdm.components.RecipeVbox;

Karsch Lukas
committed
import mi.hdm.recipes.*;

Karsch Lukas
committed
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Karsch Lukas
committed
import java.util.ArrayList;
import java.util.List;

Karsch Lukas
committed
public class MainPageController extends BaseController {
private final static Logger log = LogManager.getLogger(MainPageController.class);
private final RecipeManager recipeManager;
private final CategoryManager categoryManager;

Karsch Lukas
committed
private final List<CategoryCheckBox> categoryCheckboxesInGui = new ArrayList<>();
private final List<RecipeVbox> currentRecipesInGUI = new ArrayList<>(); //keeps track of all Nodes in the GUI that represent a recipe

Karsch Lukas
committed

Karsch Lukas
committed
@FXML
private AnchorPane parent;
@FXML
private TilePane recipeTilePane;

Karsch Lukas
committed
public MainPageController(RecipeManager recipeManager, CategoryManager categoryManager) {

Karsch Lukas
committed
this.recipeManager = recipeManager;
this.categoryManager = categoryManager;

Karsch Lukas
committed
}
@FXML

Karsch Lukas
committed
public void initialize() {
loadHeader(parent);

Karsch Lukas
committed
mapRecipes(recipeManager.getRecipes());

Karsch Lukas
committed
log.debug("Added {} recipes to GUI", recipeManager.getRecipes().size());

Karsch Lukas
committed
}
@FXML
public void handleAddRecipe() {

Karsch Lukas
committed
log.info("User is trying to add recipe!");

Karsch Lukas
committed
}

Karsch Lukas
committed
private void mapRecipes(List<Recipe> recipes) {
recipeTilePane.getChildren().removeAll(currentRecipesInGUI);
currentRecipesInGUI.clear(); //remove all recipes...

Karsch Lukas
committed
for (Recipe recipe : recipes) {
RecipeVbox recipeVbox = new RecipeVbox(recipe);
recipeVbox.setOnMouseClicked(mouseEvent -> System.out.format("User selected '%s'.%n", recipe.getName())); //TODO: this needs to display the recipe view
currentRecipesInGUI.add(recipeVbox);

Karsch Lukas
committed
}
recipeTilePane.getChildren().addAll(currentRecipesInGUI); //... and add the new ones

Karsch Lukas
committed
}
private void mapCategories() {
for (final Category category : categoryManager.getAllCategories()) {
CategoryCheckBox categoryCheckBox = new CategoryCheckBox(category);

Karsch Lukas
committed
categoryCheckBox.setOnAction(event -> updateRecipes());
categoryCheckboxesInGui.add(categoryCheckBox); //map the category to its checkbox UI element
categories.getChildren().add(categoryCheckBox);
}
}

Karsch Lukas
committed
private void updateRecipes() {
mapRecipes(fetchSelectedRecipes());
}
private List<Recipe> fetchSelectedRecipes() {
List<Category> currentlySelectedCategories =
categoryCheckboxesInGui.stream()
.filter(CheckBox::isSelected)
.map(CategoryCheckBox::getAssociatedCategory)
.toList();
//RecipeSearch recipeSearch = new RecipeSearch(recipeManager.getRecipes()); //not needed when methods are static
return RecipeSearch.searchByCategory(recipeManager.getRecipes(), currentlySelectedCategories);