docs: def parse_component_by_typename(self, node, type_):
          """
          Parses components defined directly by component name.
  
          @param node: Node containing the <Component> element
          @type node: xml.etree.Element
  
          @param type_: Type of this component.
          @type type_: string
  
          @raise ParseError: Raised when the component does not have an id.
          """
          #print('Parsing component {0} by typename {1}'.format(node, type_))
          if 'id' in node.lattrib:
              id_ = node.lattrib['id']
          else:
              #self.raise_error('Component must have an id')
              id_ = node.tag #make_id()
  
          if 'type' in node.lattrib:
              type_ = node.lattrib['type']
          else:
              type_ = node.tag
  
          component = Component(id_, type_)
  
          if self.current_component:
              component.set_parent_id(self.current_component.id)
              self.current_component.add_child(component)
              
          else:
              self.model.add_component(component)
  
          for key in node.attrib:
              if key.lower() not in ['id', 'type']:
                  component.set_parameter(key, node.attrib[key])
  
          old_component = self.current_component
          self.current_component = component
          self.process_nested_tags(node, 'component')
          self.current_component = old_component