浏览代码

Change StepPanel to the construct -> setModel pattern which allows better mocking in tests.

Sam Jaffe 5 年之前
父节点
当前提交
5bfcd1aabf

+ 1 - 0
src/main/lombok/org/leumasjaffe/recipe/view/PhasePanel.java

@@ -24,6 +24,7 @@ public class PhasePanel extends JPanel {
 
 	@Getter(AccessLevel.PACKAGE) AutoGrowPanel<StepPanel, Step> panelSteps;
 	
+	// TODO Re-configure to support this(); setModel(phase); pattern.
 	public PhasePanel(final Phase phase) {		
 		setLayout(new VerticalLayout(5));
 		

+ 12 - 10
src/main/lombok/org/leumasjaffe/recipe/view/StepPanel.java

@@ -18,7 +18,6 @@ import java.awt.GridBagLayout;
 
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.util.List;
 
 import javax.swing.JLabel;
 import javax.swing.JTextPane;
@@ -29,7 +28,7 @@ import javax.swing.JFormattedTextField;
 import java.awt.Dimension;
 
 @SuppressWarnings("serial")
-@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+@FieldDefaults(level=AccessLevel.PRIVATE)
 public class StepPanel extends JPanel implements AutoGrowPanel.ChildComponent {
 	ForwardingObservableListener<Step> listener = new ForwardingObservableListener<>();
 	ObservableListener<JTextPane, Step> intructionListener;
@@ -39,7 +38,7 @@ public class StepPanel extends JPanel implements AutoGrowPanel.ChildComponent {
 	@Getter(AccessLevel.PACKAGE) JTextPane txtpnInstructions;
 	@Getter(AccessLevel.PACKAGE) AutoGrowPanel<IngredientPanel, Ingredient> panelIngredients;
 		
-	public StepPanel(final Step step) {
+	public StepPanel() {
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0};
@@ -82,7 +81,6 @@ public class StepPanel extends JPanel implements AutoGrowPanel.ChildComponent {
 		gbc_panelDuration.gridy = 0;
 		panelLeft.add(panelDuration, gbc_panelDuration);
 		
-		final List<Ingredient> ingredients = step.getIngredients();
 		panelIngredients = new AutoGrowPanel<>(Ingredient::new, IngredientPanel::new);
 		GridBagConstraints gbc_panelIngredients = new GridBagConstraints();
 		gbc_panelIngredients.gridwidth = 3;
@@ -105,21 +103,25 @@ public class StepPanel extends JPanel implements AutoGrowPanel.ChildComponent {
 		durationListener = ObservableController.from(panelDuration.txtTime,
 				Step::getDuration, Step::setDuration);
 		
+		setListPosition(0);
+	}
+	
+	public StepPanel(final Step step) {
+		this();
+		setModel(step);
+	}
+	
+	void setModel(final Step step) {
 		panelIngredients.setModel(step.getIngredients(), added -> {
 			listener.setObserved(step, step.getIngredients());
 			if (!added) {
 				ObserverDispatch.notifySubscribers(step);
 			}
 		});
-		listener.setObserved(step, ingredients);
+		listener.setObserved(step, step.getIngredients());
 		intructionListener.setObserved(step);
 		durationListener.setObserved(step);
 	}
-
-	public StepPanel(int zeroIndex, Step step) {
-		this(step);
-		setListPosition(zeroIndex);
-	}
 	
 	@Override
 	public void removeNotify() {

+ 1 - 1
src/test/java/org/leumasjaffe/recipe/view/StepPanelIT.java

@@ -36,7 +36,7 @@ class StepPanelIT extends SwingTestCase {
 		doReturn("These are test instructions").when(stuff).getInstruction();
 		doReturn(ingredients).when(stuff).getIngredients();
 				
-		panel = new StepPanel(0, stuff);
+		panel = new StepPanel(stuff);
 		listener.setObserved(stuff);
 		// setObserved invokes our callback.
 		clearInvocations(listener);

+ 1 - 1
src/test/java/org/leumasjaffe/recipe/view/StepPanelTest.java

@@ -38,7 +38,7 @@ class StepPanelTest extends SwingTestCase {
 		doReturn("These are test instructions").when(stuff).getInstruction();
 		doReturn(ingredients).when(stuff).getIngredients();
 		
-		panel = new StepPanel(0, stuff);
+		panel = new StepPanel(stuff);
 	}
 
 	@Test