예제 #1
0
        /// <summary>
        /// 成果物を示すノード artifacts, artifact をXML出力する
        /// </summary>
        /// <param name="artifacts">成果物リスト要素</param>
        /// <param name="sw">StreamWriter</param>
        private static void outputArtifactNodes(ArtifactsVO artifacts, StreamWriter sw)
        {
            // Console.WriteLine("start outputArtifacts()")

            sw.Write("<artifacts ");
            sw.Write(" targetProject='" + artifacts.targetProject + "' ");
            //	sw.Write(" created='" + artifacts.Created + "' ");
            sw.Write(" lastUpdated='" + artifacts.lastUpdated + "' ");
            sw.Write(" targetModel='" + artifacts.targetModel + "' ");
            sw.WriteLine(" >");

            foreach (ArtifactVO atf in artifacts.artifactList)
            {
                sw.Write("  <artifact ");
                sw.Write(" guid='" + atf.guid + "' ");
                sw.Write(" name='" + StringUtil.escapeXML(atf.name) + "' ");
                sw.Write(" project='" + StringUtil.escapeXML(atf.projectName) + "' ");
                sw.Write(" stereotype='" + StringUtil.escapeXML(atf.stereoType) + "' ");
                sw.WriteLine(">");
                sw.WriteLine("    <pathName>" + StringUtil.escapeXML(atf.pathName) + "</pathName>");
                sw.WriteLine("    <asciidocFile> " + StringUtil.escapeXML(atf.asciidocFilePath) + "</asciidocFile>");
                sw.WriteLine("  </artifact>");
            }

            sw.WriteLine("</artifacts>");
        }
