/// <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>"); }
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); } }
/// <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); } }
/// <summary> /// 成果物リスト内に存在する全ての要素をIndexDBに登録する /// </summary> /// <param name="artifacts">成果物VOのリスト</param> public void writeAllElements(List <ArtifactVO> artifacts) { ArtifactsVO allArtifacts = new ArtifactsVO(); allArtifacts.artifactList = artifacts; writeAllElements(allArtifacts); }
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); } } }
/// <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(); }
public IndexMaker(ArtifactsVO artifacts, string projectDir) { ConnectorXmlReader connReader = new ConnectorXmlReader(projectDir); this.allArtifacts = artifacts; this.allConnectors = connReader.readConnectorAll(); }
/// <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); } }
/// <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); }
/// <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(); } }
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(); } }
/// <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); }
/// <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); }
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(); }