/** * Retrieve the PHP_UML_Metamodel_Package object related to a package path * (ie, to a qualified name, like A\B\C). * Relies on the model->$packages, when references are still named * (= before their resolution) * * @param string $path The path to find * * @return PHP_UML_Metamodel_Package The package to find. Null if not found. */ protected function getPackageByPath($path) { $pkg = $this->topPackage; do { list($pos, $first, $path) = PHP_UML_Metamodel_Helper::getPackagePathParts($path); if ($first != '') { $pkg = PHP_UML_Metamodel_Helper::findSubpackageByName($pkg, $first); } if ($pkg === false) { return false; } } while (!($pos === false)); return $pkg; }
/** * Adds a deployment package to the metamodel * * @param string $name Name of the package to create * @param PHP_UML_Metamodel_Package $nestingPkg Enclosing package * * @return PHP_UML_Metamodel_Package The package created (or the existing one) */ private function addDeploymentPackage($name, PHP_UML_Metamodel_Package $nestingPkg = null) { if ($name == '') { return $this->structure->deploymentPackages; } if (is_null($nestingPkg)) { // root package (global namespace) $nestingPkg = $this->structure->deploymentPackages; } list($pos, $name, $following) = PHP_UML_Metamodel_Helper::getPackagePathParts($name, true, '/'); // let's check if it does not already exist: $p = PHP_UML_Metamodel_Helper::findSubpackageByName($nestingPkg, $name); // ok, pkg does not exist, let's add it: if ($p === false) { $p = new PHP_UML_Metamodel_Package(); $p->id = self::getUID(); $p->name = $name; $p->nestingPackage = $nestingPkg; $p->nestedPackage = array(); $nestingPkg->nestedPackage[] = $p; } if (!($pos === false)) { $p = $this->addDeploymentPackage($following, $p); } return $p; }