public function addArgument(__ModelServiceArgument &$argument)
 {
     $argument_index = $argument->getIndex();
     if (empty($argument_index)) {
         $argument_index = count($this->_arguments);
         $argument->setIndex($argument_index);
     }
     $this->_arguments[$argument_index] = $argument;
 }
 public function &_createModelServices(__ConfigurationSection &$section, $receiver_type, array $return_value)
 {
     if ($receiver_type == self::MODEL_RECEIVER_CLASS) {
         $receiver = $section->getAttribute('name');
     } else {
         $receiver = $section->getAttribute('id');
     }
     $subsections = $section->getSections();
     foreach ($subsections as $service_section) {
         switch (strtoupper($service_section->getName())) {
             case 'SERVICE':
                 $name = $service_section->getAttribute('name');
                 $class_method = $service_section->getAttribute('class-method');
                 $model_service_definition = new __ModelServiceDefinition($name);
                 if ($receiver_type == self::MODEL_RECEIVER_CLASS) {
                     $model_service_definition->setClass($receiver);
                 } else {
                     if ($receiver_type == self::MODEL_RECEIVER_INSTANCE) {
                         $model_service_definition->setInstance($receiver);
                     }
                 }
                 $model_service_definition->setService($class_method);
                 if ($service_section->hasAttribute('cache')) {
                     $model_service_definition->setCache(__ConfigurationValueResolver::toBool($service_section->getAttribute('cache')));
                 }
                 if ($service_section->hasAttribute('cache-ttl')) {
                     $model_service_definition->setCacheTtl($service_section->getAttribute('cache-ttl'));
                 }
                 if ($service_section->hasAttribute('remote')) {
                     $model_service_definition->setRemote($service_section->getAttribute('remote'));
                 }
                 $service_subsections = $service_section->getSections();
                 foreach ($service_subsections as &$service_subsection) {
                     switch (strtoupper($service_subsection->getName())) {
                         case 'PERMISSION':
                             $model_service_definition->setRequiredPermission($service_subsection->getAttribute('id'));
                             break;
                         case 'SERVICE-ARG':
                             $model_service_argument = new __ModelServiceArgument();
                             if ($service_subsection->hasAttribute('name')) {
                                 $model_service_argument->setName($service_subsection->getAttribute('name'));
                             } else {
                                 throw __ExceptionFactory::getInstance()->createException('Missing name attribute in model service argument definition: ' . $name);
                             }
                             if ($service_subsection->hasAttribute('index')) {
                                 $model_service_argument->setIndex($service_subsection->getAttribute('index'));
                             }
                             if ($service_subsection->hasAttribute('optional')) {
                                 $model_service_argument->setOptional(__ConfigurationValueResolver::toBool($service_subsection->getAttribute('optional')));
                             }
                             $model_service_definition->addArgument($model_service_argument);
                             unset($model_service_argument);
                             break;
                     }
                 }
                 if (key_exists($model_service_definition->getAlias(), $return_value)) {
                     throw new __ConfigurationException('Duplicate definition of model service: ' . $model_service_definition->getAlias());
                 } else {
                     $return_value[$model_service_definition->getAlias()] =& $model_service_definition;
                     unset($model_service_definition);
                 }
                 break;
         }
     }
     return $return_value;
 }
 public function addArgument(__ModelServiceArgument &$argument)
 {
     $this->_arguments[$argument->getIndex()] = $argument;
 }