From 57656f8dd9c83c189b5f265e7175a0c9106e5234 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Thu, 16 Jun 2016 21:40:22 +0200 Subject: [PATCH] IcingaObject: externalize imported object loading --- library/Director/Objects/IcingaObject.php | 41 ++----------------- .../Director/Objects/IcingaObjectImports.php | 10 +++++ 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/library/Director/Objects/IcingaObject.php b/library/Director/Objects/IcingaObject.php index 50cc0031..cf47fb10 100644 --- a/library/Director/Objects/IcingaObject.php +++ b/library/Director/Objects/IcingaObject.php @@ -73,8 +73,6 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer private $imports; - private $importedObjects; - private $ranges; private $arguments; @@ -557,39 +555,6 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer return $this->imports; } - // TODO: what happens if imports change at runtime? - public function importedObjects() - { - $this->assertImportsSupport(); - if ($this->importedObjects === null) { - $this->importedObjects = array(); - foreach ($this->imports()->listImportNames() as $import) { - $this->importedObjects[$import] = $this->loadImportedObject($import); - } - } - - return $this->importedObjects; - } - - protected function loadImportedObject($name) - { - if (is_array($this->getKeyName())) { - // Affects services only: - return self::load( - array('object_name' => $name), - $this->connection - ); - } else { - return self::load($name, $this->connection); - } - } - - public function clearImportedObjects() - { - $this->importedObjects = null; - return $this; - } - public function setImports($imports) { if (! is_array($imports) && $imports !== null) { @@ -598,7 +563,6 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer $this->imports()->set($imports); if ($this->imports()->hasBeenModified()) { - $this->clearImportedObjects(); $this->invalidateResolveCache(); } } @@ -779,7 +743,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer $vals['_MERGED_'] = (object) array(); $vals['_INHERITED_'] = (object) array(); $vals['_ORIGINS_'] = (object) array(); - $objects = $this->importedObjects(); + $objects = $this->imports()->getObjects(); $get = 'get' . $what; $getInherited = 'getInherited' . $what; @@ -793,6 +757,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer if (in_array($key, $blacklist)) { continue; } + // $vals[$name]->$key = $value; $vals['_MERGED_']->$key = $value; $vals['_INHERITED_']->$key = $value; @@ -1658,7 +1623,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer if ($resolved) { if ($this->supportsImports()) { $set = clone($set); - foreach ($this->importedObjects() as $parent) { + foreach ($this->imports()->getObjects() as $parent) { $set->inheritFrom($parent->getRelatedSet($property)); } } diff --git a/library/Director/Objects/IcingaObjectImports.php b/library/Director/Objects/IcingaObjectImports.php index 87a0f37b..1c48e163 100644 --- a/library/Director/Objects/IcingaObjectImports.php +++ b/library/Director/Objects/IcingaObjectImports.php @@ -196,6 +196,16 @@ class IcingaObjectImports implements Iterator, Countable, IcingaConfigRenderer return $this; } + public function getObjects() + { + $list = array(); + foreach ($this->listImportNames() as $name) { + $list[$name] = $this->getObject($name); + } + + return $list; + } + protected function getObject($name) { if (array_key_exists($name, $this->objects)) {