Parses <ComponentType>

        @param node: Node containing the <ComponentType> element
        @type node: xml.etree.Element

        @raise ParseError: Raised when the component type does not have a
        name.

def parse_component_type(self, node):
        """
        Parses <ComponentType>

        @param node: Node containing the <ComponentType> element
        @type node: xml.etree.Element

        @raise ParseError: Raised when the component type does not have a
        name.
        """

        try:
            name = node.lattrib['name']
        except:
            self.raise_error('<ComponentType> must specify a name')

        if 'extends' in node.lattrib:
            extends = node.lattrib['extends']
        else:
            extends = None

        if 'description' in node.lattrib:
            description = node.lattrib['description']
        else:
            description = ''

        component_type = ComponentType(name, description, extends)
        self.model.add_component_type(component_type)

        self.current_component_type = component_type
        self.process_nested_tags(node)
        self.current_component_type = None