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

org.perfcake.reporting.destination.c3chart.C3Chart Maven / Gradle / Ivy

/*
 * -----------------------------------------------------------------------\
 * PerfCake
 *  
 * Copyright (C) 2010 - 2016 the original author or authors.
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * -----------------------------------------------------------------------/
 */
package org.perfcake.reporting.destination.c3chart;

import static org.perfcake.reporting.destination.ChartDestination.ChartType.LINE;

import org.perfcake.PerfCakeConst;
import org.perfcake.common.PeriodType;
import org.perfcake.reporting.destination.ChartDestination;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.List;

/**
 * Represents a single C3 chart meta-data carrying all the information needed to represent the chart.
 *
 * @author Martin Večeřa
 */
public class C3Chart {

   /**
    * Name of the time column.
    */
   protected static final String COLUMN_TIME = "Time";

   /**
    * Name of the iteration column.
    */
   protected static final String COLUMN_ITERATION = "Iteration";

   /**
    * Name of the percentage column.
    */
   protected static final String COLUMN_PERCENT = "Percents";

   /**
    * A logger for the class.
    */
   private static final Logger log = LogManager.getLogger(C3Chart.class);

   /**
    * Base of the file name of the chart file. E.g. from '/some/path/data/stats201501272232.js' it is just 'stats201501272232'.
    */
   private String baseName;

   /**
    * Name of this chart.
    */
   private String name;

   /**
    * The legend of the X axis of this chart.
    */
   private String xAxis;

   /**
    * The legend of the Y axis of this chart.
    */
   private String yAxis;

   /**
    * The type of the X axis. It can display the overall progress of the test in Percents, Time, or Iteration numbers.
    */
   private PeriodType xAxisType = PeriodType.TIME;

   /**
    * Attributes that should be stored from the Measurement.
    */
   private List attributes;

   /**
    * The chart's group name. Charts from multiple measurements that have the same group name are later searched for matching attributes.
    */
   private String group;

   /**
    * True when this chart was created as a combination of another charts.
    */
   private boolean combined = false;

   /**
    * When this chart was created.
    */
   private long created = System.currentTimeMillis();

   /**
    * Height of the resulting chart SVG graphics in pixels.
    */
   private int height = 400;

   /**
    * The chart can be either of line or bar type. Line is the default.
    */
   private ChartDestination.ChartType type = LINE;

   /**
    * Gets the base name of the data files of this chart.
    *
    * @return The base name of the data files of this chart.
    */
   public String getBaseName() {
      if (baseName == null) {
         baseName = group + System.getProperty(PerfCakeConst.NICE_TIMESTAMP_PROPERTY);
      }

      return baseName;
   }

   /**
    * Gets the name of the chart.
    *
    * @return The name of the chart.
    */
   public String getName() {
      return name;
   }

   /**
    * Gets the legend of the X axis of the chart.
    *
    * @return The legend of the X axis of the chart.
    */
   public String getxAxis() {
      return xAxis;
   }

   /**
    * Gets the legend of the Y axis of the chart.
    *
    * @return The legend of the Y axis of the chart.
    */
   public String getyAxis() {
      return yAxis;
   }

   /**
    * Gets the attributes stored in the chart as a List.
    *
    * @return The attributes list.
    */
   public List getAttributes() {
      return attributes;
   }

   /**
    * Gets the group of the current chart.
    *
    * @return The group name of this chart.
    */
   public String getGroup() {
      return group;
   }

   /**
    * Gets the type of the X axis. It can be either Time, Percents, or Iteration number.
    *
    * @return The type of the X axis.
    */
   public PeriodType getxAxisType() {
      return xAxisType;
   }

   /**
    * Sets the base of the file name of the chart file. E.g. from '/some/path/data/stats201501272232.js' it is just 'stats201501272232'.
    *
    * @param baseName
    *       The base of the file name of the chart file.
    */
   public void setBaseName(final String baseName) {
      this.baseName = baseName;
   }

   /**
    * Gets the name of the chart.
    *
    * @param name
    *       The name of the chart.
    */
   public void setName(final String name) {
      this.name = name;
   }

   /**
    * Sets the legend of the X axis of the chart.
    *
    * @param xAxis
    *       The legend of the X axis of the chart.
    */
   public void setxAxis(final String xAxis) {
      this.xAxis = xAxis;
   }

   /**
    * Sets the legend of the Y axis of the chart.
    *
    * @param yAxis
    *       The legend of the Y axis of the chart.
    */
   public void setyAxis(final String yAxis) {
      this.yAxis = yAxis;
   }

   /**
    * Gets the type of the X axis. It can be either Time, Percents, or Iteration number.
    *
    * @param xAxisType
    *       The type of the X axis. It can be either Time, Percents, or Iteration number.
    */
   public void setxAxisType(final PeriodType xAxisType) {
      this.xAxisType = xAxisType;
   }

   /**
    * Sets the attributes stored in the chart as a List.
    *
    * @param attributes
    *       The attributes stored in the chart as a List.
    */
   public void setAttributes(final List attributes) {
      this.attributes = attributes;
   }

   /**
    * Sets the group of the current chart.
    *
    * @param group
    *       The group name of this chart.
    */
   public void setGroup(final String group) {
      this.group = group;
   }

   /**
    * Checks whether this chart was created as a combination of other existing charts. Charts created as a combination of other charts do not have
    * their object description and quick preview files generated.
    *
    * @return True if and only if this chart was created as a combination of other existing charts.
    */
   public boolean isCombined() {
      return combined;
   }

   /**
    * Sets whether this chart was created as a combination of other existing charts. Charts created as a combination of other charts do not have
    * their object description and quick preview files generated.
    *
    * @param combined
    *       True if and only if this chart was created as a combination of other existing charts.
    */
   public void setCombined(final boolean combined) {
      this.combined = combined;
   }

   /**
    * Gets the Unix timestamp of when this chart was created. Defaults to the class instantiation time.
    *
    * @return The Unix timestamp of when this chart was created.
    */
   public long getCreated() {
      return created;
   }

   /**
    * Sets the Unix timestamp of when this chart was created.
    *
    * @param created
    *       The Unix timestamp of when this chart was created.
    */
   public void setCreated(final long created) {
      this.created = created;
   }

   /**
    * Gets the height of the resulting chart SVG graphics in pixels.
    *
    * @return The height of the resulting chart SVG graphics in pixels.
    */
   public int getHeight() {
      return height;
   }

   /**
    * Sets the height of the resulting chart SVG graphics in pixels.
    *
    * @param height
    *       The height of the resulting chart SVG graphics in pixels.
    */
   public void setHeight(final int height) {
      this.height = height;
   }

   /**
    * Gets the chart's graphics type - either line or bar. Line is the default.
    *
    * @return The chart's graphics type.
    */
   public ChartDestination.ChartType getType() {
      return type;
   }

   /**
    * Sets the chart's graphics type - either line or bar. Line is the default.
    *
    * @param type
    *       The chart's graphics type.
    */
   public void setType(final ChartDestination.ChartType type) {
      this.type = type;
   }

   @Override
   public String toString() {
      return "C3Chart{"
            + "baseName='" + baseName + '\''
            + ", name='" + name + '\''
            + ", xAxis='" + xAxis + '\''
            + ", yAxis='" + yAxis + '\''
            + ", xAxisType=" + xAxisType
            + ", attributes=" + attributes
            + ", type=" + type
            + ", group='" + group
            + ", height=" + height + "'}";
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy