From 85a7b4c0490e8b352efcb07710e496cb4c475091 Mon Sep 17 00:00:00 2001 From: whytestalyon Date: Mon, 28 Aug 2017 22:18:14 -0500 Subject: [PATCH] finished hooking up saving and loading of analysis settings --- src/main/java/com/bwc/ora/OraUtils.java | 35 +++++++------- .../bwc/ora/collections/ModelsCollection.java | 2 +- .../java/com/bwc/ora/io/SettingsIOUtils.java | 47 +++++++++++++++++-- .../java/com/bwc/ora/models/LrpSettings.java | 4 +- .../com/bwc/ora/views/menus/SettingsMenu.java | 12 +++++ 5 files changed, 77 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/bwc/ora/OraUtils.java b/src/main/java/com/bwc/ora/OraUtils.java index ce786f8..0fe9cf5 100644 --- a/src/main/java/com/bwc/ora/OraUtils.java +++ b/src/main/java/com/bwc/ora/OraUtils.java @@ -43,7 +43,8 @@ public class OraUtils { public static final ActionListener testAnalysisActionListener = evt -> { try { //read in image and ready for analysis - OraUtils.loadOctFromTiffFile(new File(OraUtils.class.getClassLoader().getResource("KS_10238_OS_L_7_90_05_529disp_reg_fr1-25_AL21p35.tif").toURI()), Oct.getInstance()); + OraUtils.loadOctFromTiffFile(new File(OraUtils.class.getClassLoader().getResource("KS_10238_OS_L_7_90_05_529disp_reg_fr1-25_AL21p35.tif").toURI()), + Oct.getInstance()); Collections.getInstance().resetCollectionsForNewAnalysis(); ModelsCollection.getInstance().resetSettingsToDefault(); } catch (IOException | URISyntaxException ex) { @@ -56,7 +57,7 @@ public class OraUtils { public static final ActionListener newAnalysisActionListener = evt -> { try { //read in image and ready for analysis - File tiffFile = OraUtils.selectFile(null, JFileChooser.FILES_ONLY, "Log OCT", "TIFF file", "tiff", "tif"); + File tiffFile = OraUtils.selectFile(true, null, JFileChooser.FILES_ONLY, "Log OCT", "TIFF file", "tiff", "tif"); if (tiffFile != null) { OraUtils.loadOctFromTiffFile(tiffFile, Oct.getInstance()); Collections.getInstance().resetCollectionsForNewAnalysis(); @@ -71,7 +72,7 @@ public class OraUtils { public static final ActionListener exportAnalysisActionListener = evt -> { try { //read in image and ready for analysis - File exportDir = OraUtils.selectFile(null, JFileChooser.DIRECTORIES_ONLY, "Analysis export directory", null); + File exportDir = OraUtils.selectFile(true, null, JFileChooser.DIRECTORIES_ONLY, "Analysis export directory", null); if (exportDir != null) { ExportWriter.exportAnalysis(exportDir); } @@ -87,7 +88,8 @@ public static void loadOctFromTiffFile(File octFile, Oct oct) throws IOException oct.setLogOctImage(TiffReader.readTiffImage(octFile)); } - public static File selectFile(Component parent, int selectorType, String selectDescription, String extensionDescription, String... extentions) { + public static File selectFile(boolean openDialog, Component parent, int selectorType, String selectDescription, String extensionDescription, + String... extentions) { File prevLocation = fc.getSelectedFile() != null ? fc.getSelectedFile().getParentFile() : null; fc = new JFileChooser(prevLocation); @@ -99,13 +101,11 @@ public static File selectFile(Component parent, int selectorType, String selectD fc.setAcceptAllFileFilterUsed(false); fc.setApproveButtonText("Select"); fc.setDialogTitle("Select " + selectDescription + "..."); - if (fc.getSelectedFile() != null && fc.getSelectedFile().isFile()) { - fc.setCurrentDirectory(fc.getSelectedFile().getParentFile()); - } - int returnVal = fc.showOpenDialog(parent); + int returnVal = openDialog ? fc.showOpenDialog(parent) : fc.showSaveDialog(parent); if (returnVal == JFileChooser.APPROVE_OPTION) { if (selectorType == JFileChooser.FILES_ONLY) { - return loadFile(fc.getSelectedFile()); + System.out.println("pwd: "+fc.getCurrentDirectory()); + return openDialog ? loadFile(fc.getSelectedFile()) : fc.getSelectedFile(); } else if (selectorType == JFileChooser.DIRECTORIES_ONLY) { return loadDir(fc.getSelectedFile()); } else { @@ -117,13 +117,12 @@ public static File selectFile(Component parent, int selectorType, String selectD } private static File loadFile(File file) { - if (file.exists()) { - if (!file.isFile()) { - throw new IllegalArgumentException("Supplied input file " + file.getAbsolutePath() + " is not a file!"); - } - } else { + if (!file.exists()) { throw new IllegalArgumentException("Supplied input file does not exist @ " + file.getAbsolutePath() + "."); } + if (!file.isFile()) { + throw new IllegalArgumentException("Supplied input file " + file.getAbsolutePath() + " is not a file!"); + } return file; } @@ -168,7 +167,9 @@ public void mouseClicked(MouseEvent e) { )); lrpCollection.setSelectedIndex(0); lrpPanel.removeMouseListener(this); - if (buttonToEnable != null) buttonToEnable.setEnabled(true); + if (buttonToEnable != null) { + buttonToEnable.setEnabled(true); + } } } }); @@ -208,8 +209,8 @@ public static void setLrpsForAnalysis() { } boolean illegalPositionLrps = lrps.stream() - .anyMatch(lrp -> lrp.getLrpCenterXPosition() - ((lrpSettings.getLrpWidth() - 1) / 2) < 0 - || lrp.getLrpCenterXPosition() + ((lrpSettings.getLrpWidth() - 1) / 2) >= octWidth); + .anyMatch(lrp -> lrp.getLrpCenterXPosition() - ((lrpSettings.getLrpWidth() - 1) / 2) < 0 + || lrp.getLrpCenterXPosition() + ((lrpSettings.getLrpWidth() - 1) / 2) >= octWidth); if (illegalPositionLrps) { throw new IllegalArgumentException("Combination of LRP width, the number of LRPs and LRP " + diff --git a/src/main/java/com/bwc/ora/collections/ModelsCollection.java b/src/main/java/com/bwc/ora/collections/ModelsCollection.java index f1f92f7..8b26d96 100644 --- a/src/main/java/com/bwc/ora/collections/ModelsCollection.java +++ b/src/main/java/com/bwc/ora/collections/ModelsCollection.java @@ -15,7 +15,7 @@ public class ModelsCollection { private final LrpSettings lrpSettings = new LrpSettings(); private final OctSettings octSettings = new OctSettings(); private final DisplaySettings displaySettings = new DisplaySettings(); - private final ScaleBar scaleBar = new ScaleBar("scale_bars", 100); + private transient final ScaleBar scaleBar = new ScaleBar("scale_bars", 100); private final AnalysisSettings analysisSettings = new AnalysisSettings(); private ModelsCollection() { diff --git a/src/main/java/com/bwc/ora/io/SettingsIOUtils.java b/src/main/java/com/bwc/ora/io/SettingsIOUtils.java index 7e24882..92304de 100644 --- a/src/main/java/com/bwc/ora/io/SettingsIOUtils.java +++ b/src/main/java/com/bwc/ora/io/SettingsIOUtils.java @@ -1,19 +1,60 @@ package com.bwc.ora.io; +import com.bwc.ora.OraUtils; +import com.bwc.ora.collections.Collections; import com.bwc.ora.collections.ModelsCollection; +import com.bwc.ora.models.Oct; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import javax.swing.*; +import java.awt.event.ActionListener; import java.io.*; public class SettingsIOUtils { - public static final String SETTINGS_FILE_EXTENSION = "oraconf"; + public static final String ORA_ANALYSIS_SETTINGS_FILE_EXTENSION = "oasf"; + + public static final ActionListener loadAnalysisSettingsActionListener = evt -> { + try { + //read in settings file for analysis + File osfFile = OraUtils.selectFile(true, null, JFileChooser.FILES_ONLY, "ORA Analysis Settings", ORA_ANALYSIS_SETTINGS_FILE_EXTENSION + " file", + ORA_ANALYSIS_SETTINGS_FILE_EXTENSION); + if (osfFile != null) { + SettingsIOUtils.loadSettings(osfFile); + } + } catch (IOException ex) { + JOptionPane.showMessageDialog(null, "ORA Analysis Setting loading failed," + + " reason: " + ex.getMessage(), "Loading error!", JOptionPane.ERROR_MESSAGE); + } + }; + + public static final ActionListener saveAnalysisSettingsActionListener = evt -> { + try { + //read in settings file for analysis + File osfFile = OraUtils.selectFile(false, null, JFileChooser.FILES_ONLY, "Save Analysis Settings", ORA_ANALYSIS_SETTINGS_FILE_EXTENSION + " file", + ORA_ANALYSIS_SETTINGS_FILE_EXTENSION); + if (osfFile != null) { + if (!osfFile.getName().endsWith(ORA_ANALYSIS_SETTINGS_FILE_EXTENSION)) { + osfFile = new File(osfFile.getParentFile(), osfFile.getName() + "." + ORA_ANALYSIS_SETTINGS_FILE_EXTENSION); + } + SettingsIOUtils.saveCurrentSettings(osfFile); + } else { + throw new IOException("No file entered"); + } + } catch (IOException ex) { + JOptionPane.showMessageDialog(null, "ORA Analysis Setting saving failed," + + " reason: " + ex.getMessage(), "Save error!", JOptionPane.ERROR_MESSAGE); + } + }; public static void saveCurrentSettings(File analysisSettingsFile) throws IOException { - try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(analysisSettingsFile)))) { + System.out.println("Saving to " + analysisSettingsFile.getAbsolutePath()); + try (PrintWriter pw = new PrintWriter(analysisSettingsFile)) { Gson jsonFormatter = new GsonBuilder().setPrettyPrinting().create(); - pw.print(jsonFormatter.toJson(ModelsCollection.getInstance())); + String json = jsonFormatter.toJson(ModelsCollection.getInstance()); + System.out.println("Settings JSON:\n" + json); + pw.println(json); } } diff --git a/src/main/java/com/bwc/ora/models/LrpSettings.java b/src/main/java/com/bwc/ora/models/LrpSettings.java index c5f571f..19f27e9 100644 --- a/src/main/java/com/bwc/ora/models/LrpSettings.java +++ b/src/main/java/com/bwc/ora/models/LrpSettings.java @@ -21,8 +21,8 @@ public class LrpSettings { private transient final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); - private final Integer[] lrpWidthOptions = new Integer[] { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25 }; - private final int[] lrpSmoothingRange = new int[] { 0, 49 }; + private transient final Integer[] lrpWidthOptions = new Integer[] { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25 }; + private transient final int[] lrpSmoothingRange = new int[] { 0, 49 }; private int lrpWidth = 5; public static final String PROP_LRP_WIDTH = "lrpWidth"; private int lrpHeight = 300; diff --git a/src/main/java/com/bwc/ora/views/menus/SettingsMenu.java b/src/main/java/com/bwc/ora/views/menus/SettingsMenu.java index e363d57..c7d32cd 100644 --- a/src/main/java/com/bwc/ora/views/menus/SettingsMenu.java +++ b/src/main/java/com/bwc/ora/views/menus/SettingsMenu.java @@ -1,6 +1,7 @@ package com.bwc.ora.views.menus; import com.bwc.ora.collections.ModelsCollection; +import com.bwc.ora.io.SettingsIOUtils; import com.bwc.ora.models.DisplaySettings; import javax.swing.*; @@ -14,6 +15,8 @@ public class SettingsMenu extends JMenu { private JCheckBoxMenuItem displayFileNameCheckBox = new JCheckBoxMenuItem("Display OCT File Name", true); private JCheckBoxMenuItem displayLrpPeaksCheckBox = new JCheckBoxMenuItem("Display LRP Peaks", true); private JCheckBoxMenuItem showFwhmCheckBox = new JCheckBoxMenuItem("Display FWHM on LRP", false); + private JMenuItem loadAnalysisSettingsMenuItem = new JMenuItem("Load Analysis Settings"); + private JMenuItem saveAnalysisSettingsMenuItem = new JMenuItem("Save Analysis Settings"); public SettingsMenu() { setText("Settings"); @@ -30,8 +33,17 @@ private void initSettingsMenu() { add(displayScaleBarsCheckBox); add(displayLrpPeaksCheckBox); add(showFwhmCheckBox); + addSeparator(); + add(saveAnalysisSettingsMenuItem); + add(loadAnalysisSettingsMenuItem); connectSettingsToModel(); + registerItemListeners(); + } + + private void registerItemListeners() { + saveAnalysisSettingsMenuItem.addActionListener(SettingsIOUtils.saveAnalysisSettingsActionListener); + loadAnalysisSettingsMenuItem.addActionListener(SettingsIOUtils.loadAnalysisSettingsActionListener); } private void connectSettingsToModel() {