package org.leumasjaffe.recipe.model; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Stream; import javax.swing.ImageIcon; import org.leumasjaffe.observer.Observable; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper=false) public class RecipeCard extends Observable.Instance implements CompoundRecipeComponent { String title; String description; int servings; // TODO: Nutrition information Optional photo = Optional.empty(); // TODO JSONIZATION List elements = new ArrayList<>(); @Override public Stream getComponents() { return elements.stream(); } @Override public Stream getIngredientsAsStream() { return getComponents().flatMap(Element::getIngredientsAsStream); } public CollatedDuration getCollatedDuration() { return getComponents().map(Element::getCollatedDuration) .reduce(CollatedDuration.ZERO, CollatedDuration::plus); } }