public function load(Config $config)
 {
     $this->resourceMap = CacheManager::loadResource(self::CONTEXT_RESOURCE_NAME, CacheManager::APPLICATION_SCOPE);
     if ($this->resourceMap == null) {
         ApplicationInitializer::loadAssets(ASSETS_DIRECTORY);
         $this->resourceMap = $this->loadResourceMap($this->getClasses());
         CacheManager::saveResource(self::CONTEXT_RESOURCE_NAME, $this->resourceMap, CacheManager::APPLICATION_SCOPE);
     }
     $this->createResources();
     $this->loadDataSources($config->getDataSources());
     return new ApplicationContext($this->resources);
 }
Ejemplo n.º 2
0
 /**
  * Create a new Picon Application
  * Fires off the application initialiser to load an instantiat all resources
  * Despite not being private, like a normal singleton, it is not
  * expected for a Picon Application to be instantiated more than once
  */
 public function __construct()
 {
     if (isset($GLOBALS[self::GLOBAL_APPLICATION_KEY])) {
         throw new \IllegalStateException("An instance of picon application already exists");
     }
     $GLOBALS[self::GLOBAL_APPLICATION_KEY] = $this;
     $this->initialiser = $this->getApplicationInitializer();
     $this->initialiser->addScannedDirectory(PICON_DIRECTORY, 'picon');
     $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/annotations");
     $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/web/annotations");
     $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/exceptions");
     $this->initialiser->addScannedDirectory(PICON_DIRECTORY . "/web/pages");
     $this->initialiser->addScannedDirectory(ASSETS_DIRECTORY);
     $this->internalInit();
     $this->initialiser->initialise();
     ob_start();
 }
Ejemplo n.º 3
0
 private function scanPages()
 {
     ApplicationInitializer::loadAssets(ASSETS_DIRECTORY);
     $this->pages = array();
     $scanner = new ClassScanner(array(new SubClassRule('\\picon\\WebPage')));
     $pages = $scanner->scanForName();
     foreach ($pages as $pageName) {
         $this->addToPath($pageName, $pageName);
     }
     $pathScanner = new ClassScanner(array(new AnnotationRule('Path')));
     foreach ($pathScanner->scanForReflection($pages) as $reflection) {
         $pathAnnoation = $reflection->getAnnotation('Path');
         $path = $pathAnnoation->path;
         if (empty($path)) {
             throw new \UnexpectedValueException(sprintf("Expecting path annoation to have a path value for class %s", $reflection->getName()));
         }
         $this->addToPath($path, $reflection->getNamespaceName() . '\\' . $reflection->getName());
     }
     PiconApplication::get()->getPageMapInitializationListener()->onInitialize($this);
 }