Jelajahi Sumber

Start building IOController and the Menu features associated with it.

Sam Jaffe 5 tahun lalu
induk
melakukan
303cba04fe

+ 54 - 0
src/main/lombok/org/leumasjaffe/recipe/controller/IOController.java

@@ -0,0 +1,54 @@
+package org.leumasjaffe.recipe.controller;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileReader;
+import java.io.FileWriter;
+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;
+
+@UtilityClass
+public class IOController {
+	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 {
+		ObjectMapper mapper = new ObjectMapper();
+		mapper.registerModule(new Jdk8Module());
+		mapper.writeValue(out, recipe);
+	}
+
+	public Recipe loadFromFile(final String filename) {
+		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();
+		}
+	}
+	
+	public void saveToFile(final String filename, final Recipe recipe) {
+		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);
+		}
+	}
+}

+ 42 - 17
src/main/lombok/org/leumasjaffe/recipe/view/RecipeFrame.java

@@ -1,39 +1,64 @@
 package org.leumasjaffe.recipe.view;
 
-import java.io.File;
-import java.io.IOException;
-
 import javax.swing.JFrame;
 import javax.swing.JTabbedPane;
 
+import org.leumasjaffe.recipe.controller.IOController;
 import org.leumasjaffe.recipe.model.Product;
 import org.leumasjaffe.recipe.model.Recipe;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import javax.swing.JMenuBar;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.KeyStroke;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.awt.Toolkit;
+import java.awt.event.InputEvent;
 
 @SuppressWarnings("serial")
 public class RecipeFrame extends JFrame {
+	
 	public RecipeFrame() {
+		final int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		
+		JMenuBar menuBar = new JMenuBar();
+		setJMenuBar(menuBar);
+		
+		JMenu mnFile = new JMenu("File");
+		menuBar.add(mnFile);
+		
+		JMenuItem mntmNew = new JMenuItem("New");
+		mntmNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, MASK));
+		mnFile.add(mntmNew);
+		
+		JMenuItem mntmOpen = new JMenuItem("Open");
+		mntmOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, MASK));
+		mnFile.add(mntmOpen);
+		
+		JMenuItem mntmSave = new JMenuItem("Save");
+		mntmSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, MASK));
+		mnFile.add(mntmSave);
+		
+		JMenuItem mntmSaveAs = new JMenuItem("Save As");
+		mntmSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, MASK | InputEvent.SHIFT_MASK));
+		mnFile.add(mntmSaveAs);
+		
+		JMenuItem mntmQuit = new JMenuItem("Quit");
+		mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, MASK));
+		mntmQuit.addActionListener( e -> { this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); } );
+		mnFile.add(mntmQuit);
+		
 		JTabbedPane tabbedPane = new JTabbedPane();
 		setContentPane(tabbedPane);
 
 		SummaryPanel summaryPanel = new SummaryPanel();
 		tabbedPane.addTab("Summary", summaryPanel);
 		
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.registerModule(new Jdk8Module());
-		try {
-			Recipe recipe = mapper.readValue(new File("src/test/resources/example.json"), Recipe.class);
-			for (Product comp : recipe.getProducts()) {
-				summaryPanel.addProduct(comp);
-				tabbedPane.addTab(comp.getName(), new ProductPanel(comp));
-			}
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		Recipe recipe = IOController.loadFromFile("src/test/resources/example.json");
+		for (Product comp : recipe.getProducts()) {
+			summaryPanel.addProduct(comp);
+			tabbedPane.addTab(comp.getName(), new ProductPanel(comp));
 		}
 
 		pack();