001: package com.calipso.reportgenerator.common;
002:
003: import com.calipso.reportgenerator.common.CalipsoException;
004:
005: import javax.swing.*;
006: import java.awt.event.ActionListener;
007: import java.awt.event.ActionEvent;
008: import java.awt.event.WindowAdapter;
009: import java.awt.event.WindowEvent;
010: import java.awt.*;
011: import java.util.ArrayList;
012: import java.util.Iterator;
013:
014: /**
015: * Despliga un mensaje de error
016: */
017:
018: public class ShowExceptionMessageDialog extends JDialog {
019: JPanel mainPanel;
020: JPanel topPanel;
021: JPanel centerPanel;
022: JButton hideDetailsButton;
023: JTextArea textField;
024: JScrollPane scrollPane;
025: private JLabel detalleLabel;
026: private JButton cancelBtn;
027: private JButton detalleBtn;
028: private JButton stackBtn;
029:
030: /**
031: * Inicializa un objeto ShowExceptionMessageDialog
032: * @param s
033: * @param e
034: */
035: public ShowExceptionMessageDialog(String s, Exception e) {
036: super (new JFrame(), true);
037: showExceptionMessage(s, e);
038: }
039:
040: /**
041: * Crea los componentes que componen el Dialog
042: */
043: private void initComponents(Exception e) {
044: setTitle(com.calipso.reportgenerator.common.LanguageTraslator
045: .traslate("231"));
046: getContentPane().add(getMainPanel(e));
047: setResizable(false);
048: addWindowListener(new WindowAdapter() {
049: public void windowOpened(WindowEvent e) {
050: setSize(getWidth(), getHeight()
051: - centerPanel.getHeight());
052: scrollPane.setVisible(false);
053: }
054: });
055: pack();
056: java.awt.Dimension screenSize = java.awt.Toolkit
057: .getDefaultToolkit().getScreenSize();
058: setSize(new java.awt.Dimension(400, 300));
059: setLocation((screenSize.width - 400) / 2,
060: (screenSize.height - 300) / 4);
061: }
062:
063: /**
064: * Retorna el panel principal del Dialog
065: * @return
066: */
067: private JPanel getMainPanel(Exception e) {
068: JPanel xTopPanel = getTopPanel(e);
069: JPanel xCenterPanel = getCenterPanel();
070: mainPanel = new JPanel(new BorderLayout());
071: mainPanel.add(xTopPanel, BorderLayout.NORTH);
072: mainPanel.add(xCenterPanel, BorderLayout.CENTER);
073: return mainPanel;
074: }
075:
076: /**
077: * Retorna el Panel que contiene el JTextArea ubicado en la seccion central del panel principal
078: * @return
079: */
080: private JPanel getCenterPanel() {
081: centerPanel = new JPanel(new BorderLayout());
082: textField = new JTextArea();
083: scrollPane = new JScrollPane();
084: textField.setEditable(false);
085: scrollPane.getViewport().add(textField);
086: centerPanel.add(scrollPane, BorderLayout.CENTER);
087: return centerPanel;
088: }
089:
090: /**
091: * Retorna el panel ubicado al norte del panel principal
092: * @return
093: */
094: private JPanel getTopPanel(final Exception e) {
095: detalleBtn = new JButton();
096: cancelBtn = new JButton();
097: stackBtn = new JButton();
098: topPanel = new JPanel(null);
099: topPanel.setPreferredSize(new Dimension(400, 200));
100: detalleBtn.addActionListener(new ActionListener() {
101: public void actionPerformed(ActionEvent e) {
102: boolean value = scrollPane.isVisible();
103: if (value) {
104: setSize(getWidth(), getHeight()
105: - centerPanel.getHeight());
106: stackBtn.setVisible(false);
107: } else {
108: setSize(getWidth(), getHeight()
109: + centerPanel.getHeight());
110: stackBtn.setVisible(true);
111: }
112: scrollPane.setVisible(!value);
113:
114: }
115: });
116: cancelBtn.addActionListener(new ActionListener() {
117: public void actionPerformed(ActionEvent e) {
118: setVisible(false);
119: dispose();
120: }
121: });
122:
123: stackBtn.addActionListener(new ActionListener() {
124: public void actionPerformed(ActionEvent evt) {
125: ShowExceptionStackTrace.showStackTrace(e);
126: }
127: });
128:
129: detalleLabel = new JLabel();
130: getContentPane().add(detalleLabel);
131: detalleLabel.setText("222");
132: detalleLabel.setBounds(8, 65, 382, 16);
133:
134: cancelBtn
135: .setText(com.calipso.reportgenerator.common.LanguageTraslator
136: .traslate("112"));
137: getContentPane().add(cancelBtn);
138: cancelBtn.setBounds(306, 168, 85, 26);
139:
140: detalleBtn
141: .setText(com.calipso.reportgenerator.common.LanguageTraslator
142: .traslate("230"));
143: getContentPane().add(detalleBtn);
144: detalleBtn.setBounds(216, 168, 81, 26);
145:
146: stackBtn.setText("Stack");
147: getContentPane().add(stackBtn);
148: stackBtn.setBounds(126, 168, 81, 26);
149: stackBtn.setVisible(false);
150: return topPanel;
151: }
152:
153: /**
154: * Crea y carga y visualiza el Componente
155: * @param code
156: * @param e
157: */
158: public static void initExceptionDialogMessage(String code,
159: Exception e) {
160: new ShowExceptionMessageDialog(code, e);
161:
162: }
163:
164: /**
165: * Agrega al JTextField todos los mensajes de la Exceptions que ocurrieron
166: * @param code
167: * @param e
168: */
169: private void showExceptionMessage(String code, Exception e) {
170: ArrayList list = new ArrayList();
171: fillCauses(e, list);
172: initComponents(e);
173: detalleLabel.setText(code);
174: Iterator iterator = list.iterator();
175: while (iterator.hasNext()) {
176: String s = (String) iterator.next();
177: if (s != null) {
178: textField.append(s + "\n");
179: }
180: }
181:
182: setVisible(true);
183: }
184:
185: /**
186: * Carga las causas por las cuales ocurrieron las distintas Exceptions
187: * @param e
188: * @param list
189: */
190: private void fillCauses(Throwable e, ArrayList list) {
191: list.add(e.getMessage());
192: if (e instanceof CalipsoException) {
193: Throwable subE = e.getCause();
194: if (subE != null && e != subE) {
195: fillCauses(subE, list);
196: }
197: }
198: }
199: }
|