diff --git a/client/src/main/java/client/MyModule.java b/client/src/main/java/client/MyModule.java index e40e613..3ebcfe0 100644 --- a/client/src/main/java/client/MyModule.java +++ b/client/src/main/java/client/MyModule.java @@ -21,8 +21,8 @@ import client.scenes.nutrition.NutritionDetailsCtrl; import client.scenes.nutrition.NutritionViewCtrl; import client.scenes.recipe.IngredientListCtrl; import client.scenes.recipe.RecipeStepListCtrl; -import client.service.NonFunctionalShoppingListService; import client.service.ShoppingListService; +import client.service.ShoppingListServiceImpl; import client.service.ShoppingListViewModel; import client.utils.ConfigService; import client.utils.LocaleManager; @@ -61,7 +61,7 @@ public class MyModule implements Module { new WebSocketDataService<>() ); binder.bind(ShoppingListViewModel.class).toInstance(new ShoppingListViewModel()); - binder.bind(ShoppingListService.class).to(NonFunctionalShoppingListService.class); + binder.bind(ShoppingListService.class).to(ShoppingListServiceImpl.class); binder.bind(new TypeLiteral>() {}).toInstance( new WebSocketDataService<>() ); diff --git a/client/src/main/java/client/service/NonFunctionalShoppingListService.java b/client/src/main/java/client/service/NonFunctionalShoppingListService.java index 82dad5c..595f6a3 100644 --- a/client/src/main/java/client/service/NonFunctionalShoppingListService.java +++ b/client/src/main/java/client/service/NonFunctionalShoppingListService.java @@ -3,12 +3,10 @@ package client.service; import com.google.inject.Inject; import commons.FormalIngredient; import commons.Recipe; -import commons.RecipeIngredient; -import javafx.util.Pair; +import commons.Unit; import org.apache.commons.lang3.NotImplementedException; import java.util.List; -import java.util.Optional; public class NonFunctionalShoppingListService extends ShoppingListService { @Inject @@ -32,7 +30,7 @@ public class NonFunctionalShoppingListService extends ShoppingListService { } @Override - public void putArbitraryItem(String name) { + public void putArbitraryItem(Double amount, String name, Unit unit) { throw new NotImplementedException(); } @@ -52,7 +50,7 @@ public class NonFunctionalShoppingListService extends ShoppingListService { } @Override - public List>> getItems() { + public List getItems() { throw new NotImplementedException(); } diff --git a/client/src/main/java/client/service/ShopListItem.java b/client/src/main/java/client/service/ShopListItem.java new file mode 100644 index 0000000..f35b8d0 --- /dev/null +++ b/client/src/main/java/client/service/ShopListItem.java @@ -0,0 +1,32 @@ +package client.service; + +import commons.FormalIngredient; + +public class ShopListItem { + private FormalIngredient ingredient; + private String refRecipeName; + public ShopListItem(FormalIngredient ingredient, String refRecipeName) { + this.ingredient = ingredient; + this.refRecipeName = refRecipeName; + } + public ShopListItem(FormalIngredient ingredient) { + this.ingredient = ingredient; + this.refRecipeName = null; + } + + public FormalIngredient getIngredient() { + return ingredient; + } + + public String getRefRecipeName() { + return refRecipeName; + } + + public void setRefRecipeName(String refRecipeName) { + this.refRecipeName = refRecipeName; + } + + public void setIngredient(FormalIngredient ingredient) { + this.ingredient = ingredient; + } +} diff --git a/client/src/main/java/client/service/ShoppingListService.java b/client/src/main/java/client/service/ShoppingListService.java index c212750..8f32152 100644 --- a/client/src/main/java/client/service/ShoppingListService.java +++ b/client/src/main/java/client/service/ShoppingListService.java @@ -3,28 +3,31 @@ package client.service; import com.google.inject.Inject; import commons.FormalIngredient; import commons.Recipe; -import commons.RecipeIngredient; -import javafx.util.Pair; +import commons.Unit; import java.util.List; -import java.util.Optional; public abstract class ShoppingListService { - private ShoppingListViewModel viewModel; + private final ShoppingListViewModel viewModel; @Inject public ShoppingListService(ShoppingListViewModel viewModel) { this.viewModel = viewModel; } + + public ShoppingListViewModel getViewModel() { + return viewModel; + } + public abstract void putIngredient(FormalIngredient ingredient); public abstract void putIngredient(FormalIngredient ingredient, Recipe recipe); public abstract void putIngredient(FormalIngredient ingredient, String recipeName); - public abstract void putArbitraryItem(String name); + public abstract void putArbitraryItem(Double amount, String name, Unit unit); public abstract FormalIngredient purgeIngredient(Long id); public abstract FormalIngredient purgeIngredient(String ingredientName); public abstract void reset(); - public abstract List>> getItems(); + public abstract List getItems(); public abstract String makePrintable(); } diff --git a/client/src/main/java/client/service/ShoppingListServiceImpl.java b/client/src/main/java/client/service/ShoppingListServiceImpl.java new file mode 100644 index 0000000..03a23f6 --- /dev/null +++ b/client/src/main/java/client/service/ShoppingListServiceImpl.java @@ -0,0 +1,65 @@ +package client.service; + +import com.google.inject.Inject; +import commons.FormalIngredient; +import commons.Recipe; +import commons.Unit; +import org.apache.commons.lang3.NotImplementedException; + +import java.util.List; + +public class ShoppingListServiceImpl extends ShoppingListService { + @Inject + public ShoppingListServiceImpl(ShoppingListViewModel viewModel) { + super(viewModel); + } + + @Override + public void putIngredient(FormalIngredient ingredient) { + getViewModel().add(ingredient); + } + + @Override + public void putIngredient(FormalIngredient ingredient, Recipe recipe) { + putIngredient(ingredient, recipe.getName()); + } + + @Override + public void putIngredient(FormalIngredient ingredient, String recipeName) { + getViewModel().add(ingredient, recipeName); + } + + @Override + public void putArbitraryItem(Double amount, String name, Unit unit) { + throw new NotImplementedException(); + } + + @Override + public FormalIngredient purgeIngredient(Long id) { + FormalIngredient i = getViewModel().get(id).getIngredient(); + getViewModel().delete(id); + return i; + } + + @Override + public FormalIngredient purgeIngredient(String ingredientName) { + FormalIngredient i = getViewModel().get(ingredientName).getIngredient(); + getViewModel().delete(ingredientName); + return i; + } + + @Override + public void reset() { + throw new NotImplementedException(); + } + + @Override + public List getItems() { + return getViewModel().getListItems(); + } + + @Override + public String makePrintable() { + return ""; + } +} diff --git a/client/src/main/java/client/service/ShoppingListViewModel.java b/client/src/main/java/client/service/ShoppingListViewModel.java index 30e03df..7bce792 100644 --- a/client/src/main/java/client/service/ShoppingListViewModel.java +++ b/client/src/main/java/client/service/ShoppingListViewModel.java @@ -4,19 +4,49 @@ import commons.FormalIngredient; import javafx.beans.property.ListProperty; import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; -import javafx.util.Pair; +import javafx.collections.ObservableList; import org.apache.commons.lang3.NotImplementedException; - -import java.util.Optional; +import java.util.function.Predicate; public class ShoppingListViewModel { /** * The formal ingredient provides the ingredient and its amount, * and the string (optional) describes the recipe where it came from. */ - private final ListProperty>> listItems = new SimpleListProperty<>(FXCollections.observableArrayList()); + private final ListProperty listItems = new SimpleListProperty<>(FXCollections.observableArrayList()); public void addArbitrary() { throw new NotImplementedException(); } + public void add(FormalIngredient formalIngredient) { + listItems.get().add(new ShopListItem(formalIngredient)); + } + public void add(FormalIngredient formalIngredient, String recipeName) { + listItems.get().add(new ShopListItem(formalIngredient, recipeName)); + } + public ShopListItem get(Long id) { + return get(item -> item.getIngredient().getId().equals(id)); + } + private ShopListItem get(Predicate matcher) { + return listItems.get().stream() + .filter(matcher) + .findFirst() + .orElseThrow(NullPointerException::new); + } + public ShopListItem get(String recipeName) { + return get(i -> i.getRefRecipeName().equals(recipeName)); + } + public void delete(Long id) { + throw new NotImplementedException(); + } + public ObservableList getListItems() { + return listItems.get(); + } + + /** + * Deleting an item of name which is not associated to any recipe. + * @param name the name of the ingredient + */ + public void delete(String name) { + } }