private function _parseValueNode(__ConfigurationSection $node_value, $property_name, $instance_id)
 {
     $return_value = null;
     if ($node_value->getName() == 'ref') {
         if ($node_value->hasAttribute('id')) {
             $return_value = new __InstanceReference();
             $return_value->setReferenceId($node_value->getAttribute('id'));
         }
     } else {
         if ($node_value->getName() == 'context-instance') {
             $return_value = $this->_createInstanceDefinition($node_value);
             $this->_addInstanceDefinition($return_value);
         } else {
             if ($node_value->getName() == 'list') {
                 $return_value = array();
                 $value_nodes = $node_value->getSections();
                 foreach ($value_nodes as $value_node) {
                     $key = null;
                     if ($value_node->getName() == 'entry') {
                         if ($value_node->hasAttribute('key')) {
                             $key = $value_node->getAttribute('key');
                         }
                         $value_section = $value_node->getSections();
                         if (count($value_section) == 1) {
                             $value_node = current($value_section);
                         } else {
                             throw new __ConfigurationException("Wrong entry content for property " . $property_name . " on instance " . $instance_id);
                         }
                     }
                     $value = $this->_parseValueNode($value_node, $property_name, $instance_id);
                     if ($key !== null) {
                         $return_value[$key] = $value;
                     } else {
                         $return_value[] = $value;
                     }
                 }
             } else {
                 if ($node_value->getName() == 'value') {
                     $return_value = $this->_getPlainTextContent($node_value);
                 } else {
                     if ($node_value->getName() == 'null') {
                         $return_value = null;
                     }
                 }
             }
         }
     }
     return $return_value;
 }
 protected function _setupFlow(__IFlowState &$flow_state, __ConfigurationSection &$section)
 {
     $subsections = $section->getSections();
     foreach ($subsections as $flow_section) {
         switch (strtoupper($flow_section->getName())) {
             case 'TRANSITION':
                 $transition = $this->_parseTransitionNode($flow_section);
                 $flow_state->addTransition($transition);
                 break;
             case 'SET':
                 $attribute = $this->_parseAttribute($flow_section);
                 $flow_state->addAttribute($attribute);
                 break;
             case 'IF':
                 $transition = $this->_parseIfNode($flow_section);
                 $flow_state->addTransition($transition);
                 break;
             case 'IF-PERMISSION':
                 $transition = $this->_parseIfPermissionNode($flow_section);
                 $flow_state->addTransition($transition);
                 break;
             default:
                 throw new __ConfigurationException('Unexpected tag ' . $flow_section->getName() . ' as child of ' . $section->getName());
                 break;
         }
     }
     return $flow_state;
 }