예제 #2
0
        public void writeAllBehaviors(ArtifactsVO allArtifacts)
        {
            Console.Write("inserting table for behaviors ");

            try
            {
                conn.Open();
                recreateBehaviorTable();

                behaviorRecCount = 0;
                bhvParser        = new BehaviorParser();

                // トランザクションの開始
                // (トランザクションのcommitは指定行数がINSERTされる度にループ内で実施)
                transaction = conn.BeginTransaction();

                // 実装モデルを除いてインデックスに登録
                foreach (ArtifactVO atf in allArtifacts.getArtifactsExcludeImplModel())
                {
                    // ふるまいテーブルの書き込み(成果物フォルダ配下のクラス要素)
                    insertBehaviorsInArtifact(atf);
                }

                transaction.Commit();
                Console.WriteLine(".  done(" + behaviorRecCount + "records)");

                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #3
0
        /// <summary>
        /// 成果物リスト内に存在する全ての要素をIndexDBに登録する
        /// </summary>
        /// <param name="allArtifacts">全成果物VO</param>
        public void writeAllElements(ArtifactsVO allArtifacts)
        {
            Console.Write("inserting tables for element, attribute, method ");

            try
            {
                // DB接続をオープンする
                conn.Open();
                recreateElementTable();
                recreateAttrMthTable();

                // トランザクションの開始
                // (トランザクションのcommitは指定行数がINSERTされる度にループ内で実施)
                transaction = conn.BeginTransaction();

                // 実装モデルを除いてインデックスに登録
                foreach (ArtifactVO atf in allArtifacts.getArtifactsExcludeImplModel())
                {
                    // 要素テーブルの書き込み
                    insertElementsInArtifact(atf);
                    // 属性・操作テーブルの書き込み
                    insertAttrMthInArtifact(atf);
                }

                transaction.Commit();
                Console.WriteLine(".  done(" + elementRecCount + "records)");

                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #4
0
        /// <summary>
        /// 成果物リスト内に存在する全ての要素をIndexDBに登録する
        /// </summary>
        /// <param name="artifacts">成果物VOのリスト</param>
        public void writeAllElements(List <ArtifactVO> artifacts)
        {
            ArtifactsVO allArtifacts = new ArtifactsVO();

            allArtifacts.artifactList = artifacts;
            writeAllElements(allArtifacts);
        }
예제 #5
0
        public void outputMthAttrCsv(ArtifactsVO artifacts)
        {
            StreamWriter csvsw = null;

            try
            {
                csvsw = new StreamWriter(outputDir + "\\AllAttrMth.csv", false, System.Text.Encoding.GetEncoding("shift_jis"));

                // 1行目に列タイトルをつける
                csvsw.WriteLine("artifactGuid,packStereotype,pathName,elemGuid,elemType,elemName,elemStereotype,attrMthFlg,attrMthGuid,attrMthName,attrMthAlias,mthParamDesc");

                foreach (var atf in artifacts.artifactList)
                {
                    retrievePackage(atf.package, csvsw, OUTPUTTYPE_ATTRMTH);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Message=" + ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                if (csvsw != null)
                {
                    csvsw.Close();
                }
            }
        }
        public static void outputAllArtifactsFile(string outputDir, ArtifactsVO artifacts)
        {
            StreamWriter sw = null;

            try
            {
                //BOM無しのUTF8でテキストファイルを作成する
                sw = new StreamWriter(outputDir + "\\AllArtifacts.xml");
                sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?> ");
                sw.WriteLine("");

                outputArtifactNodes(artifacts, sw);
            }
            catch (Exception ex)
            {
                Console.WriteLine("----------------------------------------------");
                Console.WriteLine(ex.Message);
                Console.WriteLine("stacktrace: ");
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                }
            }
        }
        public void exportBehaviorText()
        {
            // 出力フォルダはプロジェクトファイルの配置パスとする
            string outputDir = ProjectSetting.getVO().projectPath;

            // 全成果物リストの読み込み
            string      artifactDir  = ProjectSetting.getVO().projectPath + "\\" + ProjectSetting.getVO().artifactsPath;
            ArtifactsVO allArtifacts = ArtifactsXmlReader.readAllArtifacts(artifactDir);

            // 成果物パッケージXMLファイル読み込み
            ArtifactXmlReader atfReader = new ArtifactXmlReader(artifactDir, true);

            for (int i = 0; i < allArtifacts.artifactList.Count; i++)
            {
                ArtifactVO atf = allArtifacts.artifactList[i];

                // 成果物VOのPathNameより出力が必要と判断された場合
                if (artifactPathNameIsValid(atf.pathName))
                {
                    // ルールに従い、GUIDから成果物ファイルの名称を取得
                    string artifactFileName = "atf_" + atf.guid.Substring(1, 36) + ".xml";
                    // 成果物ファイル名と出力フォルダを渡し、ふるまいテキストを出力させる
                    outputIndexedBehaviorText(atfReader, artifactFileName, outputDir);

                    Console.WriteLine("{0}:テキスト出力中 {1}", i + 1, artifactFileName);
                }
            }
        }
예제 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="allArtifacts"></param>
        private static void outputIndexHtml(ArtifactsVO allArtifacts, string asciidocDir)
        {
            // Asciidoc出力フォルダ上に、指定されたファイル名で出力する
            string filepath = asciidocDir + "\\" + "index.html";
            //BOM無しのUTF8でテキストファイルを作成する
            StreamWriter sw = new StreamWriter(filepath);

            sw.WriteLine(@"<!DOCTYPE html>
                <html>
                <head>
                    <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
                    <meta charset='utf-8' />
                    < title >ASW-DOM-BE Class documents page</ title >
                </head>
                <body>
            ");


            sw.WriteLine("<ul>");
            foreach (var atf in allArtifacts.artifactList)
            {
                sw.Write("<li>" + atf.pathName + " - <a href='" + atf.asciidocFilePath + "'>" + atf.name + "</a>");
                sw.WriteLine("</li>");
            }
            sw.WriteLine("</ul>");


            sw.WriteLine("</body>");
            sw.WriteLine("</html>");

            sw.Close();
        }
예제 #9
0
        public IndexMaker(ArtifactsVO artifacts, string projectDir)
        {
            ConnectorXmlReader connReader = new ConnectorXmlReader(projectDir);

            this.allArtifacts  = artifacts;
            this.allConnectors = connReader.readConnectorAll();
        }
예제 #10
0
        /// <summary>
        /// 成果物リストの読み込みとAsciidoc出力
        /// </summary>
        /// <param name="elementMode"></param>
        /// <param name="repositoryVO"></param>
        private static void readArtifactsAndWriteAsciidocs(string projectFilePath, bool elementMode, string elementGuid)
        {
            // .bdprjファイルの読み込み
            ProjectSetting.load(projectFilePath);

            // Asciidocの出力モードによる分岐
            if (elementMode)
            {
                // 要素1つ分のAsciidoc出力
            }
            else
            {
                // 全成果物リストの読み込み
                string      artifactDir  = ProjectSetting.getVO().projectPath + "\\" + ProjectSetting.getVO().artifactsPath;
                ArtifactsVO allArtifacts = readAllArtifacts(artifactDir);

                // indexDb作成処理
                // (Asciidoc出力処理の中でElementSearcherやConnectorSearcherを利用するため、
                // indexDb未作成だとここでエラーになってしまっていた)
                makeIndexDbIfNotExist(allArtifacts);

                // 全成果物分のAsciidoc出力
                outputAllArtifactAsciidoc(allArtifacts);

                // asciidocFilePath をセットした結果を AllArtifacts.xml ファイルに記録
                AllArtifactsXmlWriter.outputAllArtifactsFile(artifactDir, allArtifacts);
            }
        }
예제 #11
0
        /// <summary>
        /// 成果物配下のクラス(インタフェース、列挙)の操作のふるまい(method.behavior)をテキストに出力する
        /// </summary>
        /// <param name="artifacts">全成果物リスト</param>
        public void outputBehaviorsText(ArtifactsVO artifacts)
        {
            Console.WriteLine("start outputBehaviorsText():");

            StreamWriter csvsw = null;

            try
            {
                csvsw = new StreamWriter(outputDir + "\\AllBehaviors.txt", false, System.Text.Encoding.GetEncoding("utf-8"));

                // 成果物のうち実装モデルを除いたものが対象
                foreach (var atf in artifacts.getArtifactsExcludeImplModel())
                {
                    retrieveElementsInArtifact(atf, csvsw);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (csvsw != null)
                {
                    csvsw.Close();
                }
            }
        }
        /// <summary>
        /// AllArtficats.xml を読み、ArtifactsVO を返却する
        /// ただし、この処理ではまだ成果物XMLファイルを読んでいないので、
        /// ArtifactVO には package配下の情報は入っていない
        /// </summary>
        /// <param name="artifactDir"></param>
        /// <returns>読み込まれた全成果物情報</returns>
        public static ArtifactsVO readAllArtifacts(string artifactDir)
        {
            ArtifactsVO retArtifacts     = new ArtifactsVO();
            string      allArtifactsFile = "AllArtifacts.xml";
            string      fileName         = artifactDir + "\\" + allArtifactsFile;

            // XMLテキストをロードする
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(fileName);

            // artifactsノードに移動する
            XmlNode artifactsNode = xmlDoc.SelectSingleNode("artifacts");

            foreach (XmlAttribute atfAttr in artifactsNode.Attributes)
            {
                switch (atfAttr.Name)
                {
                case "targetProject":
                    if (atfAttr.Value != null && atfAttr.Value != "")
                    {
                        retArtifacts.targetProject = atfAttr.Value;
                    }
                    break;

                case "lastUpdated":
                    if (atfAttr.Value != null && atfAttr.Value != "")
                    {
                        retArtifacts.lastUpdated = atfAttr.Value;
                    }
                    break;

                case "targetModel":
                    if (atfAttr.Value != null && atfAttr.Value != "")
                    {
                        retArtifacts.targetModel = atfAttr.Value;
                    }
                    break;
                }
            }

            List <ArtifactVO> artifacts = new List <ArtifactVO>();

            foreach (XmlNode atfNode in artifactsNode.ChildNodes)
            {
                if (atfNode.Name == "artifact")
                {
                    artifacts.Add(ArtifactXmlReader.readArtifactNode(atfNode));
                }
            }

            retArtifacts.artifactList = artifacts;

            return(retArtifacts);
        }
        /// <summary>
        /// 全成果物VOを取得
        /// </summary>
        /// <param name="projectName"></param>
        /// <returns></returns>
        public ArtifactsVO getAllArtifacts(string projectName)
        {
            // 全成果物オブジェクトを初期化し、データをセット
            ArtifactsVO retArtifacts = new ArtifactsVO();

            retArtifacts.targetProject = projectName;
            retArtifacts.targetModel   = "";
            retArtifacts.artifactList  = getArtifactList();

            return(retArtifacts);
        }
예제 #14
0
        /// <summary>
        /// IndexDB情報の作成
        /// </summary>
        private static void makeIndexDbIfNotExist(ArtifactsVO allArtifacts)
        {
            string indexDbFilePath = ProjectSetting.getVO().projectPath + "\\" + ProjectSetting.getVO().dbName;

            // IndexDBファイルが存在してないなら
            if (!File.Exists(indexDbFilePath))
            {
                // Index情報未作成と見なして、IndexDB情報の作成処理を呼び出す
                IndexMaker indexMaker = new IndexMaker(allArtifacts, ProjectSetting.getVO().projectPath);
                indexMaker.doMakeIndex();
                indexMaker.doMakeElementFiles();
            }
        }
예제 #15
0
        public void readDataBase(string eapfile, string projectName)
        {
            OleDbConnection conn = new OleDbConnection();
            OleDbCommand    comm = new OleDbCommand();

            try
            {
                // MDB名など
                //conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=" + eapfile; (Access Connector Environment 2016)
                //conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" + eapfile; (Access Connector Environment 2013)
                //conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + eapfile; (Access Connector Environment 2010)
                conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + eapfile; // Jet OleDB 4.0(32bit)

                // 接続する
                conn.Open();

                // DBからの成果物情報読み込みクラスを起動
                ArtifactDbReader atfReader = new ArtifactDbReader(conn);
                this.allArtifacts = atfReader.getAllArtifacts(projectName);

                // パッケージツリーXMLファイルを出力する
                AllPackagesExporter packagesExporter = new AllPackagesExporter(outputDir);
                packagesExporter.outputPackageXml(atfReader.rootPackages);

                // 全接続情報リストXMLファイルを出力する
                AllConnectorsExporter expConn = new AllConnectorsExporter(conn, atfReader.AllPackageMap);
                expConn.outputAllConnectors(outputDir);
                this.allconnectors = expConn.allConnectorList;

                // 全相互参照(xref)リストのCSVファイルを出力する
                AllXrefsCsvExporter xrefsExp = new AllXrefsCsvExporter(conn);
                xrefsExp.outputAllCrossRefs(outputDir);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("stack trace: ");
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                // 接続を解除します。
                conn.Close();
            }
        }
예제 #16
0
        /// <summary>
        /// 全成果物のAsciidocファイルを出力する
        /// </summary>
        /// <param name="projectFile"></param>
        private static void outputAllArtifactAsciidoc(ArtifactsVO allArtifacts)
        {
            // Asciidoc出力writerの生成
            string asciidocDir = ProjectSetting.getVO().projectPath + "\\" + "asciidocs";
            ArtifactAsciidocWriter asciidocWriter = new ArtifactAsciidocWriter(asciidocDir);

            for (int i = 0; i < allArtifacts.artifactList.Count; i++)
            {
                ArtifactVO atf = allArtifacts.artifactList[i];

                // 成果物のAsciidoc出力
                string adocFilePath = asciidocWriter.outputAsciidocFile(atf);

                // 出力されたAsciidocのファイル名を成果物VOに登録(処理後、AllArtifacts.xmlを更新する)
                atf.asciidocFilePath = adocFilePath;
                Console.WriteLine("{0}:ドキュメント出力 {1}", i + 1, adocFilePath);
            }

            // 最後に、このドキュメント一覧を見るためのindex.htmlを出力する
            outputIndexHtml(allArtifacts, asciidocDir);
        }
예제 #17
0
        /// <summary>
        /// 成果物XMLを全て読み込み、結果のArtifactsVOを返却する
        /// </summary>
        /// <param name="artifactDir"></param>
        /// <returns></returns>
        private static ArtifactsVO readAllArtifacts(string artifactDir)
        {
            // AllArtifacts.xml を読み込み、成果物の内容が未セット状態のartifactListを設定する
            ArtifactsVO allArtifacts = ArtifactsXmlReader.readAllArtifacts(artifactDir);

            // 成果物パッケージXMLファイル読み込み用のReaderを生成する
            ArtifactXmlReader atfReader = new ArtifactXmlReader(artifactDir, true);

            for (int i = 0; i < allArtifacts.artifactList.Count; i++)
            {
                ArtifactVO atf = allArtifacts.artifactList[i];

                // 成果物XMLファイルの読み込み
                string     artifactFileName = "atf_" + atf.guid.Substring(1, 36) + ".xml";
                ArtifactVO artifact         = atfReader.readArtifactFile(artifactFileName);

                // 読み込んだ結果の成果物VOでListの中身を置き換える
                allArtifacts.artifactList[i] = artifact;
            }

            return(allArtifacts);
        }
예제 #18
0
        public void CloseOnLoadComplete(string projectPath, string dbfile)
        {
            if (!this.loaded)
            {
                Int32 count;
                for (count = 0; count < 1000; count++)
                {
                    if (this.loaded)
                    {
                        break;
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }
            }

            // このプログラム(.exe)が置かれたフォルダを取得
            //string currentDir = System.Windows.Forms.Application.StartupPath ;

            //ファイルを開いて終わるまで待機する
            // Process p = Process.Start( currentDir + "\\ElementIndexer.exe", projectPath + " " + dbfile );
            //					MessageBox.Show("内部データベースを構築します。\n構築処理が完了後、OKボタンを押してください");

            try
            {
                ProjectSetting.load(projectPath + "\\project.bdprj");

                // 全成果物のリストを読み込み
                string            artifactsDir = projectPath + "\\" + ProjectSetting.getVO().artifactsPath;
                List <ArtifactVO> artifacts    = ArtifactsXmlReader.readArtifactList(artifactsDir, ProjectSetting.getVO().artifactsFile);

                // 全成果物リストの内容を成果物XMLファイルで埋める
                ArtifactXmlReader atfReader = new ArtifactXmlReader(artifactsDir);
                foreach (ArtifactVO atf in artifacts)
                {
                    // 成果物別のXMLファイルの内容読み込み
                    atfReader.readArtifactDesc(atf);
                }

                ArtifactsVO allArtifacts = new ArtifactsVO();
                allArtifacts.artifactList = artifacts;

                ConnectorXmlReader connReader    = new ConnectorXmlReader(projectPath);
                List <ConnectorVO> allConnectors = connReader.readConnectorAll();

                IndexDbWriter dbWriter = new IndexDbWriter(projectPath, ProjectSetting.getVO().dbName);

                // 全接続情報をDBに登録
                dbWriter.writeAllConnector(allConnectors);
                // 全要素情報をDBに登録
                dbWriter.writeAllElements(allArtifacts);
                // 全ふるまい情報をDBに登録
                dbWriter.writeAllBehaviors(allArtifacts);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


            // サブプロセスが終了後、必要なくなったところでCLOSE
//            p.WaitForExit();

            this.Close();
        }