private void writeDiagramPlantUml(DiagramVO diag, StreamWriter sw) { sw.WriteLine("### ダイアグラム: " + diag.name); sw.WriteLine(""); sw.WriteLine("[plantuml, img-diag-" + diag.guid.Substring(1, 13) + ", svg]"); sw.WriteLine("--"); sw.WriteLine("@startuml"); var elemNameHash = new Dictionary <int, string>(); foreach (DiagramObjectVO diaObj in diag.diagramObjects) { // ダイアグラムオブジェクトのobjectIdをキーとしてt_elementから要素を取りに行く ElementSearchItem elemSearchItem = this.elementSearcher.findByElementId(diaObj.objectId); // 取得できなかったらインデックスに登録される対象の要素タイプではないので、class文を出す必要はない // と思っていたらNoteはインデックスに登録されており、Noteは本文をnameにする必要があるので別ロジック if (elemSearchItem != null) { // 要素の型が "Note" の場合のみ if (elemSearchItem.elemType == "Note") { // note 要素を出力する(ひとまず全てフローティングにしておく) ElementVO elem = ElementsXmlReader.readElementFile(elemSearchItem.elemGuid); sw.WriteLine("note \"" + filterNoteString(elem.notes) + "\" "); } else { // クラス図の中で表示されるクラス名を取得(空白を別の文字に置換するなど) string normalizedName = filterSpecialChar(elemSearchItem.elemName); // 接続線を引く時にこのクラス名を使う必要があるので、ID毎に名前をキャッシュしておく elemNameHash.Add(elemSearchItem.elementId, normalizedName); // class 文の出力 sw.WriteLine("class \"" + normalizedName + "\" " + getStereotypeStr(elemSearchItem.elemStereotype) + " {"); sw.WriteLine("}"); } } } // ダイアグラムリンク(ダイアグラム上で有効な接続)情報を元にPlantUMLの接続線を引く foreach (DiagramLinkVO diaLink in diag.diagramLinks) { // diagramLink の connectorId をキーとして Connector情報を取得 List <ConnectorVO> conns = this.connSearcher.findByConnectorId(diaLink.connectorId); ConnectorVO targetConn = null; if (conns.Count > 0) { targetConn = conns[0]; outputSrcConnectLine(targetConn, sw); } } sw.WriteLine("@enduml"); sw.WriteLine("--"); sw.WriteLine(""); }
public List <ConnectorVO> findByObjectGuid(string objGuid) { List <ConnectorVO> retList = new List <ConnectorVO>(); conn.Open(); using (var command = conn.CreateCommand()) { //クエリの実行 string sql = @"select connGuid, connName, connType, srcObjGuid, srcObjName, destObjGuid, destObjName from t_connector where srcObjGuid = '" + objGuid + "' or destObjGuid = '" + objGuid + "'"; command.CommandText = sql; // selectの結果がSQLiteDataReaderに入ってくるので、終端まで読み込み using (var sdr = command.ExecuteReader()) { // while (sdr.Read()) { ConnectorVO convo = new ConnectorVO(); convo.guid = sdr.GetString(0); convo.name = sdr.GetString(1); convo.connectorType = sdr.GetString(2); convo.srcObjGuid = sdr.GetString(3); convo.srcObjName = sdr.GetString(4); convo.destObjGuid = sdr.GetString(5); convo.destObjName = sdr.GetString(6); if (convo.srcObjGuid.Equals(objGuid)) { convo.targetObjGuid = convo.destObjGuid; convo.targetObjName = convo.destObjName; } else { convo.targetObjGuid = convo.srcObjGuid; convo.targetObjName = convo.srcObjName; } retList.Add(convo); } } } conn.Close(); // 取得したリストを返す // この条件でヒットしない場合は0件のリストを返す return(retList); }
private static void outputDestConnectLine(ConnectorVO cn, StreamWriter sw) { string leftSideName, rightSideName, lineStyle; leftSideName = cn.srcObjName; rightSideName = cn.destObjName; switch (cn.connectorType) { case "Association": lineStyle = " --> "; break; case "Dependency": lineStyle = " ..> "; break; case "Generalization": leftSideName = cn.destObjName; rightSideName = cn.srcObjName; lineStyle = " <|-- "; break; case "Aggregation": leftSideName = cn.destObjName; rightSideName = cn.srcObjName; lineStyle = " o-- "; break; case "Realisation": leftSideName = cn.destObjName; rightSideName = cn.srcObjName; lineStyle = " <|.. "; break; case "NoteLink": // ノートリンクは出力の価値が無いので出力しないでリターン return; default: lineStyle = " --- "; break; } sw.WriteLine("\"" + filterSpecialChar(leftSideName) + "\" " + lineStyle + "\"" + filterSpecialChar(rightSideName) + "\" "); }
// 処理対象XML例: // <artifacts targetProject='Logical' lastUpdated='2017/10/13 10:27:32' targetModel='Logical' > // <artifact guid='{11EF4332-5CB7-4ecd-8E78-0E50A6E7D3E7}' name='共通設計モデル' path='/論理モデル/レイヤ別ビュー/フレームワーク_STEP3移管対象/' stereotype='fw.adesk_cmn' /> // </artifacts> /// <summary> /// All_Connectors.xml を読み、リスト化する /// /// </summary> /// <returns>ConnectorVOのリスト</returns> public ConnectorVO readConnectorByGUID(ConnectorVO convo, ElementVO myelem) { // connectorノードに移動する XmlNode connectorNode = this.xmlDoc.SelectSingleNode("//connector[@guid='" + convo.guid + "']"); if (connectorNode != null) { convo.connectorType = connectorNode.SelectSingleNode("@connType").Value; foreach (XmlNode node in connectorNode.ChildNodes) { string objguid; if ("startObject".Equals(node.Name)) { objguid = node.SelectSingleNode("@guid").Value; if (objguid != null && !myelem.guid.Equals(objguid)) { convo.targetObjName = node.SelectSingleNode("@name").Value; convo.targetObjGuid = node.SelectSingleNode("@guid").Value; return(convo); } } if ("endObject".Equals(node.Name)) { objguid = node.SelectSingleNode("@guid").Value; if (objguid != null && !myelem.guid.Equals(objguid)) { convo.targetObjName = node.SelectSingleNode("@name").Value; convo.targetObjGuid = node.SelectSingleNode("@guid").Value; return(convo); } } } // end of for } else { convo.targetObjName = "(Unknown Object)"; convo.targetObjGuid = ""; } return(convo); }
// 処理対象XML例: // <connector targetProject='Logical' lastUpdated='2017/10/13 10:27:32' targetModel='Logical' > // <srcObject guid='{11EF4332-5CB7-4ecd-8E78-0E50A6E7D3E7}' name='共通設計モデル' path='/論理モデル/レイヤ別ビュー/フレームワーク_STEP3移管対象/' stereotype='fw.adesk_cmn' /> // <destObject guid='{11EF4332-5CB7-4ecd-8E78-0E50A6E7D3E7}' name='共通設計モデル' path='/論理モデル/レイヤ別ビュー/フレームワーク_STEP3移管対象/' stereotype='fw.adesk_cmn' /> // </connector> /// <summary> /// All_Connectors.xml を読み、リスト化する /// </summary> /// <returns>ConnectorVOのリスト</returns> public List <ConnectorVO> readConnectorAll() { List <ConnectorVO> outList = new List <ConnectorVO>(); // connectorノードを全て取得する XmlNodeList connectorNodes = this.xmlDoc.SelectNodes("//connector"); if (connectorNodes != null) { foreach (XmlNode connectorNode in connectorNodes) { ConnectorVO convo = new ConnectorVO(); convo.connectorType = connectorNode.SelectSingleNode("@connType").Value; convo.guid = connectorNode.SelectSingleNode("@guid").Value; convo.name = connectorNode.SelectSingleNode("@name").Value; foreach (XmlNode node in connectorNode.ChildNodes) { if ("startObject".Equals(node.Name)) { convo.srcObjName = node.SelectSingleNode("@name").Value; convo.srcObjGuid = node.SelectSingleNode("@guid").Value; } if ("endObject".Equals(node.Name)) { convo.destObjName = node.SelectSingleNode("@name").Value; convo.destObjGuid = node.SelectSingleNode("@guid").Value; } } // end of foreach outList.Add(convo); } // end of foreach } return(outList); }
private List <ConnectorVO> findBySql(string sql, string objGuid) { List <ConnectorVO> retList = new List <ConnectorVO>(); conn.Open(); using (var command = conn.CreateCommand()) { command.CommandText = sql; // selectの結果がSQLiteDataReaderに入ってくるので、終端まで読み込み using (var sdr = command.ExecuteReader()) { // while (sdr.Read()) { ConnectorVO convo = new ConnectorVO(); convo.guid = sdr.GetString(0); convo.name = sdr.GetString(1); convo.connectorType = sdr.GetString(2); convo.srcObjId = sdr.GetInt32(3); convo.srcObjGuid = sdr.GetString(4); convo.srcObjName = sdr.GetString(5); convo.destObjId = sdr.GetInt32(6); convo.destObjGuid = sdr.GetString(7); convo.destObjName = sdr.GetString(8); convo.connectorId = sdr.GetInt32(9); if (objGuid != null) { if (convo.srcObjGuid.Equals(objGuid)) { convo.targetObjGuid = convo.destObjGuid; convo.targetObjName = convo.destObjName; } else { convo.targetObjGuid = convo.srcObjGuid; convo.targetObjName = convo.srcObjName; } } else { convo.targetObjGuid = ""; convo.targetObjName = ""; } retList.Add(convo); } } } conn.Close(); // 取得したリストを返す // この条件でヒットしない場合は0件のリストを返す return(retList); }
// 処理対象XML例: // <connector targetProject='Logical' lastUpdated='2017/10/13 10:27:32' targetModel='Logical' > // <srcObject guid='{11EF4332-5CB7-4ecd-8E78-0E50A6E7D3E7}' name='共通設計モデル' path='/論理モデル/レイヤ別ビュー/フレームワーク_STEP3移管対象/' stereotype='fw.adesk_cmn' /> // <destObject guid='{11EF4332-5CB7-4ecd-8E78-0E50A6E7D3E7}' name='共通設計モデル' path='/論理モデル/レイヤ別ビュー/フレームワーク_STEP3移管対象/' stereotype='fw.adesk_cmn' /> // </connector> /// <summary> /// All_Connectors.xml を読み、リスト化する /// </summary> /// <returns>ConnectorVOのリスト</returns> public List <ConnectorVO> readConnectorAll() { List <ConnectorVO> outList = new List <ConnectorVO>(); // connectorノードを全て取得する XmlNodeList connectorNodes = this.xmlDoc.SelectNodes("//connector"); if (connectorNodes != null) { foreach (XmlNode connectorNode in connectorNodes) { ConnectorVO convo = new ConnectorVO(); foreach (XmlAttribute attr in connectorNode.Attributes) { switch (attr.Name) { case "connectorID": convo.connectorId = readAttributeIntValue(attr); break; case "connType": convo.connectorType = attr.Value; break; case "guid": convo.guid = attr.Value; break; case "name": convo.name = attr.Value; break; } } foreach (XmlNode node in connectorNode.ChildNodes) { if ("startObject".Equals(node.Name)) { foreach (XmlAttribute attr in node.Attributes) { switch (attr.Name) { case "objectID": convo.srcObjId = readAttributeIntValue(attr); break; case "guid": convo.srcObjGuid = attr.Value; break; case "name": convo.srcObjName = attr.Value; break; } } } if ("endObject".Equals(node.Name)) { foreach (XmlAttribute attr in node.Attributes) { switch (attr.Name) { case "objectID": convo.destObjId = readAttributeIntValue(attr); break; case "guid": convo.destObjGuid = attr.Value; break; case "name": convo.destObjName = attr.Value; break; } } } } // end of foreach outList.Add(convo); } // end of foreach } return(outList); }
public void outputAllConnectors(string outputDir) { Console.WriteLine("outputAllConnectors() "); StreamWriter sw = new StreamWriter(outputDir + @"\AllConnectors.xml"); // ConnectorList の内容をテキスト出力 sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sw.WriteLine("<ConnectorList>"); string strSQL, strFields; // 読み込む項目リスト strFields = " conn.Connector_ID, conn.ea_guid, conn.Name, conn.Direction, conn.Connector_Type " + " ,conn.Start_Object_ID, conn.End_Object_ID " + " ,sta_obj.ea_guid as Start_OBJ_GUID, sta_obj.Name as Start_OBJ_Name, sta_obj.Package_ID as Start_OBJ_PackageID " + " ,end_obj.ea_guid as End_OBJ_GUID, end_obj.Name as End_OBJ_Name, end_obj.Package_ID as End_OBJ_PackageID "; // objRS(0).Value = conn.Connector_ID, // objRS(1).Value = conn.ea_guid, // objRS(2).Value = conn.Name, // objRS(3).Value = conn.Direction, // objRS(4).Value = conn.Connector_Type // objRS(5).Value = conn.Start_Object_ID // objRS(6).Value = conn.End_Object_ID // objRS(7).Value = sta_obj.ea_guid as Start_OBJ_GUID // objRS(8).Value = sta_obj.Name as Start_OBJ_Name // objRS(9).Value = sta_obj.Package_ID as Start_OBJ_PackageID // objRS(10).Value = end_obj.ea_guid as End_OBJ_GUID // objRS(11).Value = end_obj.Name as End_OBJ_Name // objRS(12).Value = end_obj.Package_ID as End_OBJ_PackageID // SQL文 を作成 strSQL = " SELECT " + strFields + " FROM ( " + " ( t_connector as conn " + " INNER JOIN t_object as sta_obj ON conn.Start_Object_ID = sta_obj.Object_ID ) " + " INNER JOIN t_object as end_obj ON conn.End_Object_ID = end_obj.Object_ID ) " + " ORDER BY conn.ea_guid "; OleDbCommand dbCom = new OleDbCommand(); // SQLを実行する dbCom.CommandText = strSQL; dbCom.Connection = objConn; using (OleDbDataReader reader = dbCom.ExecuteReader()) { // 結果を表示します。 while (reader.Read()) { // <connector guid='{0BC66689-179A-48bc-9D84-87E09ABE3C3F}' name='null' direction='Source -> Destination' connType='Aggregation' rel='←' targetObjectId='169587' /> // </connector> sw.Write(" <connector"); sw.Write(" connectorID='" + readIntField(reader, 0) + "'"); sw.Write(" guid='" + escapeXML(readStringField(reader, 1)) + "'"); sw.Write(" name='" + escapeXML(readStringField(reader, 2)) + "'"); sw.Write(" direction='" + escapeXML(readStringField(reader, 3)) + "'"); sw.Write(" connType='" + readStringField(reader, 4) + "'"); sw.Write(" startObjId='" + readIntField(reader, 5) + "'"); sw.Write(" endObjId='" + readIntField(reader, 6) + "'"); sw.WriteLine(">"); PackageVO startPack, endPack; startPack = searchFromAllPackageMap(readIntField(reader, 9)); endPack = searchFromAllPackageMap(readIntField(reader, 12)); sw.Write(" <startObject"); sw.Write(" objectID='" + readIntField(reader, 5) + "'"); sw.Write(" guid='" + escapeXML(readStringField(reader, 7)) + "'"); sw.Write(" name='" + escapeXML(readStringField(reader, 8)) + "'"); sw.Write(" path='" + escapeXML(startPack.pathName) + "'"); sw.WriteLine(" />"); sw.Write(" <endObject"); sw.Write(" objectID='" + readIntField(reader, 6) + "'"); sw.Write(" guid='" + escapeXML(readStringField(reader, 10)) + "'"); sw.Write(" name='" + escapeXML(readStringField(reader, 11)) + "'"); sw.Write(" path='" + escapeXML(endPack.pathName) + "'"); sw.WriteLine(" />"); sw.WriteLine(" </connector>"); ConnectorVO connvo = new ConnectorVO(); connvo.connectorId = readIntField(reader, 0); connvo.guid = readStringField(reader, 1); connvo.name = readStringField(reader, 2); // connvo.direction = readStringField(reader, 3); connvo.connectorType = readStringField(reader, 4); connvo.srcObjId = readIntField(reader, 5); connvo.srcObjGuid = readStringField(reader, 7); connvo.srcObjName = readStringField(reader, 8); connvo.destObjId = readIntField(reader, 6); connvo.destObjGuid = readStringField(reader, 10); connvo.destObjName = readStringField(reader, 11); allConnectorList.Add(connvo); } } sw.WriteLine("</ConnectorList>"); sw.Close(); }