* Tous droits réservés. */ namespace Irstea\PlantUmlBundle\Model\Namespace_; use Irstea\PlantUmlBundle\Model\NamespaceInterface; use Irstea\PlantUmlBundle\Model\NodeInterface; use Irstea\PlantUmlBundle\Writer\WritableInterface; use Irstea\PlantUmlBundle\Writer\WriterInterface; /** * Description of Namespace * * @author Guillaume Perréal */ abstract class AbstractHierachicalNamespace extends AbstractNamespace { /** * @var NamespaceInterface */ private $children = []; /** * @param type $namespaceName * @return NamespaceInterface */ public function getNamespace($namespaceName) { $namespaceName = trim($namespaceName, '\\'); if (!$namespaceName) { return $this; } @list($head, $tail) = explode('\\', $namespaceName, 2); if (!isset($this->children[$head])) { $this->children[$head] = new Namespace_($this, $head); } if (empty($tail)) { return $this->children[$head]; } return $this->children[$head]->getNamespace($tail); } /** * @return $string */ abstract protected function getNamespacePrefix(); public function getShortName($name) { $prefix = $this->getNamespacePrefix(); if (0 === strpos($name, $prefix)) { return substr($name, strlen($prefix)); } return $name; } /** * @param WriterInterface $writer * @return self */ protected function outputChildrenTo(WriterInterface $writer) { foreach ($this->children as $child) { $child->outputTo($writer); } return $this; } /** * @return bool */ protected function isEmpty() { return parent::isEmpty() && empty($this->children); } }