/// <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>(); PackageVO pkg = null; foreach (XmlNode pkgNode in parentNode.ChildNodes) { if ("package".Equals(pkgNode.Name)) { pkg = readPackageNode(pkgNode); readPackages(pkg, pkgNode); retList.Add(pkg); } // package配下で elementノードを見つけたら if ("element".Equals(pkgNode.Name)) { // elementノード配下の情報から、 ElementVO を返却する ElementVO elem = ElementsXmlReader.readElement(pkgNode, sortByPosFlg); elem.packageId = pkgvo.packageId; // 強いて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; }
/// <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.sortChildNodes(); //pkgvo.sortChildPackages(); //pkgvo.sortElements(); } else { pkgvo.sortChildNodesGuid(); //pkgvo.sortChildPackagesGUID(); //pkgvo.sortElementsGUID(); } }