psmith 2003/09/02 22:50:02
Modified: src/java/org/apache/log4j/chainsaw LogUI.java
Log:
* refactored Pause functionality
* Change from Vector -> LoggingEvent
* Event Detail and Tooltip now rendered by a Layout class.
Revision Changes Path
1.16 +151 -63 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java
Index: LogUI.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- LogUI.java 3 Sep 2003 00:44:55 -0000 1.15
+++ LogUI.java 3 Sep 2003 05:50:01 -0000 1.16
@@ -49,6 +49,8 @@
package org.apache.log4j.chainsaw;
+import org.apache.log4j.HTMLLayout;
+import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Priority;
@@ -64,6 +66,8 @@
import org.apache.log4j.net.SocketReceiver;
import org.apache.log4j.plugins.PluginRegistry;
import org.apache.log4j.plugins.Receiver;
+import org.apache.log4j.spi.LocationInfo;
+import org.apache.log4j.spi.LoggingEvent;
import java.awt.BorderLayout;
import java.awt.Component;
@@ -207,7 +211,8 @@
private ChainsawStatusBar statusBar;
private final Map tableModelMap = new HashMap();
private final Map tableMap = new HashMap();
- final List pausedList = new Vector();
+
+ // final List pausedList = new Vector();
private final List filterableColumns = new ArrayList();
private final Map entryMap = new HashMap();
private final Map panelMap = new HashMap();
@@ -307,6 +312,14 @@
* @param args
*/
public static void main(String[] args) {
+
+// TODO remove this when ready
+ JOptionPane.showMessageDialog(
+ null,
+ "Chainsaw v2 is currently going through some refactoring work at
present.\n\n" +
+ "Some features, most notably filtering and colouring, may be inoperable at
this time.\n\n" +
+ "The Log4J Dev team apologises for this inconvenience, but be assured this
functionality will be back very shortly.", "Apologise", JOptionPane.WARNING_MESSAGE);
+
showSplash();
LogUI logUI = new LogUI();
@@ -1095,6 +1108,11 @@
}
}
+ /**
+ * notify the status bar we received an event
+ */
+ statusBar.receivedEvent();
+
if (tableModelMap.containsKey(ident)) {
/**
* we ignore this since we assume the LogPanel has been registered itself a
listener
@@ -1148,6 +1166,7 @@
*/
class LogPanel extends DockablePanel implements SettingsListener,
EventBatchListener {
+ private boolean paused = false;
final ColorFilter colorFilter = new ColorFilter();
final DisplayFilter displayFilter;
final EventContainer tableModel;
@@ -1177,6 +1196,8 @@
ScrollToBottom scrollToBottom;
private final LogPanelLoggerTreeModel logTreeModel =
new LogPanelLoggerTreeModel();
+ private Layout detailPaneLayout = new EventDetailLayout();
+ private Layout toolTipLayout = new EventDetailLayout();
//used for consistency - stays empty - used to allow none set in the
colordisplay selector and right click
Set noneSet = new HashSet();
@@ -1284,7 +1305,7 @@
thisItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
- Vector lastSelected = null;
+ LoggingEvent lastSelected = null;
if (table.getSelectedRow() > -1) {
lastSelected = tableModel.getRow(table.getSelectedRow());
@@ -1319,7 +1340,7 @@
thisItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
- Vector lastSelected = null;
+ LoggingEvent lastSelected = null;
if (table.getSelectedRow() > -1) {
lastSelected = tableModel.getRow(table.getSelectedRow());
@@ -1368,8 +1389,15 @@
currentRow = row;
- table.setToolTipText(
- ((EventContainer) table.getModel()).getDetailText(row));
+ LoggingEvent event = tableModel.getRow(currentRow);
+ Layout layout = getToolTipLayout();
+
+ if (event != null) {
+ StringBuffer buf = new StringBuffer();
+ buf.append(layout.getHeader()).append(layout.format(event))
+ .append(layout.getFooter());
+ table.setToolTipText(buf.toString());
+ }
} else {
table.setToolTipText(null);
}
@@ -1457,7 +1485,7 @@
override.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
- Vector lastSelected = null;
+ LoggingEvent lastSelected = null;
if (table.getSelectedRow() > -1) {
lastSelected = tableModel.getRow(table.getSelectedRow());
@@ -1555,7 +1583,7 @@
nameTreeAndMainPanelSplit.add(lowerPanel);
nameTreeAndMainPanelSplit.setOneTouchExpandable(true);
nameTreeAndMainPanelSplit.setToolTipText("Still under development....");
- nameTreeAndMainPanelSplit.setDividerLocation(160);
+ nameTreeAndMainPanelSplit.setDividerLocation(-1);
add(nameTreeAndMainPanelSplit, BorderLayout.CENTER);
@@ -1880,6 +1908,23 @@
f.pack();
}
+ /**
+ * @return
+ */
+ public boolean isPaused() {
+ return paused;
+ }
+
+ /**
+ * Modifies the Paused property and notifies the listeners
+ * @param paused
+ */
+ public void setPaused(boolean paused) {
+ boolean oldValue = this.paused;
+ this.paused = paused;
+ firePropertyChange("paused", oldValue, paused);
+ }
+
void updateStatusBar() {
SwingUtilities.invokeLater(
new Runnable() {
@@ -2243,10 +2288,17 @@
* @see
org.apache.log4j.chainsaw.EventBatchListener#receiveEventBatch(java.lang.String,
java.util.List)
*/
public void receiveEventBatch(String identifier, List eventBatchEntrys) {
+ /**
+ * if this panel is paused, we totally ignore events
+ */
+ if (isPaused()) {
+ return;
+ }
+
table.getSelectionModel().setValueIsAdjusting(true);
boolean rowAdded = false;
- Vector lastSelected = null;
+ LoggingEvent lastSelected = null;
if (table.getSelectedRow() > -1) {
lastSelected = tableModel.getRow(table.getSelectedRow());
@@ -2255,63 +2307,14 @@
for (Iterator iter = eventBatchEntrys.iterator(); iter.hasNext();) {
ChainsawEventBatchEntry entry = (ChainsawEventBatchEntry) iter.next();
- Vector v = formatFields(entry.getEventVector());
-
+ // Vector v = formatFields(entry.getEventVector());
final String eventType = entry.getEventType();
- String level =
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.LEVEL_COL_NAME)).toString();
-
- //add the level to the appropriate list if it didn't previously exist
- if (!((List) levelMap.get(eventType)).contains(level)) {
- ((List) levelMap.get(eventType)).add(level);
- }
-
- Map map = (HashMap) entryMap.get(getIdentifier());
-
- //also add it to the unique values list
- ((Set) map.get(ChainsawConstants.LEVEL_COL_NAME)).add(level);
-
- Object loggerName =
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.LOGGER_COL_NAME));
- ((Set) map.get(ChainsawConstants.LOGGER_COL_NAME)).add(loggerName);
- /**
- * EventContainer is a LoggerNameModel imp, use that for notifing
- */
- tableModel.addLoggerName(loggerName.toString());
+ updateEntryMap(entry);
- ((Set) map.get(ChainsawConstants.THREAD_COL_NAME)).add(
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.THREAD_COL_NAME)));
- ((Set) map.get(ChainsawConstants.NDC_COL_NAME)).add(
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.NDC_COL_NAME)));
- ((Set) map.get(ChainsawConstants.MDC_COL_NAME)).add(
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.MDC_COL_NAME)));
- ((Set) map.get(ChainsawConstants.CLASS_COL_NAME)).add(
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.CLASS_COL_NAME)));
- ((Set) map.get(ChainsawConstants.METHOD_COL_NAME)).add(
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.METHOD_COL_NAME)));
- ((Set) map.get(ChainsawConstants.FILE_COL_NAME)).add(
- v.get(
- ChainsawColumns.getColumnsNames().indexOf(
- ChainsawConstants.FILE_COL_NAME)));
-
- boolean isCurrentRowAdded = tableModel.isAddRow(v, true);
+ boolean isCurrentRowAdded =
+ tableModel.isAddRow(entry.getEvent(), true);
rowAdded = rowAdded ? true : isCurrentRowAdded;
- statusBar.receivedEvent();
}
table.getSelectionModel().setValueIsAdjusting(false);
@@ -2334,6 +2337,84 @@
}
}
}
+
+ /**
+ * ensures the Entry map of all the unque logger names etc, that is used for
the Filter panel is
+ * updated with any new information from the event
+ * @param v
+ * @param eventType
+ * @param level
+ */
+ private void updateEntryMap(ChainsawEventBatchEntry entry) {
+ LoggingEvent event = entry.getEvent();
+ String eventType = entry.getEventType();
+ String level = event.getLevel().toString();
+
+ //add the level to the appropriate list if it didn't previously exist
+ if (!((List) levelMap.get(eventType)).contains(level)) {
+ ((List) levelMap.get(eventType)).add(level);
+ }
+
+ Map map = (HashMap) entryMap.get(getIdentifier());
+
+ // TODO fix up this Set Cast-O-Rama
+ //also add it to the unique values list
+ ((Set) map.get(ChainsawConstants.LEVEL_COL_NAME)).add(level);
+
+ Object loggerName = event.getLoggerName();
+ ((Set) map.get(ChainsawConstants.LOGGER_COL_NAME)).add(loggerName);
+
+ /**
+ * EventContainer is a LoggerNameModel imp, use that for notifing
+ */
+ tableModel.addLoggerName(loggerName.toString());
+
+ ((Set) map.get(ChainsawConstants.THREAD_COL_NAME)).add(
+ event.getThreadName());
+ ((Set) map.get(ChainsawConstants.NDC_COL_NAME)).add(event.getNDC());
+
+ // TODO MDC event stuff is not being output correctly
+ ((Set) map.get(ChainsawConstants.MDC_COL_NAME)).add(
+ event.getMDCKeySet());
+
+ if (event.getLocationInformation() != null) {
+ LocationInfo info = event.getLocationInformation();
+ ((Set) map.get(ChainsawConstants.CLASS_COL_NAME)).add(
+ info.getClassName());
+ ((Set) map.get(ChainsawConstants.METHOD_COL_NAME)).add(
+ info.getMethodName());
+ ((Set) map.get(ChainsawConstants.FILE_COL_NAME)).add(
+ info.getFileName());
+ }
+ }
+
+ /**
+ * @return
+ */
+ public final Layout getDetailPaneLayout() {
+ return detailPaneLayout;
+ }
+
+ /**
+ * @param detailPaneLayout
+ */
+ public final void setDetailPaneLayout(Layout detailPaneLayout) {
+ this.detailPaneLayout = detailPaneLayout;
+ }
+
+ /**
+ * @return
+ */
+ public final Layout getToolTipLayout() {
+ return toolTipLayout;
+ }
+
+ /**
+ * @param toolTipLayout
+ */
+ public final void setToolTipLayout(Layout toolTipLayout) {
+ this.toolTipLayout = toolTipLayout;
+ }
}
class TableColumnData implements Serializable {
@@ -2409,8 +2490,15 @@
if (selectedRow == -1) {
text = "Nothing selected";
} else {
- // TODO refactor to use a single getEvent(row) call, and use a
Formatter interface for pluggable formatting
- text = model.getDetailText(selectedRow);
+ LoggingEvent event = model.getRow(selectedRow);
+
+ if (event != null) {
+ Layout layout = panel.getDetailPaneLayout();
+ StringBuffer buf = new StringBuffer();
+ buf.append(layout.getHeader()).append(layout.format(event)).append(
+ layout.getFooter());
+ text = buf.toString();
+ }
}
if (!((text != null) && !text.equals(""))) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]