public static function getPkg(PkgNameInterface $pkgName) { $vendor = $pkgName->getVendor(); $factory = self::loadFactory($vendor); $type = $pkgName->getType(); $name = $pkgName->getName(); $pkg = null; if ('layer' === $type) { $data = ResourceTree::getLayer($vendor, $name); if (!isset($data['pkg'])) { $err = "pkg must be defined for layer -({$vendor}, {$name})"; throw new DomainException($err); } if (!isset($data['filename'])) { $err = "filename must be defined for layer -({$vendor}, {$name})"; throw new DomainException($err); } $pkg = $factory->createLayer($name, self::loadVendor($vendor)); $pkg->setFilename($data['filename'])->setPackages($data['pkg']); } else { if (empty($type)) { $pkg = ResourceTree::getPackage($vendor, $name); if (is_array($pkg)) { $pkg = $factory->createPkg($pkg, $vendor); ResourceTree::setPackage($vendor, $name, $pkg); } } else { $pkg = ResourceTree::getPackageByType($vendor, $type, $name); if (is_array($pkg)) { $pkg = $factory->createPkg($pkg, $vendor); ResourceTree::setPackageByType($vendor, $type, $name, $pkg); } } } return $pkg; }