/** * load a rask * * @param Charcoal_ObjectPath $obj_path * @param Charcoal_String|string $path * @param Charcoal_ITaskManager $task_manager * * @return Charcoal_ITask|NULL */ private function loadTask($obj_path, $path, $task_manager) { // Charcoal_ParamTrait::validateObjectPath( 1, $obj_path ); // Charcoal_ParamTrait::validateString( 2, $path ); // Charcoal_ParamTrait::validateImplements( 3, 'Charcoal_ITaskManager', $task_manager ); // file base name $base_name = basename($path); // retrieve class name from file name $pos = strpos($base_name, '.class.php'); $class_name = substr($base_name, 0, $pos); // include source file Charcoal_Framework::loadSourceFile($path); // create new instance $klass = new Charcoal_Class($class_name); $task = $klass->newInstance(); // check if th object implements Charcoal_Task interface if (!$task instanceof Charcoal_Task) { // Invoke Exception _throw(new Charcoal_InterfaceImplementException($task, 'Charcoal_Task')); } log_info('system, event, debug', "created task[{$task}] in module[{$obj_path}]"); // build object path for the task $obj_name = $task->getObjectName(); $task_path = s($obj_name . '@' . $obj_path->getVirtualPath()); // set task property $task->setObjectPath($task_path); $task->setTypeName('task'); $task->setSandbox($this->getSandbox()); // load object config $config = Charcoal_ConfigLoader::loadConfig($this->getSandbox(), $task_path, 'task'); $config = new Charcoal_Config($this->getSandbox()->getEnvironment(), $config); // configure task $task->configure($config); // log_info( 'system, event, debug', "task[$task] configured."); // regiser task $task_manager->registerTask($task_path, $task); log_info('system, event, debug', "task[{$class_name}] registered as: [{$task_path}]"); return $task; }
/** * returns event queue * * @return Charcoal_IEventQueue */ public function getEventQueue() { return $this->task_manager->getEventQueue(); }