private void readPackages(PackageVO pkgvo, XmlNode parentNode) { List <PackageVO> retList = new List <PackageVO>(); List <ElementVO> retElementList = new List <ElementVO>(); foreach (XmlNode pkgNode in parentNode.ChildNodes) { if ("package".Equals(pkgNode.Name)) { PackageVO pkg = new PackageVO(); foreach (XmlAttribute attr in pkgNode.Attributes) { switch (attr.Name) { case "name": pkg.name = attr.Value; break; case "guid": pkg.guid = attr.Value; break; case "alias": pkg.alias = attr.Value; break; case "stereotype": pkg.stereoType = attr.Value; break; case "TPos": Int32 p; if (!Int32.TryParse(attr.Value, out p)) { p = 0; } pkg.treePos = p; break; case "changed": pkg.changed = attr.Value[0]; break; } } readPackages(pkg, pkgNode); retList.Add(pkg); } if ("element".Equals(pkgNode.Name)) { ElementVO elem = new ElementVO(); foreach (XmlAttribute attr in pkgNode.Attributes) { switch (attr.Name) { case "name": elem.name = attr.Value; break; case "guid": elem.guid = attr.Value; break; case "type": elem.eaType = attr.Value; break; case "alias": elem.alias = attr.Value; break; case "stereotype": elem.stereoType = attr.Value; break; case "tpos": Int32 p; if (!Int32.TryParse(attr.Value, out p)) { p = 0; } elem.treePos = p; break; case "changed": elem.changed = attr.Value[0]; break; } } readElementContents(elem, pkgNode); retElementList.Add(elem); } } pkgvo.childPackageList = retList; pkgvo.elements = retElementList; // ConnectionSercherがいない場合は DiffMakerからの呼び出しとして、GUIDでのソートを行う if (this.connSearcher != null) { pkgvo.sortChildPackages(); } else { pkgvo.sortChildPackagesGUID(); } if (this.connSearcher != null) { pkgvo.sortElements(); } else { pkgvo.sortElementsGUID(); } }
/// <summary> /// パッケージの読み込み(再帰処理) /// 引数のパッケージノード以下を再帰的に読み込み、 Package, Element をVOに読み込む /// </summary> /// <param name="pkgvo">(out)パッケージのVO</param> /// <param name="parentNode">(in)対象のパッケージのXmlNode</param> private void readPackages(PackageVO pkgvo, XmlNode parentNode) { List <PackageVO> retList = new List <PackageVO>(); List <ElementVO> retElementList = new List <ElementVO>(); List <DiagramVO> retDiagramList = new List <DiagramVO>(); foreach (XmlNode pkgNode in parentNode.ChildNodes) { if ("package".Equals(pkgNode.Name)) { PackageVO pkg = new PackageVO(); foreach (XmlAttribute attr in pkgNode.Attributes) { switch (attr.Name) { case "name": pkg.name = attr.Value; break; case "guid": pkg.guid = attr.Value; break; case "alias": pkg.alias = attr.Value; break; case "stereotype": pkg.stereoType = attr.Value; break; case "TPos": pkg.treePos = readAttributeIntValue(attr); break; case "changed": pkg.changed = readAttributeCharValue(attr); break; } } readPackages(pkg, pkgNode); retList.Add(pkg); } // package配下で elementノードを見つけたら if ("element".Equals(pkgNode.Name)) { // elementノード配下の情報から、 ElementVO を返却する ElementVO elem = ElementsXmlReader.readElement(pkgNode, sortByPosFlg); // 強いてelement毎のXMLファイルを読む必要がある場合のみ if (elementFileReadFlg) { // 強いてelement毎のXMLファイルを読む必要がある場合のみ if (ElementsXmlReader.existElementFile(elem.guid)) { elem = ElementsXmlReader.readElementFile(elem.guid); } } retElementList.Add(elem); } // package配下で diagram ノードを見つけたら if ("diagram".Equals(pkgNode.Name)) { retDiagramList.Add(readDiagramNode(pkgNode)); } } pkgvo.childPackageList = retList; pkgvo.elements = retElementList; pkgvo.diagrams = retDiagramList; // ソート順指定フラグにより、ソート処理が分かれる if (sortByPosFlg) { pkgvo.sortChildPackages(); pkgvo.sortElements(); } else { pkgvo.sortChildPackagesGUID(); pkgvo.sortElementsGUID(); } }