package org.leumasjaffe.recipe.model; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Stream; import org.leumasjaffe.observer.Observable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; @Data @EqualsAndHashCode(callSuper=false) public class Phase extends Observable.Instance implements CompoundRecipeComponent { int id = 0; // TODO Fix this int[] dependsOn = {}; // decltype(id)[] String vessel = ""; Optional preparation = Optional.empty(); List cooking = new ArrayList<>(); Optional rest = Optional.empty(); public Stream getIngredientsAsStream() { return cooking.stream().flatMap(RecipeComponent::getIngredientsAsStream); } // TODO Include Rest and Preparation public Stream getComponents() { return cooking.stream(); } public void setPreparation(final @NonNull Preparation p) { preparation = Optional.of(new Preparation(p.duration, this::getIngredients)); } }