Browse Source

Use a ReplaceChildrenController for summary.ElementPanel

Sam Jaffe 5 years ago
parent
commit
6bd3ab6958

+ 7 - 4
src/main/lombok/org/leumasjaffe/recipe/view/summary/ElementPanel.java

@@ -5,7 +5,9 @@ import javax.swing.JPanel;
 import org.jdesktop.swingx.VerticalLayout;
 import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
+import org.leumasjaffe.recipe.controller.ReplaceChildrenController;
 import org.leumasjaffe.recipe.model.Element;
+import org.leumasjaffe.recipe.model.Ingredient;
 
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -20,6 +22,7 @@ import java.awt.GridBagConstraints;
 @SuppressWarnings("serial")
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 public class ElementPanel extends JPanel {
+	ReplaceChildrenController<Element, Ingredient> controller;
 	ObservableListener<JLabel, Element> nameListener;
 	ObservableListener<JPanel, Element> childListener;
 	
@@ -27,6 +30,8 @@ public class ElementPanel extends JPanel {
 	@Getter(AccessLevel.PACKAGE) JPanel panelIngredients;
 	
 	public ElementPanel(final Element element) {
+		controller = new ReplaceChildrenController<>(
+				Element::getIngredients, IngredientPanel::new);
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0, 0};
@@ -52,10 +57,8 @@ public class ElementPanel extends JPanel {
 		add(panelIngredients, gbc_panel);
 		
 		nameListener = new ObservableListener<>(lblProductName, (c, t) -> c.setText(t.getName()));
-		childListener = new ObservableListener<>(panelIngredients, (c, t) -> {
-			c.removeAll();
-			element.getIngredients().stream().map(IngredientPanel::new).forEach(c::add);
-		});
+		childListener = new ObservableListener<>(panelIngredients, (c, t) -> 
+			controller.accept(c, t));
 		
 		nameListener.setObserved(element);
 		childListener.setObserved(element);