* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 * @author Icinga Development Team */ // {{{ICINGA_LICENSE_HEADER}}} namespace Icinga\Chart; use Exception; use Iterator; use Icinga\Chart\Legend; use Icinga\Chart\Palette; use Icinga\Chart\Primitive\Drawable; use Icinga\Chart\SVGRenderer; /** * Base class for charts */ abstract class Chart implements Drawable { private $xAxis; private $yAxis; /** * Series to plot * * @var array */ protected $dataSets = array(); /** * SVG renderer * * @var SVGRenderer */ protected $renderer; /** * Legend to use for this chart * * @var Legend */ public $legend; /** * The style-palette for this chart * * @var Palette */ public $palette; /** * Create a new chart * * See self::isValidDataFormat() for more information on how each series need to be structured * * @param array $dataSet, ... unlimited number of series to plot * * @see self::isValidDataFormat() */ public function __construct() { $this->legend = new Legend(); $this->palette = new Palette(); $this->renderer = new SVGRenderer(2,1); $this->init(); } protected function init() { } /** * Set up the legend for this chart */ protected function setupLegend() { } /** * Set up the elements for this chart */ protected function build() { } /** * Check if the current dataset has the proper structure for this chart * * Needs to be overwritten by extending classes. The default implementation returns false. * * @return bool Whether the dataset is valid or not */ public function isValidDataFormat() { return false; } /** * Disable the legend for this chart */ public function disableLegend() { $this->legend = null; } public function render() { if (!$this->isValidDataFormat()) { throw new Exception('Dataset for graph doesn\'t have the proper structure'); } $this->build(); $this->renderer->getCanvas()->addElement($this); return $this->renderer->render(); } }