/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.management.j2ee.statistics;

import javax.management.j2ee.statistics.Statistic;
import java.io.Serializable;

/**
 * JBoss Implementation of the base Model for a Statistic Information
 *
 * @author Marc Fleury
 * @author Scott.Stark@jboss.org
 * @version $Revision: 1.1.2.4 $
 */
public abstract class StatisticImpl
        implements Statistic, Serializable
{
   // Constants -----------------------------------------------------
   
   /** @since 4.0.2 */
   private static final long serialVersionUID = -3427364348020739916L;
   
   // Attributes ----------------------------------------------------
   protected String name;
   protected String units;
   protected String description;
   protected long startTime;
   protected long lastSampleTime;

   // Static --------------------------------------------------------

   // Constructors --------------------------------------------------

   /**
    * Create a named Statistic.
    *
    * @param name        Name of the statistic
    * @param units       Unit description used in this statistic
    * @param description Human description of the statistic
    */
   public StatisticImpl(String name, String units, String description)
   {
      this.name = name;
      this.units = units;
      this.description = description;
      this.startTime = System.currentTimeMillis();
   }

   // Public --------------------------------------------------------

   // javax.management.j2ee.Statistics implementation ---------------

   public String getName()
   {
      return name;
   }

   public String getUnit()
   {
      return units;
   }

   public String getDescription()
   {
      return description;
   }

   public long getStartTime()
   {
      return startTime;
   }

   public long getLastSampleTime()
   {
      return lastSampleTime;
   }

   /**
    * Reset the lastSampleTime and startTime to the current time
    */
   public void reset()
   {
      startTime = System.currentTimeMillis();
      lastSampleTime = startTime;
   }

   /**
    * Update the lastSampleTime and startTime on first call
    */
   public void set()
   {
      lastSampleTime = System.currentTimeMillis();
   }

   public String toString()
   {
      StringBuffer tmp = new StringBuffer(name);
      tmp.append('(');
      tmp.append("description: ");
      tmp.append(description);
      tmp.append(", units: ");
      tmp.append(units);
      tmp.append(", startTime: ");
      tmp.append(startTime);
      tmp.append(", lastSampleTime: ");
      tmp.append(lastSampleTime);
      tmp.append(')');
      return tmp.toString();
   }
}
