Skip to content

Commit 1ec7aaf

Browse files
authored
Merge pull request #334 from adamretter/hotfix/ui-save-file
Correct Save Dialog in UI
2 parents fd89de0 + 2372bab commit 1ec7aaf

File tree

2 files changed

+25
-19
lines changed

2 files changed

+25
-19
lines changed

csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/CsvValidatorUi.scala

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ package uk.gov.nationalarchives.csv.validator.ui
1010

1111
import scala.swing._
1212
import resource._
13+
1314
import javax.swing._
1415
import net.java.dev.designgridlayout._
15-
import java.io.{File, FileInputStream, FileOutputStream, PrintWriter}
1616

17+
import java.io.{File, FileInputStream, FileOutputStream, IOException}
1718
import table.DefaultTableModel
1819
import uk.gov.nationalarchives.csv.validator.cmd.CsvValidatorCmdApp
1920

@@ -22,25 +23,20 @@ import uk.gov.nationalarchives.csv.validator.ui.DesignGridImplicits._
2223

2324
import scala.swing.PopupMenuImplicits._
2425
import ScalaSwingHelpers._
25-
import java.awt.{Cursor, Font}
26-
import java.util.Properties
2726

27+
import java.awt.Cursor
28+
import java.util.Properties
2829
import scalax.file.Path
2930
import uk.gov.nationalarchives.csv.validator.ProgressCallback
30-
import java.nio.charset.Charset
3131

32+
import java.nio.charset.Charset
3233
import uk.gov.nationalarchives.csv.validator.api.TextFile
34+
3335
import java.util.jar.{Attributes, Manifest}
3436
import java.net.URL
3537
import java.nio.charset.StandardCharsets.UTF_8
3638
import java.nio.file.{Files, StandardOpenOption}
3739

38-
import scala.swing.Dialog.Message
39-
import scala.swing.event.ButtonClicked
40-
import javax.swing
41-
42-
import scala.swing
43-
4440
/**
4541
* Simple GUI for the CSV Validator
4642
*
@@ -153,9 +149,14 @@ object CsvValidatorUi extends SimpleSwingApplication {
153149
* @param s
154150
* @param f
155151
*/
156-
private def saveToFile(s: String, f: File) {
152+
private def saveToFile(s: String, f: File) : Option[IOException] = {
157153
val data : Array[Byte] = s.getBytes(UTF_8)
158-
Files.write(f.toPath, data, StandardOpenOption.WRITE)
154+
try {
155+
Files.write(f.toPath, data, StandardOpenOption.WRITE, StandardOpenOption.CREATE_NEW)
156+
None
157+
} catch {
158+
case ioe: IOException => Some(ioe)
159+
}
159160
}
160161

161162
case class Settings(lastCsvPath: File, lastCsvSchemaPath: File, lastReportPath: File)

csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/ScalaSwingHelpers.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
package uk.gov.nationalarchives.csv.validator.ui
1010

1111
import swing._
12-
import scala.swing.event.{MouseClicked, KeyPressed, Key, ButtonClicked}
13-
import java.io.File
12+
import scala.swing.event.{ButtonClicked, Key, KeyPressed, MouseClicked}
13+
import java.io.{File, IOException}
1414
import swing.FileChooser.Result
1515
import swing.GridBagPanel.Anchor
16-
import java.awt.event.{MouseEvent, MouseListener, ActionListener, ActionEvent}
1716
import java.beans.{PropertyChangeEvent, PropertyChangeListener}
17+
import scala.swing.Dialog.Message
1818

1919
/**
2020
* Some simple helpers to ease
@@ -30,7 +30,7 @@ object ScalaSwingHelpers {
3030
* @param locateOver A component over which the FileChooser dialog should be located
3131
*/
3232
def chooseFile(fileChooser: FileChooser, output: TextComponent, locateOver: Component) {
33-
chooseFile(fileChooser, f => output.text = f.getAbsolutePath, locateOver)
33+
chooseFile(fileChooser, {f => output.text = f.getAbsolutePath; None}, locateOver)
3434
}
3535

3636
/**
@@ -40,10 +40,15 @@ object ScalaSwingHelpers {
4040
* @param result A function which takes the chosen file
4141
* @param locateOver A component over which the FileChooser dialog should be located
4242
*/
43-
def chooseFile(fileChooser: FileChooser, result: File => Unit, locateOver: Component) {
44-
fileChooser.showOpenDialog(locateOver) match {
43+
def chooseFile(fileChooser: FileChooser, result: File => Option[IOException], locateOver: Component) {
44+
fileChooser.showSaveDialog(locateOver) match {
4545
case Result.Approve =>
46-
result(fileChooser.selectedFile)
46+
result(fileChooser.selectedFile) match {
47+
case Some(ioe) =>
48+
ioe.printStackTrace()
49+
Dialog.showMessage(fileChooser, s"${ioe.getClass.getName}: ${ioe.getMessage}", "Unable to Save file", Message.Error)
50+
case None =>
51+
}
4752
case Result.Cancel =>
4853
}
4954
}

0 commit comments

Comments
 (0)