public function &createComponentSpec($tag_name) { $return_value = null; $tag_name = strtolower($tag_name); if (key_exists($tag_name, $this->_component_tags)) { $component_tag = $this->_component_tags[$tag_name]; $component_class = $component_tag->getComponentClass(); $component_writer_class = $component_tag->getComponentWriterClass($this->_client); $component_writer_decorators_classes = $component_tag->getComponentWriterDecoratorClasses($this->_client); $return_value = new __ComponentSpec($tag_name, $component_class); if ($component_writer_class != null) { $component_writer = new $component_writer_class(); foreach ($component_writer_decorators_classes as $component_writer_decorators_class) { $component_decorator = new $component_writer_decorators_class($component_writer); $component_writer = $component_decorator; unset($component_decorator); } $view_definition = $component_tag->getViewDefinition($this->_client); if ($view_definition != null) { if ($component_writer instanceof __ICompositeWriter) { $component_writer->setViewDefinition($view_definition); } else { throw __ExceptionFactory::getInstance()->createException('Class ' . $component_writer_class . ' must implement __ICompositeWriter in order to have a view assigned to.'); } } $return_value->setWriter($component_writer); } $component_interface_spec = $component_tag->getComponentInterfaceSpec(); if ($component_interface_spec != null) { $return_value->setComponentInterfaceSpec($component_interface_spec); } } else { throw __ExceptionFactory::getInstance()->createException('ERR_UNKNOW_UI_COMPONENT_TAG', array($tag_name)); } return $return_value; }