RequestOutputPlotPanelNodeClass.php 7.58 KB
<?php

require_once("RequestOutputPlotElementTimeNodeClass.php");
require_once("RequestOutputPlotElementXYNodeClass.php");
require_once("RequestOutputPlotElementStatusNodeClass.php");
require_once("RequestOutputPlotElementTickNodeClass.php");
require_once "RequestOutputPlotElementEpochNodeClass.php";
require_once "RequestOutputPlotElementInstantNodeClass.php";
require_once "RequestOutputPlotFontNodeClass.php";
require_once("RequestOutPutPlotElementPlotFunctionNodeClass.php");

define("REQUESTOUTPUTPLOTPANEL_NAME", "panel");
define("REQUESTOUTPUTPLOTPANEL_TITLE", "title");
define("REQUESTOUTPUTPLOTPANEL_BACKGROUNDCOLOR", "backgroundColor");
define("REQUESTOUTPUTPLOTPANEL_PLOTAREABACKGROUNDCOLOR", "plotAreaBackgroundColor");
define("REQUESTOUTPUTPLOTPANEL_XMARGIN", "xMargin");
define("REQUESTOUTPUTPLOTPANEL_PREFEREDWIDTH", "preferedWidth");
define("REQUESTOUTPUTPLOTPANEL_PREFEREDHEIGHT", "preferedHeight");
define("REQUESTOUTPUTPLOTPANEL_ID", "id");
define("REQUESTOUTPUTPLOTPANEL_INDEX", "index");

abstract class RequestOutputPlotElementTypeEnum
{
	const TIMEPLOT    = "TimePlot";
	const XYPLOT      = "XYPlot";
	const STATUSPLOT  = "StatusPlot";
	const TICKPLOT    = "TickPlot";
	const EPOCHPLOT   = "EpochPlot";
	const INSTANTPLOT = "InstantPlot";
	const  PLOTFUNCTION = "PlotFunction";
}

/**
 * @class RequestOutputPlotPanelNodeClass
 * @brief Definition of a panel for a plot request
 * @details
 */
class RequestOutputPlotPanelNodeClass extends NodeClass
{
	public function __construct()
	{
		parent::__construct(REQUESTOUTPUTPLOTPANEL_NAME);
	}

