Beispiel #1
0
        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("");
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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) + "\" ");
        }
Beispiel #4
0
        // 処理対象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);
        }
Beispiel #5
0
        // 処理対象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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        // 処理対象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);
        }
Beispiel #8
0
        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();
        }