Procházet zdrojové kódy

Add harness to forward observation events up the stack.

Sam Jaffe před 5 roky
rodič
revize
86ad68155d

+ 5 - 2
src/main/lombok/org/leumasjaffe/recipe/model/Card.java

@@ -5,10 +5,13 @@ import java.util.List;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import org.leumasjaffe.observer.Observable;
+
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
-@Data
-public class Card implements CompoundRecipeComponent {
+@Data @EqualsAndHashCode(callSuper=false)
+public class Card extends Observable.Instance implements CompoundRecipeComponent {
 	int id = 0; // TODO Fix this
 	int[] dependsOn = {}; // decltype(id)[]
 	String vessel = "";

+ 5 - 2
src/main/lombok/org/leumasjaffe/recipe/model/Step.java

@@ -3,10 +3,13 @@ package org.leumasjaffe.recipe.model;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.leumasjaffe.observer.Observable;
+
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
-@Data
-public class Step implements RecipeComponent {
+@Data @EqualsAndHashCode(callSuper=false)
+public class Step extends Observable.Instance implements RecipeComponent {
 	List<Ingredient> ingredients = new ArrayList<>();
 	Duration duration;
 	String instruction;

+ 8 - 1
src/main/lombok/org/leumasjaffe/recipe/view/CardPanel.java

@@ -2,6 +2,8 @@ package org.leumasjaffe.recipe.view;
 
 import javax.swing.JPanel;
 
+import org.leumasjaffe.observer.IndirectObservableListener;
+import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Card;
 import org.leumasjaffe.recipe.model.Preparation;
 import org.leumasjaffe.recipe.model.Rest;
@@ -11,13 +13,18 @@ import org.jdesktop.swingx.VerticalLayout;
 @SuppressWarnings("serial")
 public class CardPanel extends JPanel {
 	private int steps = 0;
-	
+	private final IndirectObservableListener<CardPanel, Card> listener;
+
 	public CardPanel(final Card card) {		
 		setLayout(new VerticalLayout(5));
 		
 		card.getPreparation().ifPresent(this::addPrep);
 		card.getCooking().forEach(this::addStep);
 		card.getRest().ifPresent(this::addRest);
+		listener = new IndirectObservableListener<>(this, (c, t) -> {
+			ObserverDispatch.notifySubscribers(t);
+		});
+		listener.setObserved(card, card.getCooking().toArray(new Step[0]));
 	}
 	
 	void addPrep(final Preparation step) {

+ 7 - 0
src/main/lombok/org/leumasjaffe/recipe/view/IngredientPanel.java

@@ -11,6 +11,8 @@ import java.util.Locale;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.NumberFormatter;
 
+import org.leumasjaffe.event.AnyActionDocumentListener;
+import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Ingredient;
 
 import javax.swing.JFormattedTextField;
@@ -83,6 +85,11 @@ public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentLis
 		gbc_txtPreparation.gridy = 0;
 		add(txtPreparation, gbc_txtPreparation);
 		txtPreparation.setColumns(10);
+		
+		addDocumentListener((AnyActionDocumentListener) (e) -> {
+			ingredient.setName(txtName.getText());
+			ObserverDispatch.notifySubscribers(ingredient);
+		});
 	}
 
 	@Override

+ 1 - 13
src/main/lombok/org/leumasjaffe/recipe/view/PreparationPanel.java

@@ -1,7 +1,6 @@
 package org.leumasjaffe.recipe.view;
 
 import javax.swing.JPanel;
-import javax.swing.event.DocumentListener;
 
 import org.leumasjaffe.recipe.model.Preparation;
 
@@ -11,14 +10,12 @@ import java.awt.GridBagConstraints;
 import java.awt.Insets;
 
 import javax.swing.JLabel;
-import javax.swing.JTextPane;
 import java.awt.Component;
 import javax.swing.Box;
 
 @SuppressWarnings("serial")
-public class PreparationPanel extends JPanel implements AutoGrowPanel.DocumentListenable {
+public class PreparationPanel extends JPanel {
 	private JLabel lblIndex;
-	private JTextPane txtpnInstructions;
 		
 	public PreparationPanel(Preparation step) {
 		GridBagLayout gridBagLayout = new GridBagLayout();
@@ -74,13 +71,4 @@ public class PreparationPanel extends JPanel implements AutoGrowPanel.DocumentLi
 		panelLeft.add(panelIngredients, gbc_panelIngredients);
 	}
 
-	@Override
-	public void addDocumentListener(DocumentListener dl) {
-		this.txtpnInstructions.getDocument().addDocumentListener(dl);
-	}
-
-	@Override
-	public void removeDocumentListener(DocumentListener dl) {
-		this.txtpnInstructions.getDocument().removeDocumentListener(dl);		
-	}
 }

+ 10 - 1
src/main/lombok/org/leumasjaffe/recipe/view/ProductPanel.java

@@ -3,6 +3,8 @@ package org.leumasjaffe.recipe.view;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 
+import org.leumasjaffe.observer.IndirectObservableListener;
+import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Card;
 import org.leumasjaffe.recipe.model.Product;
 import org.jdesktop.swingx.VerticalLayout;
@@ -13,6 +15,8 @@ import javax.swing.JSeparator;
 @SuppressWarnings("serial")
 public class ProductPanel extends JScrollPane {
 	private JPanel panelViewPort;
+	private final IndirectObservableListener<ProductPanel, Product> listener;
+
 	public ProductPanel(Product product) {
 		JPanel panelColumnHeader = new JPanel();
 		setColumnHeaderView(panelColumnHeader);
@@ -23,10 +27,15 @@ public class ProductPanel extends JScrollPane {
 		panelViewPort = new JPanel();
 		setViewportView(panelViewPort);
 		panelViewPort.setLayout(new VerticalLayout(5));
-		
+				
 		for (final Card card : product.getCards()) {
 			panelViewPort.add(new CardPanel(card));
 			panelViewPort.add(new JSeparator());
 		}
+		
+		listener = new IndirectObservableListener<>(this, (c, t) -> {
+			ObserverDispatch.notifySubscribers(t);
+		});
+		listener.setObserved(product, product.getCards().toArray(new Card[0]));
 	}
 }

+ 8 - 0
src/main/lombok/org/leumasjaffe/recipe/view/StepPanel.java

@@ -3,6 +3,9 @@ package org.leumasjaffe.recipe.view;
 import javax.swing.JPanel;
 import javax.swing.event.DocumentListener;
 
+import org.leumasjaffe.observer.IndirectObservableListener;
+import org.leumasjaffe.observer.ObserverDispatch;
+import org.leumasjaffe.recipe.model.Ingredient;
 import org.leumasjaffe.recipe.model.Step;
 
 import java.awt.GridBagLayout;
@@ -20,6 +23,7 @@ import java.awt.Dimension;
 public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenable {
 	private JLabel lblIndex;
 	private JTextPane txtpnInstructions;
+	private final IndirectObservableListener<StepPanel, Step> listener;
 		
 	public StepPanel(int zeroIndex, Step step) {
 		GridBagLayout gridBagLayout = new GridBagLayout();
@@ -84,6 +88,10 @@ public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenabl
 		add(txtpnInstructions, gbc_txtpnInstructions);
 		
 		setListPosition(zeroIndex);
+		listener = new IndirectObservableListener<>(this, (c, t) -> {
+			ObserverDispatch.notifySubscribers(t);
+		});
+		listener.setObserved(step, step.getIngredients().toArray(new Ingredient[0]));
 	}
 
 	@Override