KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > gulden > framework > amoda > environment > gui > component > ErrorDialog


1 /*
2  * Project: AMODA - Abstract Modeled Application
3  * Class: de.gulden.framework.amoda.environment.gui.component.ErrorDialog
4  * Version: snapshot-beautyj-1.1
5  *
6  * Date: 2004-09-29
7  *
8  * This is a snapshot version of the AMODA 0.2 development branch,
9  * it is not released as a seperate version.
10  * For AMODA, see http://amoda.berlios.de/.
11  *
12  * This is licensed under the GNU Lesser General Public License (LGPL)
13  * and comes with NO WARRANTY.
14  *
15  * Author: Jens Gulden
16  * Email: amoda@jensgulden.de
17  */

18
19 package de.gulden.framework.amoda.environment.gui.component;
20
21 import de.gulden.framework.amoda.model.interaction.*;
22 import de.gulden.util.Toolbox;
23 import javax.swing.*;
24 import java.awt.*;
25 import java.io.*;
26 import java.util.*;
27 import java.util.List JavaDoc;
28
29 /**
30  * Class ErrorDialog.
31  *
32  * @author Jens Gulden
33  * @version snapshot-beautyj-1.1
34  */

35 class ErrorDialog extends JDialog implements ErrorMessagePerformer {
36
37     // ------------------------------------------------------------------------
38
// --- fields ---
39
// ------------------------------------------------------------------------
40

41     private List JavaDoc messages;
42
43     private int pos;
44
45     private boolean extended;
46
47     private boolean firstTime;
48
49     private JButton backButton;
50
51     private JPanel buttonPanel;
52
53     private JLabel countLabel;
54
55     private JPanel extendPanel;
56
57     private JPanel extendedPanel;
58
59     private JButton forwardButton;
60
61     private JLabel messageLabel;
62
63     private JPanel messagePanel;
64
65     private JButton moreButton;
66
67     private JPanel moreButtonPanel;
68
69     private JButton okButton;
70
71     private JScrollPane stackTraceScrollPane;
72
73     private JTextPane stackTraceTextPane;
74
75
76     // ------------------------------------------------------------------------
77
// --- constructor ---
78
// ------------------------------------------------------------------------
79

80     ErrorDialog(Frame parent) {
81         super(parent,"Error",false); // not modal
82
messages=new ArrayList();
83         pos=-1;
84         extended=false;
85         firstTime=true;
86         initComponents();
87         okButton.requestFocus();
88         pack();
89     }
90
91
92     // ------------------------------------------------------------------------
93
// --- methods ---
94
// ------------------------------------------------------------------------
95

96     /**
97      *
98      * @param errorMessage ...
99      * </p>
100      */

101     public void doErrorMessage(ErrorMessage errorMessage) {
102         messages.add(errorMessage);
103         //(comment-out to keep first message visible (may be wanted if multiple errors occur before user can react)):
104
pos=messages.size()-1;
105         if (firstTime) {
106             Toolbox.centerComponent(this,getParent());
107             pos = 0;
108             firstTime=false;
109         }
110         update();
111         setVisible(true);
112     }
113
114     private void initComponents() {
115         //GEN-BEGIN:initComponents
116
java.awt.GridBagConstraints JavaDoc gridBagConstraints;
117
118                 messagePanel = new javax.swing.JPanel JavaDoc();
119                 messageLabel = new javax.swing.JLabel JavaDoc();
120                 buttonPanel = new javax.swing.JPanel JavaDoc();
121                 okButton = new javax.swing.JButton JavaDoc();
122                 extendPanel = new javax.swing.JPanel JavaDoc();
123                 moreButtonPanel = new javax.swing.JPanel JavaDoc();
124                 backButton = new javax.swing.JButton JavaDoc();
125                 forwardButton = new javax.swing.JButton JavaDoc();
126                 countLabel = new javax.swing.JLabel JavaDoc();
127                 moreButton = new javax.swing.JButton JavaDoc();
128                 extendedPanel = new javax.swing.JPanel JavaDoc();
129                 stackTraceScrollPane = new javax.swing.JScrollPane JavaDoc();
130                 stackTraceTextPane = new javax.swing.JTextPane JavaDoc();
131
132                 addWindowListener(new java.awt.event.WindowAdapter JavaDoc() {
133                     public void windowClosing(java.awt.event.WindowEvent JavaDoc evt) {
134                         closeDialog(evt);
135                     }
136                 });
137
138                 messagePanel.setLayout(new java.awt.BorderLayout JavaDoc());
139
140                 messagePanel.setBorder(new javax.swing.border.EtchedBorder JavaDoc());
141                 messageLabel.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/de/gulden/framework/amoda/environment/gui/resource/Stop24.gif")));
142                 messageLabel.setText("...");
143                 messageLabel.setPreferredSize(new java.awt.Dimension JavaDoc(800, 72));
144                 messagePanel.add(messageLabel, java.awt.BorderLayout.CENTER);
145
146                 getContentPane().add(messagePanel, java.awt.BorderLayout.NORTH);
147
148                 buttonPanel.setLayout(new java.awt.FlowLayout JavaDoc(java.awt.FlowLayout.CENTER, 5, 4));
149
150                 okButton.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
151                 okButton.setText(" OK ");
152                 okButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
153                     public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
154                         okButtonActionPerformed(evt);
155                     }
156                 });
157
158                 buttonPanel.add(okButton);
159
160                 getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH);
161
162                 extendPanel.setLayout(new java.awt.BorderLayout JavaDoc());
163
164                 moreButtonPanel.setLayout(new java.awt.GridBagLayout JavaDoc());
165
166                 backButton.setFont(new java.awt.Font JavaDoc("Dialog", 0, 10));
167                 backButton.setText("<<");
168                 backButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
169                     public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
170                         backButtonActionPerformed(evt);
171                     }
172                 });
173
174                 gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
175                 gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 1, 0, 0);
176                 moreButtonPanel.add(backButton, gridBagConstraints);
177
178                 forwardButton.setFont(new java.awt.Font JavaDoc("Dialog", 0, 10));
179                 forwardButton.setText(">>");
180                 forwardButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
181                     public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
182                         forwardButtonActionPerformed(evt);
183                     }
184                 });
185
186                 moreButtonPanel.add(forwardButton, new java.awt.GridBagConstraints JavaDoc());
187
188                 countLabel.setFont(new java.awt.Font JavaDoc("Dialog", 0, 10));
189                 countLabel.setText("Message 1 of 10");
190                 countLabel.setEnabled(false);
191                 gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
192                 gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 5, 0, 0);
193                 moreButtonPanel.add(countLabel, gridBagConstraints);
194
195                 moreButton.setFont(new java.awt.Font JavaDoc("Dialog", 0, 10));
196                 moreButton.setText("More >>");
197                 moreButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
198                     public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
199                         moreButtonActionPerformed(evt);
200                     }
201                 });
202
203                 gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
204                 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
205                 gridBagConstraints.weightx = 1.0;
206                 gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 0, 1);
207                 moreButtonPanel.add(moreButton, gridBagConstraints);
208
209                 extendPanel.add(moreButtonPanel, java.awt.BorderLayout.SOUTH);
210
211                 extendedPanel.setLayout(new java.awt.BorderLayout JavaDoc());
212
213                 stackTraceTextPane.setBackground(javax.swing.UIManager.getDefaults().getColor("TextField.inactiveBackground"));
214                 stackTraceTextPane.setEditable(false);
215                 stackTraceTextPane.setFont(new java.awt.Font JavaDoc("DialogInput", 0, 10));
216                 stackTraceTextPane.setMinimumSize(new java.awt.Dimension JavaDoc(600, 250));
217                 stackTraceTextPane.setPreferredSize(new java.awt.Dimension JavaDoc(800, 250));
218                 stackTraceScrollPane.setViewportView(stackTraceTextPane);
219
220                 extendedPanel.add(stackTraceScrollPane, java.awt.BorderLayout.CENTER);
221
222                 extendPanel.add(extendedPanel, java.awt.BorderLayout.CENTER);
223
224                 getContentPane().add(extendPanel, java.awt.BorderLayout.CENTER);
225
226                 pack();
227     }
228
229     private void okButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
230         //GEN-FIRST:event_okButtonActionPerformed
231
setVisible(false);
232     }
233
234     private void forwardButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
235         //GEN-FIRST:event_forwardButtonActionPerformed
236
if (pos<messages.size()-1) {
237                     pos++;
238                     update();
239                 }
240     }
241
242     private void backButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
243         //GEN-FIRST:event_backButtonActionPerformed
244
if (pos>0) {
245                     pos--;
246                     update();
247                 }
248     }
249
250     private void moreButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
251         //GEN-FIRST:event_moreButtonActionPerformed
252
extended=!extended;
253                 if (!extended) {
254                     pos=messages.size()-1; // make sure it's the current one if collapsed
255
}
256                 update();
257     }
258
259     private void closeDialog(java.awt.event.WindowEvent JavaDoc evt) {
260         //GEN-FIRST:event_closeDialog
261
setVisible(false);
262
263     }
264
265     private void update() {
266         ErrorMessage msg=(ErrorMessage)messages.get(pos);
267         String JavaDoc text=msg.getText();
268         Throwable JavaDoc throwable=msg.getCause();
269         if (throwable!=null) {
270             String JavaDoc throwableName=throwable.getClass().getName();
271             int index=throwableName.lastIndexOf('.');
272             if (index!=-1) {
273                 throwableName=throwableName.substring(index+1);
274             }
275             String JavaDoc tmsg=throwable.getMessage();
276             if (tmsg!=null) {
277                 tmsg=Toolbox.capitalize(tmsg.trim());
278                 if (!tmsg.endsWith(".")) {
279                     tmsg+=".";
280                 }
281                 text = text+" "+tmsg;
282             }
283             if ((text==null)||(text.length()==0)) {
284                 text=throwableName;
285             } else {
286                 text=throwableName+": "+text;
287             }
288         }
289         messageLabel.setText(text);
290         if (extended) {
291             extendPanel.add(extendedPanel,BorderLayout.CENTER);
292             moreButtonPanel.remove(moreButton);
293             GridBagConstraints gbc=new GridBagConstraints();
294             moreButtonPanel.add(backButton,gbc);
295             moreButtonPanel.add(forwardButton,gbc);
296             moreButtonPanel.add(countLabel,gbc);
297             gbc.weightx=1.0;
298             gbc.anchor=GridBagConstraints.EAST;
299             moreButtonPanel.add(moreButton,gbc);
300             moreButton.setText("Less <<");
301             StringWriter sw=new StringWriter();
302             throwable.printStackTrace(new PrintWriter(sw));
303             String JavaDoc stackTrace=sw.toString();
304             stackTraceTextPane.setText(stackTrace);
305         } else {
306             extendPanel.remove(extendedPanel);
307             moreButtonPanel.remove(backButton);
308             moreButtonPanel.remove(forwardButton);
309             moreButtonPanel.remove(countLabel);
310             moreButton.setText("More >>");
311         }
312         backButton.setEnabled((pos>0));
313         forwardButton.setEnabled((pos<messages.size()-1));
314         countLabel.setText("Message "+(pos+1)+" of "+messages.size());
315         pack();
316         stackTraceTextPane.setCaretPosition(0);
317     }
318
319 } // end ErrorDialog
320
Popular Tags