def load(self, fromfile): global _versionWithSingleHeader, _versionWithDifferentHeaders print('info: Loading alphabet file \'{0}\' ...'.format(fromfile)) if not os.path.exists(fromfile): print('error: Alphabet file \'{0}\' does not exist!'.format(fromfile)) return False dom = parse(fromfile) d = dom.getElementsByTagName('alphabet') if not d: print('error: Alphabet file is wrong formatted! There are no tag <alphabet>...</alphabet>') return False data = d[0] if data.hasAttribute('version'): versionText = data.getAttribute('version') elif data.hasAttribute('Version'): versionText = data.getAttribute('Version') else: versionText = '' if not versionText or '.' not in versionText: self.version = tuple(_versionWithSingleHeader) versionText = globals.versionToStr(self.version) print('warning: Alphabet file has no version. Default it to {0}'.format(versionText)) else: self.version = globals.versionFromStr(versionText) print('info: Alphabet file version is {0}'.format(versionText)) if self.version >= _versionWithDifferentHeaders: if not data.hasAttribute('headerTree'): print('error: No xml attribute <alphabet ... headerTree=\"...\" ...> in alphabet file') return False header = data.getAttribute('headerTree') if not header: print('error: Xml attribute <alphabet ... headerTree=\"\" ...> is empty in alphabet file') return False self.headerTree = header if not data.hasAttribute('headerLibrary'): print('error: No xml attribute <alphabet ... headerLibrary=\"...\" ...> in alphabet file') return False header = data.getAttribute('headerLibrary') if not header: print('error: Xml attribute <alphabet ... headerLibrary=\"\" ...> is empty in alphabet file') return False self.headerLibrary = header else: if not data.hasAttribute('header'): print('error: No xml attribute <alphabet ... header=\"...\" ...> in alphabet file') return False header = data.getAttribute('header') if not header: print('error: Xml attribute <alphabet ... header=\"\" ...> is empty in alphabet file') return False self.headerTree = header res = False classes = data.getElementsByTagName('class') if not classes: print('error: No classes in alphabet file. There must be tags <class>...</class>.') return False self.classes.clear() for cls in classes: res = (self.__parseClass(cls) or res) if res: self.path = fromfile return res
def __loadTree(self, project, bt, nodes, filename): global _versionWithUids if not filename: return 0, [] filename = toUnixPath(os.path.normpath(filename)) print('info: Parsing \"{0}\" ...'.format(filename)) dom = parse(filename) data = dom.getElementsByTagName(project.alphabet.headerTree) if not data: print('error: Wrong tree file!') print('') return 0, [] mainNode = data[0] if mainNode.hasAttribute('Version'): versionText = mainNode.getAttribute('Version') elif mainNode.hasAttribute('version'): versionText = mainNode.getAttribute('version') else: versionText = '' if not versionText or '.' not in versionText: version = tuple(_versionWithUids) versionText = globals.versionToStr(version) print('info: File has no version. Default it to {0}'.format(versionText)) else: version = globals.versionFromStr(versionText) print('info: File version is {0}'.format(versionText)) # trying to read diagram file with saved diagram items positions: fname, _ = os.path.splitext(filename) diagram_file = fname + '.dgm' if os.path.exists(diagram_file): diagramData = parse(diagram_file).getElementsByTagName(project.alphabet.headerTree) if not diagramData: mainDiagramNode = None else: mainDiagramNode = diagramData[0] else: mainDiagramNode = None # getting all tags for main classes: xmlNodes = dict() topClasses = project.alphabet.getClasses(True) for t in topClasses: cls = topClasses[t] xml_nodes = mainNode.getElementsByTagName(cls.tag) if xml_nodes and cls.tag not in xmlNodes: if mainDiagramNode is not None: diagramNodes = mainDiagramNode.getElementsByTagName(cls.tag) else: diagramNodes = None xmlNodes[cls.tag] = [cls.name, xml_nodes, diagramNodes] # nodes = data[0].getElementsByTagName('Node') num_loaded = 0 if not xmlNodes: # not nodes: print('warning: Tree \"{0}\" is empty!'.format(filename)) return 0, [filename] for tag in xmlNodes: cls = project.alphabet.getClass(xmlNodes[tag][0]) xml_nodes = xmlNodes[tag][1] diagNodes = xmlNodes[tag][2] i = 0 for xml_node in xml_nodes: if xml_node.parentNode is mainNode: if diagNodes is not None and i < len(diagNodes) and diagNodes[i].parentNode is mainDiagramNode: diagramNode = diagNodes[i] else: diagramNode = None newNode = self.__parseNode(version, project, bt, nodes, filename, cls, xml_node, None, diagramNode) if newNode is not None: num_loaded += 1 i += 1 if num_loaded < 1: print('warning: no trees were loaded!') print('ok: Parsing complete.') print('') return num_loaded, [filename]
def load(self, fromfile): global _versionWithSingleHeader, _versionWithDifferentHeaders print('info: Loading alphabet file \'{0}\' ...'.format(fromfile)) if not os.path.exists(fromfile): print('error: Alphabet file \'{0}\' does not exist!'.format( fromfile)) return False dom = parse(fromfile) d = dom.getElementsByTagName('alphabet') if not d: print( 'error: Alphabet file is wrong formatted! There are no tag <alphabet>...</alphabet>' ) return False data = d[0] if data.hasAttribute('version'): versionText = data.getAttribute('version') elif data.hasAttribute('Version'): versionText = data.getAttribute('Version') else: versionText = '' if not versionText or '.' not in versionText: self.version = tuple(_versionWithSingleHeader) versionText = globals.versionToStr(self.version) print('warning: Alphabet file has no version. Default it to {0}'. format(versionText)) else: self.version = globals.versionFromStr(versionText) print('info: Alphabet file version is {0}'.format(versionText)) if self.version >= _versionWithDifferentHeaders: if not data.hasAttribute('headerTree'): print( 'error: No xml attribute <alphabet ... headerTree=\"...\" ...> in alphabet file' ) return False header = data.getAttribute('headerTree') if not header: print( 'error: Xml attribute <alphabet ... headerTree=\"\" ...> is empty in alphabet file' ) return False self.headerTree = header if not data.hasAttribute('headerLibrary'): print( 'error: No xml attribute <alphabet ... headerLibrary=\"...\" ...> in alphabet file' ) return False header = data.getAttribute('headerLibrary') if not header: print( 'error: Xml attribute <alphabet ... headerLibrary=\"\" ...> is empty in alphabet file' ) return False self.headerLibrary = header else: if not data.hasAttribute('header'): print( 'error: No xml attribute <alphabet ... header=\"...\" ...> in alphabet file' ) return False header = data.getAttribute('header') if not header: print( 'error: Xml attribute <alphabet ... header=\"\" ...> is empty in alphabet file' ) return False self.headerTree = header res = False classes = data.getElementsByTagName('class') if not classes: print( 'error: No classes in alphabet file. There must be tags <class>...</class>.' ) return False self.classes.clear() for cls in classes: res = (self.__parseClass(cls) or res) if res: self.path = fromfile return res
def __loadTree(self, project, bt, nodes, filename): global _versionWithUids if not filename: return 0, [] filename = toUnixPath(os.path.normpath(filename)) print('info: Parsing \"{0}\" ...'.format(filename)) dom = parse(filename) data = dom.getElementsByTagName(project.alphabet.headerTree) if not data: print('error: Wrong tree file!') print('') return 0, [] mainNode = data[0] if mainNode.hasAttribute('Version'): versionText = mainNode.getAttribute('Version') elif mainNode.hasAttribute('version'): versionText = mainNode.getAttribute('version') else: versionText = '' if not versionText or '.' not in versionText: version = tuple(_versionWithUids) versionText = globals.versionToStr(version) print('info: File has no version. Default it to {0}'.format( versionText)) else: version = globals.versionFromStr(versionText) print('info: File version is {0}'.format(versionText)) # trying to read diagram file with saved diagram items positions: fname, _ = os.path.splitext(filename) diagram_file = fname + '.dgm' if os.path.exists(diagram_file): diagramData = parse(diagram_file).getElementsByTagName( project.alphabet.headerTree) if not diagramData: mainDiagramNode = None else: mainDiagramNode = diagramData[0] else: mainDiagramNode = None # getting all tags for main classes: xmlNodes = dict() topClasses = project.alphabet.getClasses(True) for t in topClasses: cls = project.alphabet.getClass(t) xml_nodes = mainNode.getElementsByTagName(cls.tag) if xml_nodes and cls.tag not in xmlNodes: if mainDiagramNode is not None: diagramNodes = mainDiagramNode.getElementsByTagName( cls.tag) else: diagramNodes = None xmlNodes[cls.tag] = [cls.name, xml_nodes, diagramNodes] # nodes = data[0].getElementsByTagName('Node') num_loaded = 0 if not xmlNodes: # not nodes: print('warning: Tree \"{0}\" is empty!'.format(filename)) return 0, [filename] for tag in xmlNodes: cls = project.alphabet.getClass(xmlNodes[tag][0]) xml_nodes = xmlNodes[tag][1] diagNodes = xmlNodes[tag][2] i = 0 for xml_node in xml_nodes: if xml_node.parentNode is mainNode: if diagNodes is not None and i < len( diagNodes ) and diagNodes[i].parentNode is mainDiagramNode: diagramNode = diagNodes[i] else: diagramNode = None newNode = self.__parseNode(version, project, bt, nodes, filename, cls, xml_node, None, diagramNode) if newNode is not None: num_loaded += 1 i += 1 if num_loaded < 1: print('warning: no trees were loaded!') print('ok: Parsing complete.') print('') return num_loaded, [filename]