1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package cz.zcu.mre.sparkle.gui.dialogs.other;
21
22 import cz.zcu.mre.sparkle.Messages;
23 import cz.zcu.mre.sparkle.gui.dialogs.TextContentDialog;
24 import cz.zcu.mre.sparkle.gui.tools.AbstractDialogController;
25 import cz.zcu.mre.sparkle.gui.tools.FormControllerFactory;
26 import cz.zcu.mre.sparkle.tools.Utils;
27 import javafx.fxml.FXML;
28 import javafx.scene.control.Button;
29 import javafx.scene.control.Label;
30 import javafx.stage.Window;
31 import java.io.IOException;
32 import java.io.PrintWriter;
33 import java.io.StringWriter;
34 import java.util.logging.Level;
35 import java.util.logging.Logger;
36
37
38
39
40
41
42
43 public final class ErrorDialog
44 extends AbstractDialogController {
45
46 private static final Logger LOG = Logger.getLogger(ErrorDialog.class.getName());
47
48 @FXML
49 private Label messageLabel;
50 @FXML
51 private Button detailsButton;
52
53 private Throwable details;
54
55 @FXML
56 private void okButtonOnAction() {
57 close();
58 }
59
60 @FXML
61 private void detailsButtonOnAction() {
62 final StringWriter sw = new StringWriter();
63 final PrintWriter pw = new PrintWriter(sw);
64 details.printStackTrace(pw);
65 TextContentDialog.open(getStage(), Messages.getString("ERROR_DETAILS"), sw.toString(),
66 details.getClass().getSimpleName());
67 }
68
69 public final String getMessage() {
70 return messageLabel.getText();
71 }
72
73 public final void setMessage(final String message) {
74 messageLabel.setText(message);
75 }
76
77 @Override
78 protected final void onDialogInitialized() {
79 setMessage("");
80 Utils.makeInvisibleUnmanaged(detailsButton);
81 }
82
83 public static final void open(final Window owner, final String title, final String message) {
84 open(owner, title, message, null);
85 }
86
87 public static final void open(final Window owner, final String title, final String message,
88 final Throwable details) {
89 try {
90 final ErrorDialog dlg = FormControllerFactory.load(owner, ErrorDialog.class);
91 dlg.setTitle(title);
92 dlg.setMessage(message);
93 dlg.setDetails(details);
94 dlg.showAndWait();
95 } catch (final IOException e) {
96 LOG.log(Level.SEVERE, "Exception: ", e);
97 }
98 }
99
100 public final Throwable getDetails() {
101 return details;
102 }
103
104 public final void setDetails(final Throwable details) {
105 this.details = details;
106 detailsButton.setVisible(details != null);
107 }
108 }