def __init__(self, xml_content): """Inicializador que instancia um objeto de alguma classe "concreta" relacionada ao Freemind. Argumentos ----------- xml_content é o conteúdo do mapa mental em formato string. Exceções --------- UnsupportedVersionException - lançada caso nenhuma classe dê suporte à versão do Freemind utilizada para criar o mapa mental. A checagem de suporte à versão precisa ser repetida neste nível porque pode haver um esquema RelaxNG, mas as operações podem não estar implementadas na hierarquia de classes do gerador. """ base_class = BaseFreemind(xml_content) self._map_version = base_class.extract_map_version() try: cls_object = self._search_concrete_class() self._freemind_instance = cls_object(xml_content) except UnsupportedVersionException, exception: raise exception.__class__(exception.message)
def _extract_graph_node_attributes(self, xml_node): """Retorna os dados que devem ser atribuídos a um nó no grafo. Argumentos ----------- xml_node é o nó a ser analisado. """ # Para saber como extrair os dados do nó é necessário conhecer seu tipo. node_type = BaseFreemind.guess_node_type(xml_node) node_data = None if node_type == LinkNode.TYPE: node_data = GenericNode.has_structure(BaseFreemind.extract_node_text(xml_node), LinkNode.GLOBAL_STRUCTURE).groupdict() elif node_type == InfoNode.TYPE: node_data = GenericNode.has_structure(BaseFreemind.extract_node_text(xml_node), InfoNode.GLOBAL_STRUCTURE).groupdict() else: node_data = GenericNode.has_structure(BaseFreemind.extract_node_text(xml_node), StepNode.GLOBAL_STRUCTURE).groupdict() node_data['notes'] = self._freemind_instance.extract_comments(xml_node) return node_data
def build_graphs(self): """Constrói um grafo para cada cenário/caso de uso existente no mapa mental.""" self._graph_list = [] scenario_list = self._freemind_instance.extract_scenarios() for scenario in scenario_list: # Extrai os dados do caso de uso para adicionar como dados do primeiro nó do grafo. scenario_data = GenericNode.has_structure(BaseFreemind.extract_node_text(scenario), UCNode.GLOBAL_STRUCTURE) # Cria o grafo, adicionando os dados do cenário/caso de uso no primeiro # nó (raiz) e adiciona os demais nós recursivamente, utilizando busca em # profundidade. self._graph_list.append(ScenarioGraph(scenario_data.groupdict())) self._depth_first_builder(scenario, self._graph_list[-1], 0)