psmith      2003/12/30 23:00:11

  Added:       src/java/org/apache/log4j/chainsaw/plugins
                        ChainsawCentral.java
  Log:
  Very rough check-in, but hopefully you can see where I am headed.
  
  This plugin will have a graph window of the rate of events arriving in the
  top right hand corner. (if you have seen GetRight's data transfer graph,
  that is idea I am borrowing).
  
  The message center is now within this panel.
  
  Revision  Changes    Path
  1.1                  
jakarta-log4j/src/java/org/apache/log4j/chainsaw/plugins/ChainsawCentral.java
  
  Index: ChainsawCentral.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package org.apache.log4j.chainsaw.plugins;
  
  import org.apache.log4j.Appender;
  import org.apache.log4j.chainsaw.ChainsawAppenderHandler;
  import org.apache.log4j.chainsaw.messages.MessageCenter;
  import org.apache.log4j.helpers.LogLog;
  
  import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.GridLayout;
  
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  
  import java.text.NumberFormat;
  
  import java.util.Enumeration;
  import java.util.LinkedList;
  
  import javax.swing.BorderFactory;
  import javax.swing.JComponent;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.SwingUtilities;
  
  
  /**
   * @author Paul Smith <[EMAIL PROTECTED]>
   */
  public class ChainsawCentral extends GUIPluginSkeleton {
    private final JLabel dataRateLabel = new JLabel();
    private final NumberFormat nf = NumberFormat.getNumberInstance();
    private ChainsawAppenderHandler handler;
    private LinkedList dataRateModel = new LinkedList();
  
    /**
     *
     */
    public ChainsawCentral() {
      super();
      setName("ChainsawCentral");
      initComponents();
    }
  
    /* (non-Javadoc)
     * @see org.apache.log4j.plugins.Plugin#shutdown()
     */
    public void shutdown() {
      // TODO Auto-generated method stub
    }
  
    /* (non-Javadoc)
     * @see org.apache.log4j.spi.OptionHandler#activateOptions()
     */
    public void activateOptions() {
      Enumeration enumeration =
        getLoggerRepository().getRootLogger().getAllAppenders();
  
      while (enumeration.hasMoreElements()) {
        Appender appender = (Appender) enumeration.nextElement();
  
        if (appender instanceof ChainsawAppenderHandler) {
          this.handler = (ChainsawAppenderHandler) appender;
  
          break;
        }
      }
  
      if (this.handler == null) {
        LogLog.error("Failed to find the ChainsawAppenderHandler");
      }
  
      this.handler.addPropertyChangeListener(
        "dataRate",
        new PropertyChangeListener() {
          public void propertyChange(PropertyChangeEvent evt) {
            final Double value = (Double) evt.getNewValue();
            addDataRateToModel(value);
            SwingUtilities.invokeLater(
              new Runnable() {
                public void run() {
                  dataRateLabel.setText(nf.format(value));
                }
              });
          }
        });
    }
  
    /**
     * @param double1
     */
    protected void addDataRateToModel(Double double1) {
      this.dataRateModel.add(double1);
    }
  
    /**
     *
     */
    private void initComponents() {
      setLayout(new GridLayout(2, 1));
      nf.setMaximumFractionDigits(1);
      nf.setMinimumFractionDigits(1);
  
      JPanel grid1 = new JPanel(new GridLayout(1, 2));
      grid1.add(new JLabel("Data Rate:"));
      grid1.add(dataRateLabel);
  
      RateGraph rateGraph = new RateGraph();
      rateGraph.setBorder(
        BorderFactory.createTitledBorder(
          BorderFactory.createEtchedBorder(), "Data Rate Graph"));
      grid1.add(rateGraph);
      add(grid1);
  
      JPanel mc = new JPanel(new BorderLayout());
      mc.setBorder(
        BorderFactory.createTitledBorder(
          BorderFactory.createEtchedBorder(), "Message Center"));
      mc.add(MessageCenter.getInstance().getGUIComponent(), BorderLayout.CENTER);
  
      add(mc);
    }
  
    private static class RateGraph extends JComponent {
      /**
      *
      */
      public RateGraph() {
        super();
        initCanvas();
      }
  
      private void initCanvas() {
        setBackground(Color.BLACK);
        setForeground(Color.RED);
        setOpaque(true);
      }
    }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to