	public function setBackgroundColor($color)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_BACKGROUNDCOLOR, $color);
	}

	public function setPlotAreaBackgroundColor($color)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_PLOTAREABACKGROUNDCOLOR, $color);
	}

	public function getBackgroundColor()
	{
		return $this->getAttribute(REQUESTOUTPUTPLOTPANEL_BACKGROUNDCOLOR);
	}

	public function getPlotAreaBackgroundColor()
	{
		return $this->getAttribute(REQUESTOUTPUTPLOTPANEL_PLOTAREABACKGROUNDCOLOR);
	}

	public function getBounds()
	{
		$node = $this->getFirstChildByName(REQUESTOUTPUTPLOTPANELBOUNDS_NAME);

		if (!isset($node)) {
			$node = new RequestOutputPlotPanelBoundsNodeClass();
			$this->addChild($node);
		}

		return $node;
	}

	public function getFont()
	{
		$node = $this->getFirstChildByName(REQUESTOUTPUTPLOTFONT_NODENAME);

		if (!isset($node)) {
			$node = new RequestOutputPlotFontNodeClass();
			$this->addChild($node);
		}

		return $node;
	}

	public function getTitle()
	{
		$node = $this->getFirstChildByName(REQUESTOUTPUTPLOTPANEL_TITLE);

		if (!isset($node)) {
			$node = new RequestOutputPlotTitleNodeClass();
			$this->addChild($node);
		}

		return $node;
	}

	public function addPlotElement($type, $noAxes = false)
	{
		switch ($type) {
			case RequestOutputPlotElementTypeEnum::TIMEPLOT:
				$node = new RequestOutputPlotElementTimeNodeClass();
				break;
			case RequestOutputPlotElementTypeEnum::XYPLOT:
				$node = new RequestOutputPlotElementXYNodeClass();
				break;
			case RequestOutputPlotElementTypeEnum::STATUSPLOT:
				$node = new RequestOutputPlotElementStatusNodeClass($noAxes);
				break;
			case RequestOutputPlotElementTypeEnum::TICKPLOT:
				$node = new RequestOutputPlotElementTickNodeClass($noAxes);
				break;
			case RequestOutputPlotElementTypeEnum::EPOCHPLOT:
				$node = new RequestOutputPlotElementEpochNodeClass();
				break;
			case RequestOutputPlotElementTypeEnum::INSTANTPLOT:
				$node = new RequestOutputPlotElementInstantNodeClass();
				break;
			case RequestOutputPlotElementTypeEnum::PLOTFUNCTION:
				$node = new RequestOutPutPlotElementPlotFunctionNodeClass();
				break;
			default:
				return NULL;
		}
		$this->addChild($node);
		return $node;
	}

	public function setPreferedWidth($width)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_PREFEREDWIDTH, $width);
	}

	public function getPreferedWidth()
	{
		return $this->getAttribute(REQUESTOUTPUTPLOTPANEL_PREFEREDWIDTH);
	}

	public function setPreferedHeight($height)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_PREFEREDHEIGHT, $height);
	}

	public function getPreferedHeight()
	{
		return $this->getAttribute(REQUESTOUTPUTPLOTPANEL_PREFEREDHEIGHT);
	}

	public function setXMargin($left, $right)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_XMARGIN, "[" . $left . "," . $right . "]");
	}

	public function setXMargin2($margin)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_XMARGIN, $margin);
	}

	public function setId($id)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_ID, $id);
	}

	public function getId()
	{
		return $this->getAttribute(REQUESTOUTPUTPLOTPANEL_ID);
	}

	public function setIndex($index)
	{
		$this->setAttribute(REQUESTOUTPUTPLOTPANEL_INDEX, $index);
	}

	public function getIndex()
	{
		return $this->getAttribute(REQUESTOUTPUTPLOTPANEL_INDEX);
	}

	public function loadFromNode($xmlNode)
	{
		$this->setBackgroundColor($this->getXmlNodeAttribute($xmlNode, REQUESTOUTPUTPLOTPANEL_BACKGROUNDCOLOR));

		$boundsXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTPANELBOUNDS_NAME);
		if (isset($boundsXmlNode))
			$this->getBounds()->loadFromNode($boundsXmlNode);

		$boundsXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTFONT_NODENAME);
		if (isset($boundsXmlNode))
			$this->getBounds()->loadFromNode($boundsXmlNode);

		$fontXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTFONT_NODENAME);
		if (isset($fontXmlNode))
			$this->getFont()->loadFromNode($fontXmlNode);

		$titleXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTPANEL_TITLE);
		if (isset($titleXmlNode))
			$this->getTitle()->loadFromNode($titleXmlNode);

		$timePlotXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTELEMENTTIME_NAME);
		if (isset($timePlotXmlNode))
			$this->addPlotElement(RequestOutputPlotElementTypeEnum::TIMEPLOT)->loadFromNode($timePlotXmlNode);

		$xyPlotXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTELEMENTXY_NAME);
		if (isset($xyPlotXmlNode))
			$this->addPlotElement(RequestOutputPlotElementTypeEnum::XYPLOT)->loadFromNode($xyPlotXmlNode);

		$statusPlotXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTELEMENTSTATUS_NAME);
		if (isset($statusPlotXmlNode))
			$this->addPlotElement(RequestOutputPlotElementTypeEnum::STATUSPLOT)->loadFromNode($statusPlotXmlNode);

		$tickPlotXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTELEMENTTICK_NAME);
		if (isset($tickPlotXmlNode))
			$this->addPlotElement(RequestOutputPlotElementTypeEnum::TICKPLOT)->loadFromNode($tickPlotXmlNode);

		$epochPlotXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTELEMENTEPOCH_NAME);
		if (isset($epochPlotXmlNode))
			$this->addPlotElement(RequestOutputPlotElementTypeEnum::EPOCHPLOT)->loadFromNode($epochPlotXmlNode);

		$instantPlotXmlNode = $this->getXmlNodeChildByTagName($xmlNode, REQUESTOUTPUTPLOTELEMENTINSTANT_NAME);
		if (isset($instantPlotXmlNode))
			$this->addPlotElement(RequestOutputPlotElementTypeEnum::INSTANTPLOT)->loadFromNode($instantPlotXmlNode);

		$this->setPreferedWidth($this->getXmlNodeAttribute($xmlNode, REQUESTOUTPUTPLOTPANEL_PREFEREDWIDTH));
		$this->setPreferedHeight($this->getXmlNodeAttribute($xmlNode, REQUESTOUTPUTPLOTPANEL_PREFEREDHEIGHT));
		$this->setXMargin2($this->getXmlNodeAttribute($xmlNode, REQUESTOUTPUTPLOTPANEL_XMARGIN));
		$this->setId($this->getXmlNodeAttribute($xmlNode, REQUESTOUTPUTPLOTPANEL_ID));
	}
}