1 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 ; 28 29 35 class ErrorDialog extends JDialog implements ErrorMessagePerformer { 36 37 41 private List 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 80 ErrorDialog(Frame parent) { 81 super(parent,"Error",false); messages=new ArrayList(); 83 pos=-1; 84 extended=false; 85 firstTime=true; 86 initComponents(); 87 okButton.requestFocus(); 88 pack(); 89 } 90 91 92 96 101 public void doErrorMessage(ErrorMessage errorMessage) { 102 messages.add(errorMessage); 103 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 java.awt.GridBagConstraints gridBagConstraints; 117 118 messagePanel = new javax.swing.JPanel (); 119 messageLabel = new javax.swing.JLabel (); 120 buttonPanel = new javax.swing.JPanel (); 121 okButton = new javax.swing.JButton (); 122 extendPanel = new javax.swing.JPanel (); 123 moreButtonPanel = new javax.swing.JPanel (); 124 backButton = new javax.swing.JButton (); 125 forwardButton = new javax.swing.JButton (); 126 countLabel = new javax.swing.JLabel (); 127 moreButton = new javax.swing.JButton (); 128 extendedPanel = new javax.swing.JPanel (); 129 stackTraceScrollPane = new javax.swing.JScrollPane (); 130 stackTraceTextPane = new javax.swing.JTextPane (); 131 132 addWindowListener(new java.awt.event.WindowAdapter () { 133 public void windowClosing(java.awt.event.WindowEvent evt) { 134 closeDialog(evt); 135 } 136 }); 137 138 messagePanel.setLayout(new java.awt.BorderLayout ()); 139 140 messagePanel.setBorder(new javax.swing.border.EtchedBorder ()); 141 messageLabel.setIcon(new javax.swing.ImageIcon (getClass().getResource("/de/gulden/framework/amoda/environment/gui/resource/Stop24.gif"))); 142 messageLabel.setText("..."); 143 messageLabel.setPreferredSize(new java.awt.Dimension (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 (java.awt.FlowLayout.CENTER, 5, 4)); 149 150 okButton.setFont(new java.awt.Font ("Dialog", 0, 12)); 151 okButton.setText(" OK "); 152 okButton.addActionListener(new java.awt.event.ActionListener () { 153 public void actionPerformed(java.awt.event.ActionEvent 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 ()); 163 164 moreButtonPanel.setLayout(new java.awt.GridBagLayout ()); 165 166 backButton.setFont(new java.awt.Font ("Dialog", 0, 10)); 167 backButton.setText("<<"); 168 backButton.addActionListener(new java.awt.event.ActionListener () { 169 public void actionPerformed(java.awt.event.ActionEvent evt) { 170 backButtonActionPerformed(evt); 171 } 172 }); 173 174 gridBagConstraints = new java.awt.GridBagConstraints (); 175 gridBagConstraints.insets = new java.awt.Insets (0, 1, 0, 0); 176 moreButtonPanel.add(backButton, gridBagConstraints); 177 178 forwardButton.setFont(new java.awt.Font ("Dialog", 0, 10)); 179 forwardButton.setText(">>"); 180 forwardButton.addActionListener(new java.awt.event.ActionListener () { 181 public void actionPerformed(java.awt.event.ActionEvent evt) { 182 forwardButtonActionPerformed(evt); 183 } 184 }); 185 186 moreButtonPanel.add(forwardButton, new java.awt.GridBagConstraints ()); 187 188 countLabel.setFont(new java.awt.Font ("Dialog", 0, 10)); 189 countLabel.setText("Message 1 of 10"); 190 countLabel.setEnabled(false); 191 gridBagConstraints = new java.awt.GridBagConstraints (); 192 gridBagConstraints.insets = new java.awt.Insets (0, 5, 0, 0); 193 moreButtonPanel.add(countLabel, gridBagConstraints); 194 195 moreButton.setFont(new java.awt.Font ("Dialog", 0, 10)); 196 moreButton.setText("More >>"); 197 moreButton.addActionListener(new java.awt.event.ActionListener () { 198 public void actionPerformed(java.awt.event.ActionEvent evt) { 199 moreButtonActionPerformed(evt); 200 } 201 }); 202 203 gridBagConstraints = new java.awt.GridBagConstraints (); 204 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 205 gridBagConstraints.weightx = 1.0; 206 gridBagConstraints.insets = new java.awt.Insets (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 ()); 212 213 stackTraceTextPane.setBackground(javax.swing.UIManager.getDefaults().getColor("TextField.inactiveBackground")); 214 stackTraceTextPane.setEditable(false); 215 stackTraceTextPane.setFont(new java.awt.Font ("DialogInput", 0, 10)); 216 stackTraceTextPane.setMinimumSize(new java.awt.Dimension (600, 250)); 217 stackTraceTextPane.setPreferredSize(new java.awt.Dimension (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 evt) { 230 setVisible(false); 232 } 233 234 private void forwardButtonActionPerformed(java.awt.event.ActionEvent evt) { 235 if (pos<messages.size()-1) { 237 pos++; 238 update(); 239 } 240 } 241 242 private void backButtonActionPerformed(java.awt.event.ActionEvent evt) { 243 if (pos>0) { 245 pos--; 246 update(); 247 } 248 } 249 250 private void moreButtonActionPerformed(java.awt.event.ActionEvent evt) { 251 extended=!extended; 253 if (!extended) { 254 pos=messages.size()-1; } 256 update(); 257 } 258 259 private void closeDialog(java.awt.event.WindowEvent evt) { 260 setVisible(false); 262 263 } 264 265 private void update() { 266 ErrorMessage msg=(ErrorMessage)messages.get(pos); 267 String text=msg.getText(); 268 Throwable throwable=msg.getCause(); 269 if (throwable!=null) { 270 String throwableName=throwable.getClass().getName(); 271 int index=throwableName.lastIndexOf('.'); 272 if (index!=-1) { 273 throwableName=throwableName.substring(index+1); 274 } 275 String 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 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 } | Popular Tags |