SwingSaveLoadHandle.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package org.leumasjaffe.recipe.controller;
  2. import java.awt.Component;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.Reader;
  9. import java.io.Writer;
  10. import java.util.Optional;
  11. import javax.swing.JFileChooser;
  12. import javax.swing.JOptionPane;
  13. import lombok.AccessLevel;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.SneakyThrows;
  16. import lombok.experimental.FieldDefaults;
  17. import lombok.experimental.NonFinal;
  18. @RequiredArgsConstructor
  19. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  20. class SwingSaveLoadHandle implements SaveLoadHandle {
  21. JFileChooser chooser = new JFileChooser();
  22. Component owner;
  23. @NonFinal File filename = null;
  24. @Override
  25. @SuppressWarnings("resource")
  26. @SneakyThrows(IOException.class)
  27. public Optional<Writer> writer() {
  28. if (filename != null) {
  29. return Optional.of(new FileWriter(filename));
  30. } else if (chooser.showSaveDialog(owner) == JFileChooser.APPROVE_OPTION) {
  31. filename = chooser.getSelectedFile();
  32. return Optional.of(new FileWriter(filename));
  33. } else {
  34. return Optional.empty();
  35. }
  36. }
  37. @Override
  38. @SuppressWarnings("resource")
  39. @SneakyThrows(FileNotFoundException.class)
  40. public Optional<Reader> reader() {
  41. if (chooser.showOpenDialog(owner) == JFileChooser.APPROVE_OPTION) {
  42. filename = chooser.getSelectedFile();
  43. return Optional.of(new FileReader(filename));
  44. } else {
  45. return Optional.empty();
  46. }
  47. }
  48. @Override
  49. public void error(Exception ex) {
  50. JOptionPane.showMessageDialog(owner, ex.getLocalizedMessage(),
  51. "File Error", JOptionPane.ERROR_MESSAGE);
  52. }
  53. @Override
  54. public void clear() {
  55. this.filename = null;
  56. }
  57. }