psmith 2003/09/04 23:11:11 Modified: src/java/org/apache/log4j/chainsaw ReceiverTreeCellRenderer.java ReceiversPanel.java ReceiversTreeModel.java Log: Changed the way Receivers and thresholds are displayed/managed within the Receiver panel. The Threshold of the receiver is displayed via an icon, and can be modified directly via a popup menu. Revision Changes Path 1.3 +53 -15 jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiverTreeCellRenderer.java Index: ReceiverTreeCellRenderer.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiverTreeCellRenderer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ReceiverTreeCellRenderer.java 28 Aug 2003 23:56:57 -0000 1.2 +++ ReceiverTreeCellRenderer.java 5 Sep 2003 06:11:11 -0000 1.3 @@ -49,20 +49,25 @@ package org.apache.log4j.chainsaw; -import org.apache.log4j.chainsaw.icons.ChainsawIcons; -import org.apache.log4j.net.AddressBased; -import org.apache.log4j.net.NetworkBased; -import org.apache.log4j.net.PortBased; -import org.apache.log4j.plugins.Pauseable; - +import java.awt.BorderLayout; import java.awt.Component; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; +import org.apache.log4j.chainsaw.icons.ChainsawIcons; +import org.apache.log4j.chainsaw.icons.LevelIconFactory; +import org.apache.log4j.net.AddressBased; +import org.apache.log4j.net.NetworkBased; +import org.apache.log4j.net.PortBased; +import org.apache.log4j.plugins.Pauseable; +import org.apache.log4j.spi.Thresholdable; + /** * A TreeCellRenderer that can format the information of Receivers @@ -76,9 +81,15 @@ private Icon inactiveReceiverIcon = new ImageIcon(ChainsawIcons.ICON_INACTIVE_RECEIVER); private Icon rootIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT); + private JPanel panel = new JPanel(); + private JLabel levelLabel = new JLabel(); public ReceiverTreeCellRenderer() { super(); + panel.setOpaque(false); + panel.setLayout(new BorderLayout()); + panel.add(this, BorderLayout.CENTER); + panel.add(levelLabel, BorderLayout.WEST); } public Component getTreeCellRendererComponent( @@ -90,8 +101,9 @@ DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; Object o = node.getUserObject(); setText(o.toString()); + String tooltip = ""; - + /** * Deal with Text */ @@ -110,9 +122,18 @@ buf.append("::").append(portBased.getPort()); } - buf.append(" ").append("(") - .append(networkBased.isActive() ? "active" : "inactive").append(")"); + buf.append("\n ").append("(").append( + networkBased.isActive() ? "active" : "inactive"); + if (o instanceof Thresholdable) { + Thresholdable t = (Thresholdable) o; + + if (t.getThreshold() != null) { + buf.append(",").append(t.getThreshold()); + } + } + + buf.append(")"); setText(buf.toString()); } else if ( o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) { @@ -133,13 +154,11 @@ if (networkBased.isActive()) { if ((o instanceof Pauseable) && !((Pauseable) o).isPaused()) { setIcon(activeReceiverIcon); - tooltip +="This item is active, and can be paused"; - } - else if ((o instanceof Pauseable) && ((Pauseable) o).isPaused()) { + tooltip += "This item is active, and can be paused"; + } else if ((o instanceof Pauseable) && ((Pauseable) o).isPaused()) { setIcon(inactiveReceiverIcon); tooltip += "This item is paused, and can be resumed"; - } - else { + } else { setIcon(null); tooltip += " This item cannot be Paused/Resumed"; } @@ -149,7 +168,26 @@ o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) { setIcon(rootIcon); } + + levelLabel.setText(null); + levelLabel.setIcon(null); + + if (o instanceof Thresholdable) { + Thresholdable t = (Thresholdable) o; + + if (t.getThreshold() != null) { + levelLabel.setIcon( + (Icon) LevelIconFactory.getInstance().getLevelToIconMap().get( + t.getThreshold().toString())); + + if (levelLabel.getIcon() == null) { + levelLabel.setText(t.getThreshold().toString()); + } + } + } + setToolTipText(tooltip); - return this; + + return panel; } } 1.10 +92 -92 jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java Index: ReceiversPanel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ReceiversPanel.java 3 Sep 2003 23:22:09 -0000 1.9 +++ ReceiversPanel.java 5 Sep 2003 06:11:11 -0000 1.10 @@ -49,6 +49,23 @@ package org.apache.log4j.chainsaw; +import org.apache.log4j.Level; +import org.apache.log4j.LogManager; +import org.apache.log4j.chainsaw.icons.ChainsawIcons; +import org.apache.log4j.chainsaw.icons.LevelIconFactory; +import org.apache.log4j.chainsaw.icons.LineIconFactory; +import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.net.SocketAppender; +import org.apache.log4j.net.SocketHubAppender; +import org.apache.log4j.net.SocketHubReceiver; +import org.apache.log4j.net.SocketNodeEventListener; +import org.apache.log4j.net.SocketReceiver; +import org.apache.log4j.net.UDPAppender; +import org.apache.log4j.net.UDPReceiver; +import org.apache.log4j.plugins.Pauseable; +import org.apache.log4j.plugins.PluginRegistry; +import org.apache.log4j.plugins.Receiver; + import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -60,11 +77,16 @@ import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; + import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; + import java.io.IOException; + import java.lang.reflect.Method; + import java.net.URL; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -79,9 +101,11 @@ import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.Box; +import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.InputVerifier; import javax.swing.JButton; +import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JEditorPane; @@ -104,22 +128,6 @@ import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; -import org.apache.log4j.Level; -import org.apache.log4j.LogManager; -import org.apache.log4j.chainsaw.icons.ChainsawIcons; -import org.apache.log4j.chainsaw.icons.LineIconFactory; -import org.apache.log4j.helpers.LogLog; -import org.apache.log4j.net.SocketAppender; -import org.apache.log4j.net.SocketHubAppender; -import org.apache.log4j.net.SocketHubReceiver; -import org.apache.log4j.net.SocketNodeEventListener; -import org.apache.log4j.net.SocketReceiver; -import org.apache.log4j.net.UDPAppender; -import org.apache.log4j.net.UDPReceiver; -import org.apache.log4j.plugins.Pauseable; -import org.apache.log4j.plugins.PluginRegistry; -import org.apache.log4j.plugins.Receiver; - /** * This panel is used to manage all the Receivers configured within Log4j @@ -478,7 +486,7 @@ } /** - * Sets the state of actions depending on certain conditions (i.e what is + * Sets the state of actions depending on certain conditions (i.e what is * currently selected etc.) */ private void updateActions() { @@ -534,34 +542,34 @@ class NewReceiverPopupMenu extends JPopupMenu { NewReceiverPopupMenu() { try { - final List dialogMapEntryList = createSortedDialogMapEntryList(); String separatorCheck = null; + for (Iterator iter = dialogMapEntryList.iterator(); iter.hasNext();) { final Map.Entry entry = (Entry) iter.next(); final Class toCreate = (Class) entry.getKey(); Package thePackage = toCreate.getPackage(); final String name = toCreate.getName().substring(thePackage.getName().length() + 1); - - if(separatorCheck==null) - { - separatorCheck = name.substring(0,1); - }else{ - String current = name.substring(0,1); - if(!current.equals(separatorCheck)) - { + + if (separatorCheck == null) { + separatorCheck = name.substring(0, 1); + } else { + String current = name.substring(0, 1); + + if (!current.equals(separatorCheck)) { addSeparator(); separatorCheck = current; } } + add( new AbstractAction("New " + name + "...") { public void actionPerformed(ActionEvent e) { - JDialog dialog = (JDialog) entry.getValue(); - dialog.pack(); - dialog.setLocationRelativeTo(logui); - dialog.show(); + JDialog dialog = (JDialog) entry.getValue(); + dialog.pack(); + dialog.setLocationRelativeTo(logui); + dialog.show(); } }); } @@ -583,60 +591,56 @@ } } - /** - * Creates a Map of Class->CreateReceiverDialog instances - * which are all the Receivers that can be created via the GUI - * @return - * @throws IOException - */ - private List createSortedDialogMapEntryList() throws IOException - { + /** + * Creates a Map of Class->CreateReceiverDialog instances + * which are all the Receivers that can be created via the GUI + * @return + * @throws IOException + */ + private List createSortedDialogMapEntryList() throws IOException { final Map dialogMap = new HashMap(); dialogMap.put( SocketReceiver.class, new CreateReceiverDialog( SocketReceiver.class, "SocketReceiver", "Socket Receiver", new SimplePortBasedReceiverDialogPanel( - SocketReceiver.class, "SocketReceiver", - SocketAppender.DEFAULT_PORT))); + SocketReceiver.class, "SocketReceiver", SocketAppender.DEFAULT_PORT))); dialogMap.put( SocketHubReceiver.class, new CreateReceiverDialog( - SocketHubReceiver.class, "SocketHubReceiver", "Socket Hub Receiver", + SocketHubReceiver.class, "SocketHubReceiver", "Socket Hub Receiver", new SimplePortBasedReceiverDialogPanel( - SocketHubReceiver.class, "SocketHubReceiver", + SocketHubReceiver.class, "SocketHubReceiver", SocketHubAppender.DEFAULT_PORT))); - + dialogMap.put( UDPReceiver.class, new CreateReceiverDialog( UDPReceiver.class, "UDPReceiver", "UDP Receiver", new SimplePortBasedReceiverDialogPanel( UDPReceiver.class, "UDPReceiver", UDPAppender.DEFAULT_PORT))); - + List dialogMapEntryList = new ArrayList(); - - for (Iterator iter = dialogMap.entrySet().iterator(); iter.hasNext();) - { + + for (Iterator iter = dialogMap.entrySet().iterator(); iter.hasNext();) { dialogMapEntryList.add(iter.next()); } /** * Sort so it's in Alpha order by map.entry key - */ - Collections.sort(dialogMapEntryList, new Comparator(){ + */ + Collections.sort( + dialogMapEntryList, + new Comparator() { + public int compare(Object o1, Object o2) { + Comparable c1 = ((Class) ((Entry) o1).getKey()).getName(); + Comparable c2 = ((Class) ((Entry) o2).getKey()).getName(); - public int compare(Object o1, Object o2) - { - Comparable c1 = ((Class)((Entry) o1).getKey()).getName(); - Comparable c2 = ((Class)((Entry) o2).getKey()).getName(); - - return c1.compareTo(c2); + return c1.compareTo(c2); + } + }); - } - - }); return dialogMapEntryList; } } @@ -703,8 +707,37 @@ add(shutdownReceiverButtonAction); addSeparator(); add(editReceiverButtonAction); + addSeparator(); + + final Receiver r = getCurrentlySelectedReceiver(); + add(createLevelCheckBoxMenuItem(r, Level.DEBUG)); + add(createLevelCheckBoxMenuItem(r, Level.INFO)); + add(createLevelCheckBoxMenuItem(r, Level.WARN)); + add(createLevelCheckBoxMenuItem(r, Level.ERROR)); + addSeparator(); + add(createLevelCheckBoxMenuItem(r, Level.OFF)); + add(createLevelCheckBoxMenuItem(r, Level.ALL)); + } + + private JCheckBoxMenuItem createLevelCheckBoxMenuItem(final Receiver r, final Level l) { + Map levelIconMap = LevelIconFactory.getInstance().getLevelToIconMap(); + + Action action = new AbstractAction(l.toString(),(Icon)levelIconMap.get(l.toString())){ + + public void actionPerformed(ActionEvent e) { + if(r!=null){ + r.setThreshold(l); + updateCurrentlySelectedNodeInDispatchThread(); + } + } + }; + JCheckBoxMenuItem item = new JCheckBoxMenuItem(action); + item.setSelected(r.getThreshold() == l); + return item; + } + /** * Builds a relevant set of menus for when the Root node in the Receiver * tree has been selected @@ -718,40 +751,6 @@ addSeparator(); add(startAll); - - final JDialog dialog = new JDialog(logui, "Set Threshold", true); - Container container = dialog.getContentPane(); - final ThresholdSlider thresholdSlider = new ThresholdSlider(); - thresholdSlider.getModel().addChangeListener( - new ChangeListener() { - public void stateChanged(ChangeEvent e) { - if (thresholdSlider.getValueIsAdjusting()) { - return; - } - - Level level = thresholdSlider.getSelectedLevel(); - LogManager.getLoggerRepository().setThreshold(level); - logui.getStatusBar().setMessage( - "Adjusted Log4j repository threshold to " + level); - getReceiverTreeModel().updateRootDisplay(); - } - }); - - container.add(thresholdSlider); - dialog.setResizable(false); - dialog.pack(); - - Action setThresholdAction = - new AbstractAction("Set Threshold...") { - public void actionPerformed(ActionEvent e) { - thresholdSlider.setChosenLevel( - LogManager.getLoggerRepository().getThreshold()); - dialog.setLocationRelativeTo(receiversTree); - dialog.show(); - } - }; - - add(setThresholdAction); } private JMenuItem createNotDoneYet() { @@ -1148,6 +1147,7 @@ } receiver.setName(name + suffix); + receiver.setThreshold(Level.DEBUG); PluginRegistry.startPlugin(receiver); updateReceiverTreeInDispatchThread(); } 1.3 +6 -7 jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversTreeModel.java Index: ReceiversTreeModel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversTreeModel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ReceiversTreeModel.java 27 Jun 2003 03:25:23 -0000 1.2 +++ ReceiversTreeModel.java 5 Sep 2003 06:11:11 -0000 1.3 @@ -49,17 +49,17 @@ package org.apache.log4j.chainsaw; -import org.apache.log4j.LogManager; -import org.apache.log4j.net.SocketReceiver; -import org.apache.log4j.plugins.PluginRegistry; -import org.apache.log4j.plugins.Receiver; - import java.util.Collection; import java.util.Iterator; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; +import org.apache.log4j.LogManager; +import org.apache.log4j.net.SocketReceiver; +import org.apache.log4j.plugins.PluginRegistry; +import org.apache.log4j.plugins.Receiver; + /** * A TreeModel that encapsulates the details of all the Receivers and their @@ -126,8 +126,7 @@ */ void updateRootDisplay() { getRootNode().setUserObject( - ROOTNODE_LABEL + " (" + LogManager.getLoggerRepository().getThreshold() - + ")"); + ROOTNODE_LABEL ); nodeChanged(getRootNode()); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]