From a08655a60f0e487979290a33770dc8207257c106 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Mon, 3 Nov 2014 16:08:38 +0100 Subject: [PATCH] Add load/store to configurations. refs #31 --- src/eva2/gui/JTextoutputFrame.java | 2 +- src/eva2/gui/OptimizationEditorPanel.java | 9 +++++++-- src/eva2/optimization/tools/FileTools.java | 14 ++++++++------ src/eva2/yaml/BeanSerializer.java | 3 ++- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/eva2/gui/JTextoutputFrame.java b/src/eva2/gui/JTextoutputFrame.java index 30509907..3f097135 100644 --- a/src/eva2/gui/JTextoutputFrame.java +++ b/src/eva2/gui/JTextoutputFrame.java @@ -126,7 +126,7 @@ public class JTextoutputFrame implements JTextoutputFrameInterface, ActionListen if (src == clearItem) { textArea.setText(null); } else if (src == saveItem) { - FileTools.saveObjectWithFileChooser(frame, textArea.getText()); + FileTools.saveObjectWithFileChooser(frame, textArea.getText(), null); } else { System.err.println("Unknown popup component (JTextoutputFrame)!"); } diff --git a/src/eva2/gui/OptimizationEditorPanel.java b/src/eva2/gui/OptimizationEditorPanel.java index 2fce9928..8ef1959b 100644 --- a/src/eva2/gui/OptimizationEditorPanel.java +++ b/src/eva2/gui/OptimizationEditorPanel.java @@ -6,8 +6,11 @@ import eva2.tools.BasicResourceLoader; import eva2.tools.EVAHELP; import eva2.tools.SerializedObject; import eva2.util.annotation.Description; +import eva2.yaml.BeanSerializer; import javax.swing.*; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.plaf.basic.BasicComboBoxRenderer; import java.awt.*; import java.awt.event.ActionEvent; @@ -110,7 +113,8 @@ public class OptimizationEditorPanel extends JPanel implements ItemListener { openButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent event) { - Object object = FileTools.openObject(openButton, genericObjectEditor.getClassType()); + FileFilter filter = new FileNameExtensionFilter("YAML file", "yml", "yaml"); + Object object = FileTools.openObject(openButton, genericObjectEditor.getClassType(), filter); if (object != null) { // setValue takes care of: Making sure obj is of right type, // and firing property change. @@ -128,7 +132,8 @@ public class OptimizationEditorPanel extends JPanel implements ItemListener { saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent event) { - FileTools.saveObjectWithFileChooser(saveButton, genericObjectEditor.getValue()); + FileFilter filter = new FileNameExtensionFilter("YAML file", "yml", "yaml"); + FileTools.saveObjectWithFileChooser(saveButton, BeanSerializer.serializeObject(genericObjectEditor.getValue()), filter); } }); diff --git a/src/eva2/optimization/tools/FileTools.java b/src/eva2/optimization/tools/FileTools.java index 300b35c5..8891328f 100644 --- a/src/eva2/optimization/tools/FileTools.java +++ b/src/eva2/optimization/tools/FileTools.java @@ -3,7 +3,9 @@ package eva2.optimization.tools; import eva2.gui.BeanInspector; import eva2.tools.BasicResourceLoader; import eva2.tools.StringTools; +import org.yaml.snakeyaml.Yaml; +import javax.swing.filechooser.FileFilter; import javax.swing.*; import java.awt.*; import java.io.*; @@ -112,12 +114,13 @@ public class FileTools { * @param parentComponent the parent component * @param object The object to save. */ - public static boolean saveObjectWithFileChooser(Component parentComponent, Object object) { + public static boolean saveObjectWithFileChooser(Component parentComponent, Object object, FileFilter filter) { int returnVal; File sFile; boolean finished = false; do { JFileChooser fc = createFileChooser(); + fc.setFileFilter(filter); returnVal = fc.showSaveDialog(parentComponent); if (returnVal == JFileChooser.APPROVE_OPTION) { sFile = fc.getSelectedFile(); @@ -169,16 +172,15 @@ public class FileTools { * * @return the loaded object, or null if the operation was cancelled */ - public static Object openObject(Component parentComponent, Class clazz) { + public static Object openObject(Component parentComponent, Class clazz, FileFilter filter) { Object obj = null; JFileChooser fc = createFileChooser(); + fc.setFileFilter(filter); int returnVal = fc.showOpenDialog(parentComponent); if (returnVal == JFileChooser.APPROVE_OPTION) { File selected = fc.getSelectedFile(); try { - ObjectInputStream oi = new ObjectInputStream(new BufferedInputStream(new FileInputStream(selected))); - obj = oi.readObject(); - oi.close(); + obj = new Yaml().load(new FileInputStream(selected.getAbsolutePath())); if (!clazz.isAssignableFrom(obj.getClass())) { throw new Exception("Object not of type: " + clazz.getName()); } @@ -204,7 +206,7 @@ public class FileTools { } public static boolean saveObjectToFolder(Object object, File folder, boolean forceOverwrite, Component parentComponent) { - String predefName = null; + String predefName; try { predefName = (String) BeanInspector.callIfAvailable(object, "getName", null); predefName = StringTools.simplifySymbols(predefName) + ".yml"; diff --git a/src/eva2/yaml/BeanSerializer.java b/src/eva2/yaml/BeanSerializer.java index 44fce8cc..ba1feffb 100644 --- a/src/eva2/yaml/BeanSerializer.java +++ b/src/eva2/yaml/BeanSerializer.java @@ -16,7 +16,7 @@ import java.util.Set; import java.util.TreeSet; /** - * Created by becker on 02.11.2014. + * */ public class BeanSerializer { @@ -25,6 +25,7 @@ public class BeanSerializer { options.setAllowReadOnlyProperties(false); options.setIndent(4); Yaml yaml = new Yaml(new OptimizationRepresenter(), options); + return yaml.dump(obj); }