| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package org.leumasjaffe.recipe.view;
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.JPanel;
- import org.leumasjaffe.observer.ForwardingObservableListener;
- import org.leumasjaffe.observer.Observable;
- import org.leumasjaffe.observer.ObserverDispatch;
- import org.leumasjaffe.recipe.model.Phase;
- import org.leumasjaffe.recipe.model.Step;
- import lombok.AccessLevel;
- import lombok.Getter;
- import lombok.experimental.FieldDefaults;
- import org.jdesktop.swingx.VerticalLayout;
- @SuppressWarnings("serial")
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public class PhasePanel extends JPanel {
- ForwardingObservableListener<Phase> listener = new ForwardingObservableListener<>();
- @Getter(AccessLevel.PACKAGE) AutoGrowPanel panelSteps;
-
- public PhasePanel(final Phase phase) {
- setLayout(new VerticalLayout(5));
-
- if (phase.getPreparation().isPresent()) {
- add(new PreparationPanel(phase));
- }
-
- final List<Step> steps = phase.getCooking();
- panelSteps = new AutoGrowPanel(StepPanel::new, Step::new,
- step -> {
- steps.add(step);
- listener.setObserved(phase, allChildren(phase));
- ObserverDispatch.notifySubscribers(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));
- }
-
- private static List<Observable> allChildren(Phase phase) {
- List<Observable> children = new ArrayList<>(phase.getCooking());
- phase.getPreparation().ifPresent(children::add);
- phase.getRest().ifPresent(children::add);
- return children;
- }
-
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(listener);
- }
- }
|