001: /*
002: * Copyright 2001-2006 C:1 Financial Services GmbH
003: *
004: * This software is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License Version 2.1, as published by the Free Software Foundation.
007: *
008: * This software is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, write to the Free Software
015: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
016: */
017:
018: package de.finix.contelligent.client.modules.log;
019:
020: import java.awt.Color;
021: import java.awt.event.MouseAdapter;
022: import java.awt.event.MouseEvent;
023:
024: import javax.swing.JTable;
025: import javax.swing.table.DefaultTableCellRenderer;
026: import javax.swing.table.TableModel;
027:
028: import de.finix.contelligent.client.event.LogEvent;
029: import de.finix.contelligent.client.i18n.Resources;
030:
031: public class LogTable extends JTable {
032:
033: public LogTable(TableModel tm) {
034: super (tm);
035: setDefaultRenderer(Object.class, new FolderRenderer());
036: setDefaultRenderer(LogEvent.class, new FolderRenderer());
037:
038: addMouseListener(new MouseAdapter() {
039: public void mouseClicked(MouseEvent e) {
040: if ((e.getButton() == MouseEvent.BUTTON1)
041: && (e.getClickCount() == 2)) {
042: int row = rowAtPoint(e.getPoint());
043: LogEvent le = (LogEvent) getModel().getValueAt(row,
044: 0);
045: StringBuffer details = new StringBuffer();
046: details.append("Timestamp: ");
047: details.append(le.getTimestamp());
048: details.append("\n\nLevel: ");
049: details.append(le.getLevel());
050: details.append("\n\nLogger method: ");
051: details.append(le.getCallerClass());
052: details.append(".");
053: details.append(le.getCallerMethod());
054: details.append("\n\nLogger location: ");
055: details.append(le.getCallerFile());
056: details.append(":");
057: details.append(le.getCallerLine());
058: details.append("\n\nMessage: ");
059: details.append(le.getMessage());
060: if (le.getThrowable() != null) {
061: details.append("\n\nThrowable: ");
062: details.append(le.getThrowable());
063: }
064: if (le.getStackTrace() != null) {
065: details.append("\n\nStacktrace: ");
066: details.append(le.getStackTrace());
067: }
068: LogDetailDialog.show(details.toString());
069: }
070: }
071: });
072:
073: }
074:
075: class FolderRenderer extends DefaultTableCellRenderer {
076: Color defaultBackground, defaultForeground;
077:
078: protected static final String TRANSFORMER_TF_PREFIX = "javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: ";
079:
080: protected static final String TRANSFORMER_SAX_PREFIX = "javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: ";
081:
082: public FolderRenderer() {
083: super ();
084: defaultBackground = getBackground();
085: defaultForeground = getForeground();
086: }
087:
088: public java.awt.Component getTableCellRendererComponent(
089: JTable table, Object object, boolean isSelected,
090: boolean hasFocus, int row, int column) {
091: setFont(table.getFont());
092: setOpaque(true);
093: if (object instanceof LogEvent) {
094: LogEvent le = (LogEvent) object;
095: String throwable = le.getThrowable();
096: if (throwable == null) {
097: throwable = "";
098: }
099: setText("");
100: setIcon(null);
101: setBackground(defaultBackground);
102: setForeground(defaultForeground);
103: if (column == 0) {
104: setText(le.getTimestamp());
105: if (le
106: .getCallerClass()
107: .equals(
108: "de.c1fse.interp.CInterpreter$TclTemplateRenderer")
109: || le.getCallerClass().equals(
110: "de.c1fse.interp.commands.LogCmd")) {
111: // Special icon to help find TCL error messages
112: setIcon(Resources.logModuleTcl);
113: } else if (le.getOriginType().equals("self")) {
114: setIcon(Resources.logModuleClient);
115: } else {
116: setIcon(Resources.logModulePreview);
117: }
118: } else if (column == 1) {
119: setText(le.getLevel());
120: } else if (column == 2) {
121: if (le
122: .getCallerClass()
123: .equals(
124: "de.finix.contelligent.render.TransformerRenderer")
125: && throwable
126: .startsWith(TRANSFORMER_TF_PREFIX)) {
127: setText(throwable
128: .substring(TRANSFORMER_TF_PREFIX
129: .length()));
130: } else if (le
131: .getCallerClass()
132: .equals(
133: "de.finix.contelligent.render.TransformerRenderer")
134: && throwable
135: .startsWith(TRANSFORMER_SAX_PREFIX)) {
136: setText(throwable
137: .substring(TRANSFORMER_SAX_PREFIX
138: .length()));
139: } else {
140: if (le.getMessage().equals(
141: "Exception while executing action: ")) {
142: setText(throwable);
143: } else {
144: setText(le.getMessage() + " " + throwable);
145: }
146: }
147: } else if (column == 3) {
148: setText("");
149: if (le.getStackTrace() != null) {
150: setIcon(Resources.ledOn);
151: }
152: } else if (column == 4) {
153: setText(le.getCallerFile() + ":"
154: + le.getCallerLine());
155: }
156: } else {
157: setText(object.toString());
158: }
159: if (isSelected) {
160: setBackground(getSelectionBackground());
161: setForeground(getSelectionForeground());
162: setBorder(null);
163: } else {
164: setBackground(defaultBackground);
165: setForeground(defaultForeground);
166: setBorder(null);
167: }
168: return this;
169: }
170: }
171: }
|