package org.leumasjaffe.recipe.controller; import java.awt.Component; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; import java.util.Optional; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; import lombok.experimental.NonFinal; @RequiredArgsConstructor @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true) class SwingSaveLoadHandle implements SaveLoadHandle { JFileChooser chooser = new JFileChooser(); Component owner; @NonFinal File filename = null; @Override @SuppressWarnings("resource") @SneakyThrows(IOException.class) public Optional writer() { if (filename != null) { return Optional.of(new FileWriter(filename)); } else if (chooser.showSaveDialog(owner) == JFileChooser.APPROVE_OPTION) { filename = chooser.getSelectedFile(); return Optional.of(new FileWriter(filename)); } else { return Optional.empty(); } } @Override @SuppressWarnings("resource") @SneakyThrows(FileNotFoundException.class) public Optional reader() { if (chooser.showOpenDialog(owner) == JFileChooser.APPROVE_OPTION) { filename = chooser.getSelectedFile(); return Optional.of(new FileReader(filename)); } else { return Optional.empty(); } } @Override public void error(Exception ex) { JOptionPane.showMessageDialog(owner, ex.getLocalizedMessage(), "File Error", JOptionPane.ERROR_MESSAGE); } @Override public void clear() { this.filename = null; } }