Selaa lähdekoodia

Switch all ingredient panels to use AmountFormatter instead of two separate fields.

Sam Jaffe 5 vuotta sitten
vanhempi
commit
5664f5e2f4

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

@@ -5,15 +5,13 @@ import java.awt.GridBagLayout;
 import javax.swing.JTextField;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.text.NumberFormat;
-import java.util.Locale;
 
 import javax.swing.event.DocumentListener;
-import javax.swing.text.NumberFormatter;
 
 import org.leumasjaffe.observer.ObservableController;
 import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Ingredient;
+import org.leumasjaffe.recipe.view.formatter.AmountFormatter;
 
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -30,14 +28,13 @@ public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentLis
 	ObservableController<JTextField, Ingredient> preparationController;
 	@Getter(AccessLevel.PACKAGE) JTextField txtName;
 	@Getter(AccessLevel.PACKAGE) JFormattedTextField txtAmount;
-	@Getter(AccessLevel.PACKAGE) JTextField txtUnit;
 	@Getter(AccessLevel.PACKAGE) JTextField txtPreparation;
 		
 	public IngredientPanel(final Ingredient ingredient) {
 		GridBagLayout gridBagLayout = new GridBagLayout();
-		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0};
+		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0};
-		gridBagLayout.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
+		gridBagLayout.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE};
 		gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
 		setLayout(gridBagLayout);
 		
@@ -59,11 +56,8 @@ public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentLis
 		add(txtName, gbc_txtName);
 		txtName.setColumns(10);
 		
-		NumberFormatter fmtDone = new NumberFormatter(NumberFormat.getNumberInstance(Locale.getDefault()));
-		fmtDone.setMinimum(0.0);
-		fmtDone.setCommitsOnValidEdit(true);
-		txtAmount = new JFormattedTextField(fmtDone);
-		txtAmount.setValue(ingredient.getAmount().getValue());
+		txtAmount = new JFormattedTextField(new AmountFormatter());
+		txtAmount.setValue(ingredient.getAmount());
 		txtAmount.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
 		GridBagConstraints gbc_txtAmount = new GridBagConstraints();
 		gbc_txtAmount.fill = GridBagConstraints.HORIZONTAL;
@@ -71,25 +65,14 @@ public class IngredientPanel extends JPanel implements AutoGrowPanel.DocumentLis
 		gbc_txtAmount.gridx = 2;
 		gbc_txtAmount.gridy = 0;
 		add(txtAmount, gbc_txtAmount);
-		txtAmount.setColumns(4);
-		
-		txtUnit = new JTextField(ingredient.getAmount().unitName());
-		txtUnit.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
-		GridBagConstraints gbc_txtUnit = new GridBagConstraints();
-		gbc_txtUnit.insets = new Insets(0, 0, 0, 5);
-		gbc_txtUnit.anchor = GridBagConstraints.ABOVE_BASELINE;
-		gbc_txtUnit.fill = GridBagConstraints.HORIZONTAL;
-		gbc_txtUnit.gridx = 3;
-		gbc_txtUnit.gridy = 0;
-		add(txtUnit, gbc_txtUnit);
-		txtUnit.setColumns(6);
+		txtAmount.setColumns(11);
 		
 		txtPreparation = new JTextField(ingredient.getPreparation());
 		txtPreparation.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
 		GridBagConstraints gbc_txtPreparation = new GridBagConstraints();
 		gbc_txtPreparation.anchor = GridBagConstraints.ABOVE_BASELINE;
 		gbc_txtPreparation.fill = GridBagConstraints.HORIZONTAL;
-		gbc_txtPreparation.gridx = 4;
+		gbc_txtPreparation.gridx = 3;
 		gbc_txtPreparation.gridy = 0;
 		add(txtPreparation, gbc_txtPreparation);
 		txtPreparation.setColumns(10);

+ 21 - 34
src/main/lombok/org/leumasjaffe/recipe/view/IngredientPreparationPanel.java

@@ -5,14 +5,11 @@ import java.awt.GridBagLayout;
 import javax.swing.JTextField;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.text.NumberFormat;
-import java.util.Locale;
-
-import javax.swing.text.NumberFormatter;
 
 import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Ingredient;
