protected function _getComponentEndTagCode(__ComponentSpec &$component_spec)
 {
     $return_value = "<?php\n";
     $return_value .= '$component_render_' . $this->_view_code . '->markComponentEndTag($component_specs_' . $this->_view_code . '["' . $component_spec->getId() . '"]);' . "\n";
     $return_value .= "?>";
     return $return_value;
 }
 /**
  * Resolve an unique identifier for a component (using the component spec identifier and the component index (if applicable) as seed)
  * 
  * @param __ComponentSpec $component_spec
  * @param $component_index
  * @return string
  */
 protected function _resolveComponentId(__ComponentSpec $component_spec, $component_index = null)
 {
     $return_value = 'c' . $component_spec->getId();
     if ($component_index != null) {
         $return_value .= '_' . $component_index;
     }
     return $return_value;
 }
 protected function _registerComponentSpec(__ComponentSpec &$component_spec)
 {
     if ($this->_properties_stack->count() == 0 && $this->_component_specs_stack->count() > 0) {
         $current_component_spec = $this->_component_specs_stack->peek();
         $current_component_class = $current_component_spec->getClass();
         if (!is_subclass_of($current_component_class, '__IContainer')) {
             throw __ExceptionFactory::getInstance()->createException('ERR_UI_COMPONENT_IS_NOT_CONTAINER', array($current_component_spec->getTag(), $component_spec->getTag()));
         }
     }
     $this->_component_specs[$component_spec->getId()] =& $component_spec;
 }