소스 검색

Make IOController a bit more functional.

Sam Jaffe 5 년 전
부모
커밋
7ac53720bd
3개의 변경된 파일53개의 추가작업 그리고 24개의 파일을 삭제
  1. 5 0
      pom.xml
  2. 16 17
      src/main/lombok/org/leumasjaffe/recipe/controller/IOController.java
  3. 32 7
      src/main/lombok/org/leumasjaffe/recipe/view/RecipeFrame.java

+ 5 - 0
pom.xml

@@ -98,5 +98,10 @@
       <version>1.3</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.leumasjaffe</groupId>
+      <artifactId>container</artifactId>
+      <version>0.3.0</version>
+    </dependency>
   </dependencies>
 </project>

+ 16 - 17
src/main/lombok/org/leumasjaffe/recipe/controller/IOController.java

@@ -8,47 +8,46 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.Writer;
 
-import javax.swing.JOptionPane;
-
 import org.leumasjaffe.recipe.model.Recipe;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 
-import lombok.experimental.UtilityClass;
+import lombok.AccessLevel;
+import lombok.NonNull;
+import lombok.experimental.FieldDefaults;
 
-@UtilityClass
+@FieldDefaults(level=AccessLevel.PRIVATE)
 public class IOController {
+	@NonNull Recipe recipe = new Recipe();
+	
 	Recipe load(final Reader in) throws IOException {
 		ObjectMapper mapper = new ObjectMapper();
 		mapper.registerModule(new Jdk8Module());
 		return mapper.readValue(in, Recipe.class);
 	}
 	
-	void save(final Writer out, final Recipe recipe) throws IOException {
+	void save(final Writer out) throws IOException {
 		ObjectMapper mapper = new ObjectMapper();
 		mapper.registerModule(new Jdk8Module());
-		mapper.writeValue(out, recipe);
+		mapper.writeValue(out, this.recipe);
+	}
+	
+	public Recipe create() {
+		return this.recipe = new Recipe();
 	}
 
-	public Recipe loadFromFile(final String filename) {
+	public Recipe load(final @NonNull String filename) throws IOException {
 		try (FileReader file = new FileReader(filename);
 				BufferedReader buf = new BufferedReader(file)) {
-			return load(buf);
-		} catch (IOException ioe) {
-			JOptionPane.showMessageDialog(null, ioe.getLocalizedMessage(), "Error in Load",
-					JOptionPane.ERROR_MESSAGE);
-			return new Recipe();
+			return this.recipe = load(buf);
 		}
 	}
 	
-	public void saveToFile(final String filename, final Recipe recipe) {
+	public void save(final @NonNull String filename) throws IOException {
 		try (FileWriter file = new FileWriter(filename);
 				BufferedWriter buf = new BufferedWriter(file)) {
-			save(buf, recipe);
-		} catch (IOException ioe) {
-			JOptionPane.showMessageDialog(null, ioe.getLocalizedMessage(), "Error in Save",
-					JOptionPane.ERROR_MESSAGE);
+			save(buf);
 		}
 	}
 }

+ 32 - 7
src/main/lombok/org/leumasjaffe/recipe/view/RecipeFrame.java

@@ -3,12 +3,18 @@ package org.leumasjaffe.recipe.view;
 import javax.swing.JFrame;
 import javax.swing.JTabbedPane;
 
+import org.leumasjaffe.container.functional.Result;
 import org.leumasjaffe.recipe.controller.IOController;
 import org.leumasjaffe.recipe.model.Product;
 import org.leumasjaffe.recipe.model.Recipe;
+
+import lombok.AccessLevel;
+import lombok.experimental.FieldDefaults;
+
 import javax.swing.JMenuBar;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
 import javax.swing.KeyStroke;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowEvent;
@@ -16,9 +22,14 @@ import java.awt.Toolkit;
 import java.awt.event.InputEvent;
 
 @SuppressWarnings("serial")
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 public class RecipeFrame extends JFrame {
+	IOController io = new IOController();
+	SummaryPanel summaryPanel;
+	JTabbedPane tabbedPane;
 	
 	public RecipeFrame() {
+		
 		final int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		
@@ -49,20 +60,34 @@ public class RecipeFrame extends JFrame {
 		mntmQuit.addActionListener( e -> { this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); } );
 		mnFile.add(mntmQuit);
 		
-		JTabbedPane tabbedPane = new JTabbedPane();
+		tabbedPane = new JTabbedPane();
 		setContentPane(tabbedPane);
 
-		SummaryPanel summaryPanel = new SummaryPanel();
+		summaryPanel = new SummaryPanel();
 		tabbedPane.addTab("Summary", summaryPanel);
 		
-		Recipe recipe = IOController.loadFromFile("src/test/resources/example.json");
-		for (Product comp : recipe.getProducts()) {
-			summaryPanel.addProduct(comp);
-			tabbedPane.addTab(comp.getName(), new ProductPanel(comp));
-		}
+		// TODO Switch these around...
+//		setModel(new Recipe());
+		open("src/test/resources/example.json");
 
 		pack();
 		repaint();
 		setVisible(true);
 	}
+	
+	private void open(final String filename) {
+		Result.maybe(io::load).apply(filename).consume(this::setModel, this::errorPopup);
+	}
+	
+	private void setModel(final Recipe recipe) {
+		// TODO Clear underlying panels
+		for (Product comp : recipe.getProducts()) {
+			summaryPanel.addProduct(comp);
+			tabbedPane.addTab(comp.getName(), new ProductPanel(comp));
+		}
+	}
+	
+	private void errorPopup(final Exception ex) {
+		JOptionPane.showMessageDialog(this, ex.getLocalizedMessage(), "File Error", JOptionPane.ERROR_MESSAGE);
+	}
 }