+import org.leumasjaffe.recipe.view.formatter.AmountFormatter;
 
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -29,14 +26,13 @@ public class IngredientPreparationPanel extends JPanel {
 	ObservableListener<IngredientPreparationPanel, Ingredient> listener;
 	@Getter(AccessLevel.PACKAGE) JTextField txtName;
 	@Getter(AccessLevel.PACKAGE) JFormattedTextField txtAmount;
-	@Getter(AccessLevel.PACKAGE) JTextField txtUnit;
 	@Getter(AccessLevel.PACKAGE) JTextField txtPreparation;
 	
-	public IngredientPreparationPanel(final Ingredient ingredient) {
+	public IngredientPreparationPanel() {
 		GridBagLayout gridBagLayout = new GridBagLayout();
-		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0};
+		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0};
-		gridBagLayout.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
+		gridBagLayout.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE};
 		gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
 		setLayout(gridBagLayout);
 		
@@ -48,7 +44,7 @@ public class IngredientPreparationPanel extends JPanel {
 		gbc_label.gridy = 0;
 		add(label, gbc_label);
 		
-		txtName = new JTextField(ingredient.getName());
+		txtName = new JTextField();
 		txtName.setEditable(false);
 		txtName.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
 		GridBagConstraints gbc_txtName = new GridBagConstraints();
@@ -59,12 +55,8 @@ public class IngredientPreparationPanel extends JPanel {
 		add(txtName, gbc_txtName);
 		txtName.setColumns(10);
 		
-		NumberFormatter fmtDone = new NumberFormatter(NumberFormat.getNumberInstance(Locale.getDefault()));
-		fmtDone.setMinimum(0.0);
-		fmtDone.setCommitsOnValidEdit(true);
-		txtAmount = new JFormattedTextField(fmtDone);
+		txtAmount = new JFormattedTextField(new AmountFormatter());
 		txtAmount.setEditable(false);
-		txtAmount.setValue(ingredient.getAmount().getValue());
 		txtAmount.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
 		GridBagConstraints gbc_txtAmount = new GridBagConstraints();
 		gbc_txtAmount.fill = GridBagConstraints.HORIZONTAL;
@@ -72,37 +64,32 @@ public class IngredientPreparationPanel extends JPanel {
 		gbc_txtAmount.gridx = 2;
 		gbc_txtAmount.gridy = 0;
 		add(txtAmount, gbc_txtAmount);
-		txtAmount.setColumns(4);
+		txtAmount.setColumns(11);
 		
-		txtUnit = new JTextField(ingredient.getAmount().unitName());
-		txtUnit.setEditable(false);
-		txtUnit.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
-		GridBagConstraints gbc_txtUnit = new GridBagConstraints();
-		gbc_txtUnit.insets = new Insets(0, 0, 0, 5);
-		gbc_txtUnit.anchor = GridBagConstraints.ABOVE_BASELINE;
-		gbc_txtUnit.fill = GridBagConstraints.HORIZONTAL;
-		gbc_txtUnit.gridx = 3;
-		gbc_txtUnit.gridy = 0;
-		add(txtUnit, gbc_txtUnit);
-		txtUnit.setColumns(6);
-		
-		txtPreparation = new JTextField(ingredient.getPreparation());
+		txtPreparation = new JTextField();
 		txtPreparation.setEditable(false);
 		txtPreparation.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
 		GridBagConstraints gbc_txtPreparation = new GridBagConstraints();
 		gbc_txtPreparation.anchor = GridBagConstraints.ABOVE_BASELINE;
 		gbc_txtPreparation.fill = GridBagConstraints.HORIZONTAL;
-		gbc_txtPreparation.gridx = 4;
+		gbc_txtPreparation.gridx = 3;
 		gbc_txtPreparation.gridy = 0;
 		add(txtPreparation, gbc_txtPreparation);
 		txtPreparation.setColumns(10);
 		
-		listener = new ObservableListener<>(this, (c, t) -> {
-			txtName.setText(t.getName());
-			txtAmount.setValue(t.getAmount().getValue());
-			txtUnit.setText(t.getAmount().unitName());
-			txtPreparation.setText(t.getPreparation());
+		listener = new ObservableListener<>(this, (c, v) -> {
+			c.txtName.setText(v.getName());
+			c.txtAmount.setValue(v.getAmount());
+			c.txtPreparation.setText(v.getPreparation());
 		});
+	}
+	
+	public IngredientPreparationPanel(final Ingredient ingredient) {
+		this();
+		setModel(ingredient);
+	}
+	
+	public void setModel(final Ingredient ingredient) {
 		listener.setObserved(ingredient);
 	}
 	

+ 6 - 26
src/main/lombok/org/leumasjaffe/recipe/view/summary/IngredientPanel.java

@@ -5,12 +5,9 @@ import java.awt.GridBagLayout;
 import javax.swing.JTextField;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.text.NumberFormat;
-import java.util.Locale;
-
-import javax.swing.text.NumberFormatter;
 
 import org.leumasjaffe.recipe.model.Ingredient;
+import org.leumasjaffe.recipe.view.formatter.AmountFormatter;
 
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -25,13 +22,12 @@ import javax.swing.JLabel;
 public class IngredientPanel extends JPanel {
 	@Getter(AccessLevel.PACKAGE) JTextField txtName;
 	@Getter(AccessLevel.PACKAGE) JFormattedTextField txtAmount;
-	@Getter(AccessLevel.PACKAGE) JTextField txtUnit;
 	
 	public IngredientPanel() {
 		GridBagLayout gridBagLayout = new GridBagLayout();
-		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
+		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0};
-		gridBagLayout.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, Double.MIN_VALUE};
+		gridBagLayout.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
 		gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
 		setLayout(gridBagLayout);
 		
@@ -54,30 +50,15 @@ public class IngredientPanel extends JPanel {
 		add(txtName, gbc_txtName);
 		txtName.setColumns(10);
 		
-		NumberFormatter fmtDone = new NumberFormatter(NumberFormat.getNumberInstance(Locale.getDefault()));
-		fmtDone.setMinimum(0.0);
-		fmtDone.setCommitsOnValidEdit(true);
-		txtAmount = new JFormattedTextField(fmtDone);
+		txtAmount = new JFormattedTextField(new AmountFormatter());
 		txtAmount.setEditable(false);
 		txtAmount.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
 		GridBagConstraints gbc_txtAmount = new GridBagConstraints();
 		gbc_txtAmount.fill = GridBagConstraints.HORIZONTAL;
-		gbc_txtAmount.insets = new Insets(0, 0, 0, 5);
 		gbc_txtAmount.gridx = 2;
 		gbc_txtAmount.gridy = 0;
 		add(txtAmount, gbc_txtAmount);
-		txtAmount.setColumns(4);
-		
-		txtUnit = new JTextField();
-		txtUnit.setEditable(false);
-		txtUnit.setFont(new Font("Source Code Pro", Font.PLAIN, 10));
-		GridBagConstraints gbc_txtUnit = new GridBagConstraints();
-		gbc_txtUnit.anchor = GridBagConstraints.ABOVE_BASELINE;
-		gbc_txtUnit.fill = GridBagConstraints.HORIZONTAL;
-		gbc_txtUnit.gridx = 3;
-		gbc_txtUnit.gridy = 0;
-		add(txtUnit, gbc_txtUnit);
-		txtUnit.setColumns(6);
+		txtAmount.setColumns(11);
 	}
 
 	public IngredientPanel(final Ingredient ingredient) {
@@ -87,7 +68,6 @@ public class IngredientPanel extends JPanel {
 	
 	public void setModel(final Ingredient ingredient) {
 		txtName.setText(ingredient.getName());
-		txtAmount.setValue(ingredient.getAmount().getValue());
-		txtUnit.setText(ingredient.getAmount().unitName());
+		txtAmount.setValue(ingredient.getAmount());
 	}
 }

+ 5 - 22
src/test/java/org/leumasjaffe/recipe/view/IngredientPanelTest.java

@@ -35,8 +35,7 @@ class IngredientPanelTest extends SwingTestCase {
 	void testFilledOutWithContent() {
 		assertEquals("Onions", panel.getTxtName().getText());
 		assertEquals("Sliced", panel.getTxtPreparation().getText());
-		assertEquals("100", panel.getTxtAmount().getText());
-		assertEquals("g", panel.getTxtUnit().getText());
+		assertEquals(new Amount("100 g"), panel.getTxtAmount().getValue());
 	}
 	
 	@Test
@@ -44,7 +43,6 @@ class IngredientPanelTest extends SwingTestCase {
 		assertTrue(panel.getTxtName().isEditable());
 		assertTrue(panel.getTxtPreparation().isEditable());
 		assertTrue(panel.getTxtAmount().isEditable());
-		assertTrue(panel.getTxtUnit().isEditable());
 	}
 
 	@Test
@@ -57,8 +55,7 @@ class IngredientPanelTest extends SwingTestCase {
 		ObserverDispatch.notifySubscribers(stuff);
 		
 		assertEquals("Bacon", panel.getTxtName().getText());
-		assertEquals(100.0, panel.getTxtAmount().getValue());
-		assertEquals("g", panel.getTxtUnit().getText());
+		assertEquals(new Amount("100 g"), panel.getTxtAmount().getValue());
 		assertEquals("Cut into Lardons", panel.getTxtPreparation().getText());
 	}
 
@@ -78,16 +75,9 @@ class IngredientPanelTest extends SwingTestCase {
 	
 	@Test
 	void testViewUpdateToAmountDoesNotAltersModel() {
-		panel.getTxtAmount().setValue(0.25);
+		panel.getTxtAmount().setValue(new Amount("1 lb"));
 		waitForSwing();
-		assertEquals(100.0, stuff.getAmount().getValue());
-	}
-	
-	@Test
-	void testViewUpdateToUnitDoesNotAltersModel() {
-		panel.getTxtUnit().setText("lb");
-		waitForSwing();
-		assertEquals("g", stuff.getAmount().unitName());
+		assertEquals(new Amount("100 g"), stuff.getAmount());
 	}
 
 	@Test
@@ -106,16 +96,9 @@ class IngredientPanelTest extends SwingTestCase {
 
 	@Test
 	void testUpdateToAmountSendsNotify() {
-		panel.getTxtAmount().setValue(0.25);
+		panel.getTxtAmount().setValue(new Amount("1 lb"));
 		waitForSwing();
 		verify(listener, never()).updateWasSignalled();
 	}
 	
-	@Test
-	void testUpdateToUnitSendsNotify() {
-		panel.getTxtUnit().setText("lb");
-		waitForSwing();
-		verify(listener, never()).updateWasSignalled();
-	}
-
 }

+ 8 - 4
src/test/java/org/leumasjaffe/recipe/view/IngredientPreparationPanelTest.java

@@ -23,8 +23,7 @@ class IngredientPreparationPanelTest extends SwingTestCase {
 	void testFilledOutWithContent() {
 		assertEquals("Onions", panel.getTxtName().getText());
 		assertEquals("Sliced", panel.getTxtPreparation().getText());
-		assertEquals("100", panel.getTxtAmount().getText());
-		assertEquals("g", panel.getTxtUnit().getText());
+		assertEquals(new Amount("100 g"), panel.getTxtAmount().getValue());
 	}
 	
 	@Test
@@ -32,16 +31,21 @@ class IngredientPreparationPanelTest extends SwingTestCase {
 		assertFalse(panel.getTxtName().isEditable());
 		assertFalse(panel.getTxtPreparation().isEditable());
 		assertFalse(panel.getTxtAmount().isEditable());
-		assertFalse(panel.getTxtUnit().isEditable());
 	}
 
 	@Test
 	void testIsSubscribedToUpdates() {
 		stuff.setName("Bacon");
+		stuff.setPreparation("Cut into Lardons");
+		stuff.setAmount(new Amount("50 g"));
+		
 		assertEquals("Onions", panel.getTxtName().getText());
+		
 		ObserverDispatch.notifySubscribers(stuff);
+		
 		assertEquals("Bacon", panel.getTxtName().getText());
-		// TODO: I need to add hook-ups for the rest of the fields, too
+		assertEquals("Cut into Lardons", panel.getTxtPreparation().getText());
+		assertEquals(new Amount("50 g"), panel.getTxtAmount().getValue());
 	}
 
 }

+ 1 - 3
src/test/java/org/leumasjaffe/recipe/view/summary/IngredientPanelTest.java

@@ -23,15 +23,13 @@ class IngredientPanelTest extends SwingTestCase {
 	@Test
 	void testFilledOutWithContent() {
 		assertEquals("Onions", panel.getTxtName().getText());
-		assertEquals("100", panel.getTxtAmount().getText());
-		assertEquals("g", panel.getTxtUnit().getText());
+		assertEquals(new Amount("100 g"), panel.getTxtAmount().getValue());
 	}
 	
 	@Test
 	void testCannotEditContent() {
 		assertFalse(panel.getTxtName().isEditable());
 		assertFalse(panel.getTxtAmount().isEditable());
-		assertFalse(panel.getTxtUnit().isEditable());
 	}
 
 	@Test