summaryrefslogtreecommitdiffstats
path: root/library/Businessprocess/ImportedNode.php
blob: 3f0b4604ae3a5ec8911407222f2cb9f35392fce6 (plain)
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
<?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 = $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()
    {
        if ($this->alias === null) {
            $this->alias = $this->importedNode()->getAlias();
        }

        return $this->alias;
    }

    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;
    }

    /**
     * @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(false)
            ->setDowntime(false)
            ->setAck(false)
            ->setAlias($e->getMessage());

        return $node;
    }
}