feat: revised shop list item api
This commit is contained in:
parent
11b038de1d
commit
79b46541a8
6 changed files with 145 additions and 17 deletions
|
|
@ -21,8 +21,8 @@ import client.scenes.nutrition.NutritionDetailsCtrl;
|
||||||
import client.scenes.nutrition.NutritionViewCtrl;
|
import client.scenes.nutrition.NutritionViewCtrl;
|
||||||
import client.scenes.recipe.IngredientListCtrl;
|
import client.scenes.recipe.IngredientListCtrl;
|
||||||
import client.scenes.recipe.RecipeStepListCtrl;
|
import client.scenes.recipe.RecipeStepListCtrl;
|
||||||
import client.service.NonFunctionalShoppingListService;
|
|
||||||
import client.service.ShoppingListService;
|
import client.service.ShoppingListService;
|
||||||
|
import client.service.ShoppingListServiceImpl;
|
||||||
import client.service.ShoppingListViewModel;
|
import client.service.ShoppingListViewModel;
|
||||||
import client.utils.ConfigService;
|
import client.utils.ConfigService;
|
||||||
import client.utils.LocaleManager;
|
import client.utils.LocaleManager;
|
||||||
|
|
@ -61,7 +61,7 @@ public class MyModule implements Module {
|
||||||
new WebSocketDataService<>()
|
new WebSocketDataService<>()
|
||||||
);
|
);
|
||||||
binder.bind(ShoppingListViewModel.class).toInstance(new ShoppingListViewModel());
|
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<WebSocketDataService<Long, Ingredient>>() {}).toInstance(
|
binder.bind(new TypeLiteral<WebSocketDataService<Long, Ingredient>>() {}).toInstance(
|
||||||
new WebSocketDataService<>()
|
new WebSocketDataService<>()
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,10 @@ package client.service;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import commons.FormalIngredient;
|
import commons.FormalIngredient;
|
||||||
import commons.Recipe;
|
import commons.Recipe;
|
||||||
import commons.RecipeIngredient;
|
import commons.Unit;
|
||||||
import javafx.util.Pair;
|
|
||||||
import org.apache.commons.lang3.NotImplementedException;
|
import org.apache.commons.lang3.NotImplementedException;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class NonFunctionalShoppingListService extends ShoppingListService {
|
public class NonFunctionalShoppingListService extends ShoppingListService {
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -32,7 +30,7 @@ public class NonFunctionalShoppingListService extends ShoppingListService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void putArbitraryItem(String name) {
|
public void putArbitraryItem(Double amount, String name, Unit unit) {
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,7 +50,7 @@ public class NonFunctionalShoppingListService extends ShoppingListService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Pair<FormalIngredient, Optional<String>>> getItems() {
|
public List<ShopListItem> getItems() {
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
32
client/src/main/java/client/service/ShopListItem.java
Normal file
32
client/src/main/java/client/service/ShopListItem.java
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,28 +3,31 @@ package client.service;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import commons.FormalIngredient;
|
import commons.FormalIngredient;
|
||||||
import commons.Recipe;
|
import commons.Recipe;
|
||||||
import commons.RecipeIngredient;
|
import commons.Unit;
|
||||||
import javafx.util.Pair;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public abstract class ShoppingListService {
|
public abstract class ShoppingListService {
|
||||||
private ShoppingListViewModel viewModel;
|
private final ShoppingListViewModel viewModel;
|
||||||
@Inject
|
@Inject
|
||||||
public ShoppingListService(ShoppingListViewModel viewModel) {
|
public ShoppingListService(ShoppingListViewModel viewModel) {
|
||||||
this.viewModel = viewModel;
|
this.viewModel = viewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ShoppingListViewModel getViewModel() {
|
||||||
|
return viewModel;
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void putIngredient(FormalIngredient ingredient);
|
public abstract void putIngredient(FormalIngredient ingredient);
|
||||||
public abstract void putIngredient(FormalIngredient ingredient, Recipe recipe);
|
public abstract void putIngredient(FormalIngredient ingredient, Recipe recipe);
|
||||||
public abstract void putIngredient(FormalIngredient ingredient, String recipeName);
|
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(Long id);
|
||||||
public abstract FormalIngredient purgeIngredient(String ingredientName);
|
public abstract FormalIngredient purgeIngredient(String ingredientName);
|
||||||
|
|
||||||
public abstract void reset();
|
public abstract void reset();
|
||||||
|
|
||||||
public abstract List<Pair<FormalIngredient, Optional<String>>> getItems();
|
public abstract List<ShopListItem> getItems();
|
||||||
public abstract String makePrintable();
|
public abstract String makePrintable();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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<ShopListItem> getItems() {
|
||||||
|
return getViewModel().getListItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String makePrintable() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,19 +4,49 @@ import commons.FormalIngredient;
|
||||||
import javafx.beans.property.ListProperty;
|
import javafx.beans.property.ListProperty;
|
||||||
import javafx.beans.property.SimpleListProperty;
|
import javafx.beans.property.SimpleListProperty;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
import javafx.util.Pair;
|
import javafx.collections.ObservableList;
|
||||||
import org.apache.commons.lang3.NotImplementedException;
|
import org.apache.commons.lang3.NotImplementedException;
|
||||||
|
import java.util.function.Predicate;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class ShoppingListViewModel {
|
public class ShoppingListViewModel {
|
||||||
/**
|
/**
|
||||||
* The formal ingredient provides the ingredient and its amount,
|
* The formal ingredient provides the ingredient and its amount,
|
||||||
* and the string (optional) describes the recipe where it came from.
|
* and the string (optional) describes the recipe where it came from.
|
||||||
*/
|
*/
|
||||||
private final ListProperty<Pair<FormalIngredient, Optional<String>>> listItems = new SimpleListProperty<>(FXCollections.observableArrayList());
|
private final ListProperty<ShopListItem> listItems = new SimpleListProperty<>(FXCollections.observableArrayList());
|
||||||
public void addArbitrary() {
|
public void addArbitrary() {
|
||||||
throw new NotImplementedException();
|
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<ShopListItem> 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<ShopListItem> 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) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue