RecipeCard.java 1004 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package org.leumasjaffe.recipe.model;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Optional;
  5. import java.util.stream.Stream;
  6. import javax.swing.ImageIcon;
  7. import org.leumasjaffe.observer.Observable;
  8. import lombok.Data;
  9. import lombok.EqualsAndHashCode;
  10. @Data @EqualsAndHashCode(callSuper=false)
  11. public class RecipeCard extends Observable.Instance implements CompoundRecipeComponent {
  12. String title;
  13. String description;
  14. int servings;
  15. // TODO: Nutrition information
  16. Optional<ImageIcon> photo = Optional.empty(); // TODO JSONIZATION
  17. List<Element> elements = new ArrayList<>();
  18. @Override
  19. public Stream<Element> getComponents() {
  20. return elements.stream();
  21. }
  22. @Override
  23. public Stream<Ingredient> getIngredientsAsStream() {
  24. return getComponents().flatMap(Element::getIngredientsAsStream);
  25. }
  26. public CollatedDuration getCollatedDuration() {
  27. return getComponents().map(Element::getCollatedDuration)
  28. .reduce(CollatedDuration.ZERO, CollatedDuration::plus);
  29. }
  30. }