All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.grinder.console.model.SampleModelViewsImplementation Maven / Gradle / Ivy

The newest version!
// Copyright (C) 2008 - 2009 Philip Aston
// All rights reserved.
//
// This file is part of The Grinder software distribution. Refer to
// the file LICENSE which is part of The Grinder distribution for
// licensing details. The Grinder distribution is available on the
// Internet at http://grinder.sourceforge.net/
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS 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
// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, 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.

package net.grinder.console.model;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.NumberFormat;

import net.grinder.statistics.ExpressionView;
import net.grinder.statistics.StatisticExpressionFactory;
import net.grinder.statistics.StatisticsServices;
import net.grinder.statistics.StatisticsView;
import net.grinder.statistics.TestStatisticsQueries;
import net.grinder.util.ListenerSupport;
import net.grinder.util.SignificantFigureFormat;


/**
 * Statistics views to use with the statistics from the Sample SampleModel.
 *
 * @author Philip Aston
 */
public class SampleModelViewsImplementation implements SampleModelViews {

  private final ListenerSupport m_listeners =
    new ListenerSupport();
  private final StatisticsServices m_statisticsServices;
  private final ExpressionView m_peakTPSExpressionView;

  // Guarded by this.
  private NumberFormat m_numberFormat;

  // Guarded by this.
  private StatisticsView m_intervalStatisticsView;

  // Guarded by this.
  private StatisticsView m_cumulativeStatisticsView;

  /**
   * Constructor.
   *
   * @param properties Console properties.
   * @param statisticsServices Statistic services.
   * @param model Sample model.
   */
  public SampleModelViewsImplementation(ConsoleProperties properties,
                                        StatisticsServices statisticsServices,
                                        SampleModel model) {

    m_statisticsServices = statisticsServices;

    m_numberFormat =
      new SignificantFigureFormat(properties.getSignificantFigures());

    final StatisticExpressionFactory statisticExpressionFactory =
      m_statisticsServices.getStatisticExpressionFactory();

    m_peakTPSExpressionView =
      statisticExpressionFactory
        .createExpressionView("Peak TPS", model.getPeakTPSExpression());

    resetStatisticsViews();

    properties.addPropertyChangeListener(
      ConsoleProperties.SIG_FIG_PROPERTY,
      new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent event) {
          synchronized (SampleModelViewsImplementation.this) {
            m_numberFormat =
              new SignificantFigureFormat(
                ((Integer)event.getNewValue()).intValue());
          }
        }
      });
  }

  /**
   * Reset the views.
   */
  public void resetStatisticsViews() {
    final StatisticsView summaryStatisticsView =
      m_statisticsServices.getSummaryStatisticsView();

    synchronized (this) {
      m_intervalStatisticsView = new StatisticsView();
      m_cumulativeStatisticsView = new StatisticsView();

      m_intervalStatisticsView.add(summaryStatisticsView);

      m_cumulativeStatisticsView.add(summaryStatisticsView);
      m_cumulativeStatisticsView.add(m_peakTPSExpressionView);
    }

    m_listeners.apply(
      new ListenerSupport.Informer() {
        public void inform(Listener l) { l.resetStatisticsViews(); }
      });
  }

  /**
   * Returns a NumberFormat which corresponds to the user's preference.
   *
   * @return The number format.
   */
  public NumberFormat getNumberFormat() {
    synchronized (this) {
      return m_numberFormat;
    }
  }

  /**
   * Register new statistic expression.
   *
   * @param statisticExpression The expression.
   */
  public void registerStatisticExpression(
    final ExpressionView statisticExpression) {

    synchronized (this) {
      m_intervalStatisticsView.add(statisticExpression);
      m_cumulativeStatisticsView.add(statisticExpression);
    }

    m_listeners.apply(
      new ListenerSupport.Informer() {
        public void inform(Listener l) {
          l.newStatisticExpression(statisticExpression);
        }
      });
  }

  /**
   * Get the cumulative statistics view for this model.
   *
   * @return The cumulative statistics view.
   */
  public StatisticsView getCumulativeStatisticsView() {
    synchronized (this) {
      return m_cumulativeStatisticsView;
    }
  }

  /**
   * Get the interval statistics view for this model.
   *
   * @return The interval statistics view.
   */
  public StatisticsView getIntervalStatisticsView() {
    synchronized (this) {
      return m_intervalStatisticsView;
    }
  }

  /**
   * Return an object allowing access to common functions of test statistics.
   *
   * @return The {@link TestStatisticsQueries}.
   */
  public TestStatisticsQueries getTestStatisticsQueries() {
    return m_statisticsServices.getTestStatisticsQueries();
  }

  /**
   * Add a new listener.
   *
   * @param listener The listener.
   */
  public void addListener(Listener listener) {
    m_listeners.add(listener);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy