diff --git a/client/src/main/java/client/MyModule.java b/client/src/main/java/client/MyModule.java
index 9f27a8c..a5dd197 100644
--- a/client/src/main/java/client/MyModule.java
+++ b/client/src/main/java/client/MyModule.java
@@ -17,6 +17,7 @@ package client;
import client.scenes.FoodpalApplicationCtrl;
import client.scenes.recipe.IngredientListCtrl;
+import client.scenes.recipe.RecipeStepListCtrl;
import client.utils.LocaleManager;
import com.google.inject.Binder;
import com.google.inject.Module;
@@ -33,6 +34,7 @@ public class MyModule implements Module {
binder.bind(AddNameCtrl.class).in(Scopes.SINGLETON);
binder.bind(FoodpalApplicationCtrl.class).in(Scopes.SINGLETON);
binder.bind(IngredientListCtrl.class).in(Scopes.SINGLETON);
+ binder.bind(RecipeStepListCtrl.class).in(Scopes.SINGLETON);
binder.bind(LocaleManager.class).in(Scopes.SINGLETON);
}
}
\ No newline at end of file
diff --git a/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java b/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java
index 7fcf49b..c0aecfc 100644
--- a/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java
+++ b/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java
@@ -8,6 +8,7 @@ import java.util.Locale;
import client.exception.UpdateException;
import client.scenes.recipe.IngredientListCtrl;
+import client.scenes.recipe.RecipeStepListCtrl;
import client.utils.DefaultRecipeFactory;
import client.utils.LocaleAware;
import client.utils.LocaleManager;
@@ -33,6 +34,7 @@ public class FoodpalApplicationCtrl implements LocaleAware {
private final ServerUtils server;
private final LocaleManager localeManager;
private final IngredientListCtrl ingredientListCtrl;
+ private final RecipeStepListCtrl stepListCtrl;
public VBox detailsScreen;
public HBox editableTitleArea;
@@ -99,16 +101,19 @@ public class FoodpalApplicationCtrl implements LocaleAware {
MainCtrl mainCtrl,
ServerUtils server,
LocaleManager localeManager,
- IngredientListCtrl ingredientListCtrl
+ IngredientListCtrl ingredientListCtrl,
+ RecipeStepListCtrl stepListCtrl
) {
this.mainCtrl = mainCtrl;
this.server = server;
this.localeManager = localeManager;
this.ingredientListCtrl = ingredientListCtrl;
+ this.stepListCtrl = stepListCtrl;
}
@Override
public void initializeComponents() {
+ // TODO Reduce code duplication??
// Initialize callback for ingredient list updates
this.ingredientListCtrl.setUpdateCallback(newList -> {
Recipe focusedRecipe = recipeList.getFocusModel().getFocusedItem();
@@ -124,6 +129,20 @@ public class FoodpalApplicationCtrl implements LocaleAware {
throw new UpdateException("Unable to update recipe to server for " + focusedRecipe);
}
});
+ this.stepListCtrl.setUpdateCallback(newList -> {
+ Recipe focusedRecipe = recipeList.getFocusModel().getFocusedItem();
+ if (focusedRecipe == null) {
+ // edge case error for NPE.
+ throw new NullPointerException("Null recipe whereas ingredients are edited");
+ }
+ focusedRecipe.setPreparationSteps(newList);
+ try {
+ // propagate changes to server
+ server.updateRecipe(focusedRecipe);
+ } catch (IOException | InterruptedException e) {
+ throw new UpdateException("Unable to update recipe to server for " + focusedRecipe);
+ }
+ });
// Show recipe name in the list
recipeList.setCellFactory(list -> new ListCell<>() {
@Override
@@ -163,11 +182,13 @@ public class FoodpalApplicationCtrl implements LocaleAware {
printRecipeButton.setText(getLocaleString("menu.button.print"));
recipesLabel.setText(getLocaleString("menu.label.recipes"));
+
+ // TODO propagate ResourceBundle lang changes to nested controller
// ingredientsLabel.setText(getLocaleString("menu.label.ingredients"));
- preparationLabel.setText(getLocaleString("menu.label.preparation"));
+ // preparationLabel.setText(getLocaleString("menu.label.preparation"));
// addIngredientButton.setText(getLocaleString("menu.button.add.ingredient"));
- addPreparationStepButton.setText(getLocaleString("menu.button.add.step"));
+ // addPreparationStepButton.setText(getLocaleString("menu.button.add.step"));
}
@Override
@@ -177,12 +198,11 @@ public class FoodpalApplicationCtrl implements LocaleAware {
private void showRecipeDetails(Recipe recipe) {
if (recipe == null) {
- preparationListView.getItems().clear();
return;
}
showName(recipe.getName());
ingredientListCtrl.refetchFromRecipe(recipe);
- preparationListView.getItems().setAll(recipe.getPreparationSteps());
+ stepListCtrl.refetchFromRecipe(recipe);
}
// Button handlers
diff --git a/client/src/main/java/client/scenes/recipe/RecipeStepListCtrl.java b/client/src/main/java/client/scenes/recipe/RecipeStepListCtrl.java
index 7ed9c36..2839028 100644
--- a/client/src/main/java/client/scenes/recipe/RecipeStepListCtrl.java
+++ b/client/src/main/java/client/scenes/recipe/RecipeStepListCtrl.java
@@ -5,7 +5,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
-import java.util.function.Function;
+import java.util.function.Consumer;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
@@ -29,7 +29,7 @@ public class RecipeStepListCtrl implements Initializable {
* As the step list in {@link Recipe} is immutable,
* this copies that list upon initialization to this mutable list.
*
- * Please use the {@link #setUpdateCallback(Function)} function to listen for
+ * Please use the {@link #setUpdateCallback(Consumer)} function to listen for
* changes and update the recipe accordingly.
*