Exemple #1
0
        /// <summary>
        /// 成果物パッケージの読み込み
        /// </summary>
        /// <param name="parentNode">packageを子として持つ親のartifactノード</param>
        /// <returns>読み込まれた成果物のパッケージVO(常に1つ)</returns>
        private void readRootPackage(PackageVO rootPackage, XmlNode parentNode)
        {
            // 成果物のルートパッケージから再帰的に子パッケージを読み込み
            readPackages(rootPackage, parentNode);

            // ソート順指定フラグにより、ソート処理が分かれる
            if (this.sortByPosFlg)
            {
                rootPackage.sortChildNodes();
            }
            else
            {
                rootPackage.sortChildNodesGuid();
            }

            return;
        }
        /// <summary>
        /// 成果物パッケージの読み込み
        /// </summary>
        /// <param name="parentNode">packageを子として持つ親のartifactノード</param>
        /// <returns>読み込まれた成果物のパッケージVO(常に1つ)</returns>
        private PackageVO readRootPackage(XmlNode parentNode)
        {
            PackageVO pkgvo = null;

            foreach (XmlNode pkgNode in parentNode.ChildNodes)
            {
                if ("package".Equals(pkgNode.Name))
                {
                    pkgvo = readPackageNode(pkgNode);

                    try {
                        // 成果物のルートパッケージから再帰的に子パッケージを読み込み
                        readPackages(pkgvo, pkgNode);

                        // ソート順指定フラグにより、ソート処理が分かれる
                        if (this.sortByPosFlg)
                        {
                            pkgvo.sortChildNodes();
                            //pkgvo.sortChildPackages();
                            //pkgvo.sortElements();
                        }
                        else
                        {
                            pkgvo.sortChildNodesGuid();
                            //pkgvo.sortChildPackagesGUID();
                            //pkgvo.sortElementsGUID();
                        }
                    }
                    catch (Exception ex) {
                        Console.WriteLine(ex.Message);
                        Console.WriteLine(ex.StackTrace);
                        throw ex;
                    }
                }
            }

            return(pkgvo);
        }
        /// <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();
            }
        }