예제 #1
0
 /**
  * @param   string  $vendorFile
  * @return  array
  */
 public function discoverPackageTree($path)
 {
     $isBasePath = true;
     if ('/' === $path[0]) {
         $isBasePath = false;
     }
     $finder = new FileFinder('resource', $isBasePath);
     $fileReader = new FileReader($finder);
     $packages = array();
     $topDir = new RecursiveDirectoryIterator($finder->getPath($path));
     $fileReader->setFileFinder(new FileFinder(null, false));
     foreach (new RecursiveIteratorIterator($topDir) as $file) {
         if ('json' !== $file->getExtension()) {
             continue;
         }
         $data = $fileReader->decodeJsonAt($file->getPathName(), true);
         if (null === $data) {
             $info = $file->getPathInfo();
             $dir = $info->getFileName();
             $err = "error parsing the manfiest json file for -({$dir}): ";
             $err .= "{$fileReader->getLastJsonError()}";
             throw new RunTimeException($err);
         }
         if (!isset($data['name'])) {
             $pathName = $file->getPathName();
             $err = 'every resource pkg must have a -(name) property ';
             $err .= "file: -({$pathName})";
             throw new DomainException($err);
         }
         $name = $data['name'];
         if (!is_string($name) || empty($name)) {
             $err = "property -(name) must be a none empty string ";
             $err .= "-({$file->getPathInfo()->getFileName()})";
             throw new RunTimeException($err);
         }
         if (!isset($data['type'])) {
             $err = 'every resource pkg must have a -(type) property ';
             $err .= "defined: none found for -({$name})";
             throw new DomainException($err);
         }
         $type = $data['type'];
         if (!is_string($type) || empty($type)) {
             $err = "appfuel resource -({$name}) json must have a type ";
             $err .= "property as which is a non empty string ";
             throw new DomainException($err);
         }
         if (isset($packages[$type][$name])) {
             $info = $file->getPathInfo();
             $err = "can not build tree -({$type}, {$name}) is already ";
             $err .= "defined -({$info->getPathName()})";
             throw new RunTimeException($err);
         }
         $packages[$type][$name] = $data;
     }
     return $packages;
 }
예제 #2
0
 /**
  * @return	null
  */
 public static function loadTree()
 {
     $file = self::getTreeFile();
     $finder = self::loadFileFinder();
     $finder->setRootPath($file);
     $reader = new FileReader($finder);
     $data = $reader->decodeJsonAt();
     if (empty($data)) {
         $err = "could not load resource tree or tree is empty ";
         $err .= "-({$finder->getPath()})";
         throw new RunTimeException($err);
     }
     ResourceTree::setTree($data);
     /*
      * we want to reuse the finder so set the root back to the base path
      */
     $finder->setRootPath('');
 }