|
@@ -10,44 +10,50 @@ import org.leumasjaffe.observer.Observable;
|
|
|
import org.leumasjaffe.observer.ObserverDispatch;
|
|
import org.leumasjaffe.observer.ObserverDispatch;
|
|
|
import org.leumasjaffe.recipe.model.Phase;
|
|
import org.leumasjaffe.recipe.model.Phase;
|
|
|
import org.leumasjaffe.recipe.model.Preparation;
|
|
import org.leumasjaffe.recipe.model.Preparation;
|
|
|
-import org.leumasjaffe.recipe.model.Rest;
|
|
|
|
|
import org.leumasjaffe.recipe.model.Step;
|
|
import org.leumasjaffe.recipe.model.Step;
|
|
|
|
|
|
|
|
import lombok.AccessLevel;
|
|
import lombok.AccessLevel;
|
|
|
import lombok.experimental.FieldDefaults;
|
|
import lombok.experimental.FieldDefaults;
|
|
|
-import lombok.experimental.NonFinal;
|
|
|
|
|
|
|
|
|
|
import org.jdesktop.swingx.VerticalLayout;
|
|
import org.jdesktop.swingx.VerticalLayout;
|
|
|
|
|
|
|
|
@SuppressWarnings("serial")
|
|
@SuppressWarnings("serial")
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
public class PhasePanel extends JPanel {
|
|
public class PhasePanel extends JPanel {
|
|
|
- @NonFinal int steps = 0;
|
|
|
|
|
ForwardingObservableListener<Phase> listener = new ForwardingObservableListener<>();
|
|
ForwardingObservableListener<Phase> listener = new ForwardingObservableListener<>();
|
|
|
|
|
+ ForwardingObservableListener<Preparation> linkBack = new ForwardingObservableListener<>();
|
|
|
|
|
|
|
|
|
|
+ AutoGrowPanel panelSteps;
|
|
|
|
|
+
|
|
|
public PhasePanel(final Phase phase) {
|
|
public PhasePanel(final Phase phase) {
|
|
|
setLayout(new VerticalLayout(5));
|
|
setLayout(new VerticalLayout(5));
|
|
|
|
|
|
|
|
- phase.getPreparation().ifPresent(this::addPrep);
|
|
|
|
|
- phase.getCooking().forEach(this::addStep);
|
|
|
|
|
- phase.getRest().ifPresent(this::addRest);
|
|
|
|
|
|
|
+ phase.getPreparation().ifPresent(prep -> add(new PreparationPanel(prep)));
|
|
|
|
|
+
|
|
|
|
|
+ final List<Step> steps = phase.getCooking();
|
|
|
|
|
+ panelSteps = new AutoGrowPanel(StepPanel::new, Step::new,
|
|
|
|
|
+ step -> {
|
|
|
|
|
+ steps.add(step);
|
|
|
|
|
+ listener.setObserved(phase, allChildren(phase));
|
|
|
|
|
+ },
|
|
|
|
|
+ i -> {
|
|
|
|
|
+ steps.remove(i);
|
|
|
|
|
+ listener.setObserved(phase, allChildren(phase));
|
|
|
|
|
+ ObserverDispatch.notifySubscribers(phase);
|
|
|
|
|
+ }, 5, steps.toArray(new Step[0]));
|
|
|
|
|
+ add(panelSteps);
|
|
|
|
|
+
|
|
|
|
|
+ phase.getRest().ifPresent(rest -> add(new RestPanel(rest)));
|
|
|
|
|
|
|
|
|
|
+ listener.setObserved(phase, allChildren(phase));
|
|
|
|
|
+ phase.getPreparation().ifPresent(prep -> linkBack.setObserved(prep, phase));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static List<Observable> allChildren(Phase phase) {
|
|
|
List<Observable> children = new ArrayList<>(phase.getCooking());
|
|
List<Observable> children = new ArrayList<>(phase.getCooking());
|
|
|
phase.getPreparation().ifPresent(children::add);
|
|
phase.getPreparation().ifPresent(children::add);
|
|
|
phase.getRest().ifPresent(children::add);
|
|
phase.getRest().ifPresent(children::add);
|
|
|
- listener.setObserved(phase, children);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- void addPrep(final Preparation step) {
|
|
|
|
|
- add(new PreparationPanel(step));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- void addStep(final Step step) {
|
|
|
|
|
- add(new StepPanel(steps++, step));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- void addRest(final Rest rest) {
|
|
|
|
|
- add(new RestPanel(rest));
|
|
|
|
|
|
|
+ return children;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|