Revision: 6592 Author: [email protected] Date: Mon Nov 2 13:33:37 2009 Log: Propagate log colors to lower-priority ancestors.
Patch by: jat Review by: bruce http://code.google.com/p/google-web-toolkit/source/detail?r=6592 Modified: /trunk/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java ======================================= --- /trunk/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java Wed Oct 28 10:56:52 2009 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java Mon Nov 2 13:33:37 2009 @@ -16,6 +16,7 @@ package com.google.gwt.dev.shell.log; import com.google.gwt.core.ext.TreeLogger; +import com.google.gwt.core.ext.TreeLogger.Type; import com.google.gwt.dev.shell.Icons; import com.google.gwt.dev.util.log.AbstractTreeLogger; @@ -25,6 +26,8 @@ import java.net.URL; import java.text.NumberFormat; import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.ExecutionException; import javax.swing.Icon; @@ -49,12 +52,26 @@ private static final Date firstLog = new Date(); private static NumberFormat minHr = NumberFormat.getIntegerInstance(); private static NumberFormat seconds = NumberFormat.getNumberInstance(); + private static final Map<Type, Color> logColors = new HashMap<Type, Color>(); + private static final Map<Type,Icon> logIcons = new HashMap<Type, Icon>(); static { seconds.setMinimumFractionDigits(3); seconds.setMaximumFractionDigits(3); seconds.setMinimumIntegerDigits(2); minHr.setMinimumIntegerDigits(2); + logColors.put(Type.ERROR, Color.RED); + logIcons.put(Type.ERROR, Icons.getLogItemError()); + logColors.put(Type.WARN, WARN_COLOR); + logIcons.put(Type.WARN, Icons.getLogItemWarning()); + logColors.put(Type.INFO, Color.BLACK); + logIcons.put(Type.INFO, Icons.getLogItemInfo()); + logColors.put(Type.TRACE, Color.DARK_GRAY); + logIcons.put(Type.TRACE, Icons.getLogItemTrace()); + logColors.put(Type.DEBUG, DEBUG_COLOR); + logIcons.put(Type.DEBUG, Icons.getLogItemDebug()); + logColors.put(Type.SPAM, SPAM_COLOR); + logIcons.put(Type.SPAM, Icons.getLogItemSpam()); } public final SwingTreeLogger childLogger; @@ -75,12 +92,18 @@ public final TreeLogger.Type type; + /** + * Maintains the highest priority of any child events. + */ + private Type inheritedPriority; + public LogEvent(SwingTreeLogger logger, boolean isBranchCommit, int index, Type type, String message, Throwable caught, HelpInfo helpInfo) { this.childLogger = logger; this.isBranchCommit = isBranchCommit; this.index = index; this.type = type; + this.inheritedPriority = type; this.message = message; this.helpInfo = helpInfo; this.timestamp = new Date(); @@ -132,6 +155,10 @@ } return sb.toString(); } + + public Type getInheritedPriority() { + return inheritedPriority; + } /** * Set the properties of a label to match this log entry. @@ -139,29 +166,12 @@ * @param treeLabel label to set properties for. */ public void setDisplayProperties(JLabel treeLabel) { - Icon image = null; - if (type == TreeLogger.ERROR) { - treeLabel.setForeground(Color.RED); - image = Icons.getLogItemError(); - } else if (type == TreeLogger.WARN) { - treeLabel.setForeground(WARN_COLOR); - image = Icons.getLogItemWarning(); - } else if (type == TreeLogger.INFO) { - treeLabel.setForeground(Color.BLACK); - image = Icons.getLogItemInfo(); - } else if (type == TreeLogger.TRACE) { - treeLabel.setForeground(Color.DARK_GRAY); - image = Icons.getLogItemTrace(); - } else if (type == TreeLogger.DEBUG) { - treeLabel.setForeground(DEBUG_COLOR); - image = Icons.getLogItemDebug(); - } else if (type == TreeLogger.SPAM) { - treeLabel.setForeground(SPAM_COLOR); - image = Icons.getLogItemSpam(); - } else { - // Messages without icons, ie ALL - treeLabel.setForeground(Color.BLACK); - } + Icon image = logIcons.get(type); + Color color = logColors.get(inheritedPriority); + if (color == null) { + color = Color.BLACK; + } + treeLabel.setForeground(color); treeLabel.setIcon(image); StringBuffer sb = new StringBuffer(); @@ -199,6 +209,21 @@ s += "]"; return s; } + + /** + * Update this log event's inherited priority, which is the highest priority + * of this event and any child events. + * + * @param inheritedPriority + * @return true if the priority was upgraded + */ + public boolean updateInheritedPriority(Type inheritedPriority) { + if (this.inheritedPriority.isLowerPriorityThan(inheritedPriority)) { + this.inheritedPriority = inheritedPriority; + return true; + } + return false; + } private void formatTimestamp(long ts, StringBuffer sb) { sb.append(minHr.format(ts / (1000 * 60 * 60))); @@ -293,6 +318,15 @@ if (event.type.needsAttention()) { panel.tree.makeVisible(new TreePath(node.getPath())); } + // Propagate our priority to our ancestors + Type priority = event.getInheritedPriority(); + while (parent != panel.treeModel.getRoot()) { + LogEvent parentEvent = (LogEvent) parent.getUserObject(); + if (!parentEvent.updateInheritedPriority(priority)) { + break; + } + parent = (DefaultMutableTreeNode) parent.getParent(); + } } catch (InterruptedException e) { // TODO(jat): Auto-generated catch block e.printStackTrace(); --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
