1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
<?php
namespace Icinga\Module\Businessprocess;
use Exception;
class ImportedNode extends BpNode
{
/** @var BpConfig */
protected $parentBp;
/** @var string */
protected $configName;
/** @var string */
protected $nodeName;
/** @var BpNode */
protected $importedNode;
/** @var string */
protected $className = 'process subtree';
/** @var string */
protected $icon = 'download';
public function __construct(BpConfig $parentBp, $object)
{
$this->parentBp = $parentBp;
$this->configName = $object->configName;
$this->nodeName = BpConfig::escapeName($object->node);
parent::__construct((object) [
'name' => '@' . $this->configName . ':' . $this->nodeName,
'operator' => null,
'child_names' => null
]);
}
/**
* @return string
*/
public function getConfigName()
{
return $this->configName;
}
/**
* @return string
*/
public function getNodeName()
{
return $this->nodeName;
}
public function getIdentifier()
{
return $this->getName();
}
public function getBpConfig()
{
if ($this->bp === null) {
$this->bp = $this->parentBp->getImportedConfig($this->configName);
}
return $this->bp;
}
public function getAlias()
{
return $this->importedNode()->getAlias();
}
public function getOperator()
{
if ($this->operator === null) {
$this->operator = $this->importedNode()->getOperator();
}
return $this->operator;
}
public function getChildNames()
{
if ($this->childNames === null) {
$this->childNames = $this->importedNode()->getChildNames();
}
return $this->childNames;
}
public function isMissing()
{
if ($this->missing === null && $this->getBpConfig()->isFaulty()) {
$this->missing = true;
}
return parent::isMissing();
}
/**
* @return BpNode
*/
protected function importedNode()
{
if ($this->importedNode === null) {
try {
$this->importedNode = $this->getBpConfig()->getBpNode($this->nodeName);
} catch (Exception $e) {
return $this->createFailedNode($e);
}
}
return $this->importedNode;
}
/**
* @param Exception $e
*
* @return BpNode
*/
protected function createFailedNode(Exception $e)
{
$this->parentBp->addError($e->getMessage());
$node = new BpNode((object) array(
'name' => $this->getName(),
'operator' => '&',
'child_names' => []
));
$node->setBpConfig($this->getBpConfig());
$node->setState(2);
$node->setMissing()
->setDowntime(false)
->setAck(false);
return $node;
}
}
|