/*
* Copyright (C) 2004 The Concord Consortium, Inc.,
* 10 Concord Crossing, Concord, MA 01742
*
* Web Site: http://www.concord.org
* Email: info@concord.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* END LICENSE */
package org.concord.swing;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* Description of the Class
*
*@author ed
*@created May 22, 2002
*/
public class ErrorDialog extends JDialog
implements ActionListener
{
/**
* Description of the Field
*/
protected JTextArea messageArea;
protected JTextArea exceptionText;
protected JTextArea expTraceArea;
protected JScrollPane expTraceScroll;
/**
* Description of the Field
*/
protected JPanel buttonPanel;
protected JPanel messagePanel;
/**
* Description of the Field
*/
protected JButton okButton;
protected JButton detailsButton;
protected GridBagLayout gridbag;
protected GridBagConstraints c;
protected Throwable detailException = null;
public static void showError(Frame frame, String message, Throwable t)
{
ErrorDialog eDialog = new ErrorDialog(frame, message, t, false);
eDialog.show();
}
public ErrorDialog(Frame frame, String message, boolean modal)
{
this(frame, message, null, modal);
}
/**
* Constructor for the ErrorDialog object
*
*@param frame Description of the Parameter
*@param message Description of the Parameter
*@param modal Description of the Parameter
*/
public ErrorDialog(Frame frame, String message, Throwable e, boolean modal)
{
super(frame, modal);
detailException = e;
initialize(message, e);
}
public ErrorDialog(Frame frame, boolean modal)
{
super(frame, modal);
}
protected void initialize(String message, Throwable e)
{
messageArea = new JTextArea(message);
messageArea.setEditable(false);
messageArea.setLineWrap(true);
messageArea.setWrapStyleWord(true);
messageArea.setOpaque(false);
okButton = new JButton("Ok");
buttonPanel = new JPanel();
buttonPanel.add(okButton);
gridbag = new GridBagLayout();
c = new GridBagConstraints();
messagePanel = new JPanel(gridbag);
c.gridwidth = GridBagConstraints.REMAINDER;
c.weighty = 0.5;
c.weightx = 1.0;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(3, 3, 3, 3);
gridbag.setConstraints(messageArea, c);
messagePanel.add(messageArea);
if(e != null){
exceptionText = new JTextArea(e.getMessage());
exceptionText.setEditable(false);
exceptionText.setLineWrap(true);
exceptionText.setWrapStyleWord(true);
exceptionText.setOpaque(false);
c.gridwidth = GridBagConstraints.RELATIVE;
c.weighty = 1.0;
gridbag.setConstraints(exceptionText, c);
messagePanel.add(exceptionText);
detailsButton = new JButton("Details");
detailsButton.addActionListener(this);
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.NONE;
gridbag.setConstraints(detailsButton, c);
messagePanel.add(detailsButton);
}
getContentPane().add(messagePanel, "Center");
getContentPane().add(buttonPanel, "South");
okButton.addActionListener(this);
setBounds(100, 100, 300, 180);
}
/**
* Description of the Method
*
*@param event Description of the Parameter
*/
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == okButton)
{
setVisible(false);
}
else if (event.getSource() == detailsButton)
{
if(expTraceArea != null)
{
return;
}
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
PrintWriter pw = new PrintWriter(outStream);
if(detailException != null)
{
detailException.printStackTrace(pw);
pw.flush();
expTraceArea = new JTextArea(outStream.toString());
}
else
{
expTraceArea = new JTextArea("Sorry no details availabe.");
}
expTraceArea.setEditable(false);
expTraceArea.setLineWrap(true);
expTraceArea.setWrapStyleWord(true);
expTraceScroll = new JScrollPane(expTraceArea);
c.gridwidth = GridBagConstraints.REMAINDER;
c.weighty = 1.5;
c.weightx = 1.0;
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(3, 3, 3, 3);
gridbag.setConstraints(expTraceScroll, c);
messagePanel.add(expTraceScroll);
detailsButton.setEnabled(false);
// messagePanel.validate();
setBounds(getLocation().x, getLocation().y, 600, 400);
validate();
}
}
}