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.

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