Exemplo n.º 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("");
        }
        private void readDiagramObjectsByDiagram(DiagramVO diag)
        {
            // Console.WriteLine("readDiagramObjectsByDiagram(): diagramId =" + diag.diagramId);

            string strSQL, strFields, strWhere;

            // 読み込む項目リスト
            strFields =
                "Diagram_ID, Object_ID, RectTop, RectLeft, " +
                "RectRight, RectBottom, Sequence, ObjectStyle, Instance_ID ";

            // WHERE文: DBに対しては主に パッケージID で検索(キー=IDで結合する必要があるため)
            strWhere = " where  Diagram_ID = " + diag.diagramId;

            // SQL文 を作成
            strSQL = "select " + strFields +
                     " from t_diagramobjects  " +
                     strWhere +
                     " ORDER BY  sequence ";

            OleDbCommand dbCom = new OleDbCommand();

            // SQLを実行する
            dbCom.CommandText = strSQL;
            dbCom.Connection  = objConn;

            OleDbDataReader        reader         = dbCom.ExecuteReader();
            List <DiagramObjectVO> retDiagramObjs = new List <DiagramObjectVO>();

            // 結果を表示します。
            while (reader.Read())
            {
                DiagramObjectVO diagObj = new DiagramObjectVO();

                diagObj.changed     = ' ';
                diagObj.diagramId   = DbUtil.readIntField(reader, 0);
                diagObj.objectId    = DbUtil.readIntField(reader, 1);
                diagObj.rectTop     = DbUtil.readIntField(reader, 2);
                diagObj.rectLeft    = DbUtil.readIntField(reader, 3);
                diagObj.rectRight   = DbUtil.readIntField(reader, 4);
                diagObj.rectBottom  = DbUtil.readIntField(reader, 5);
                diagObj.sequence    = DbUtil.readIntField(reader, 6);
                diagObj.objectStyle = DbUtil.readStringField(reader, 7);
                diagObj.instanceId  = DbUtil.readIntField(reader, 8);


                // 返却用の要素のリストに追加
                retDiagramObjs.Add(diagObj);
            }
            reader.Close();

            diag.diagramObjects = retDiagramObjs;
        }
        private void readDiagramLinksByDiagram(DiagramVO diag)
        {
            // Console.WriteLine("readDiagramLinksByDiagram(): diagramId =" + diag.diagramId);

            string strSQL, strFields, strWhere;

            // 読み込む項目リスト
            strFields =
                "DiagramID, ConnectorID, Geometry, Style, Hidden, " +
                "Path, Instance_ID ";

            // WHERE文: DBに対しては主に パッケージID で検索(キー=IDで結合する必要があるため)
            strWhere = " where  DiagramID = " + diag.diagramId;

            // SQL文 を作成
            strSQL = "select " + strFields +
                     " from t_diagramlinks  " +
                     strWhere +
                     " ORDER BY Instance_ID ";

            OleDbCommand dbCom = new OleDbCommand();

            // SQLを実行する
            dbCom.CommandText = strSQL;
            dbCom.Connection  = objConn;

            OleDbDataReader      reader          = dbCom.ExecuteReader();
            List <DiagramLinkVO> retDiagramLinks = new List <DiagramLinkVO>();

            // 結果を表示します。
            while (reader.Read())
            {
                DiagramLinkVO diagLink = new DiagramLinkVO();

                diagLink.changed     = ' ';
                diagLink.diagramId   = DbUtil.readIntField(reader, 0);
                diagLink.connectorId = DbUtil.readIntField(reader, 1);
                diagLink.geometry    = DbUtil.readStringField(reader, 2);
                diagLink.style       = DbUtil.readStringField(reader, 3);
                diagLink.hidden      = DbUtil.readBoolField(reader, 4);
                diagLink.path        = DbUtil.readStringField(reader, 5);
                diagLink.instanceId  = DbUtil.readIntField(reader, 6);

                // 返却用の要素のリストに追加
                retDiagramLinks.Add(diagLink);
            }
            reader.Close();

            diag.diagramLinks = retDiagramLinks;
        }
Exemplo n.º 4
0
        /// <summary>
        /// ダイアグラム情報を出力する
        /// </summary>
        /// <param name="diag"></param>
        /// <param name="sw"></param>
        private void writeDiagramData(DiagramVO diag, StreamWriter sw)
        {
            sw.WriteLine("### ダイアグラム: " + diag.name);

            foreach (DiagramObjectVO diaObj in diag.diagramObjects)
            {
                ElementSearchItem searchItem = elementSearcher.findByElementId(diaObj.objectId);

                if (searchItem != null)
                {
                    sw.WriteLine(" - " + searchItem.elemName + " " + searchItem.elemGuid);
                }
            }

            sw.WriteLine("\r\n");
        }
        public static void outputDiagramXml(DiagramVO diagvo, int depth, StreamWriter sw)
        {
            sw.Write(StringUtil.indent(depth) + "<diagram ");
            if (diagvo.changed != ' ')
            {
                sw.Write("changed=\"" + diagvo.changed + "\" ");
            }
            sw.Write("guid=\"" + StringUtil.escapeXML(diagvo.guid) + "\" ");
            sw.Write("tpos=\"" + diagvo.treePos + "\" ");
            sw.Write("type=\"" + diagvo.diagramType + "\" ");
            sw.Write("name=\"" + StringUtil.escapeXML(diagvo.name) + "\" ");
            sw.Write("showDetails=\"" + diagvo.showDetails + "\" ");
            sw.Write("attPub=\"" + diagvo.attPub + "\" ");
            sw.Write("attPri=\"" + diagvo.attPri + "\" ");
            sw.Write("attPro=\"" + diagvo.attPro + "\" ");
            sw.Write("cx=\"" + diagvo.cx + "\" ");
            sw.Write("cy=\"" + diagvo.cy + "\" ");
            sw.Write("scale=\"" + diagvo.scale + "\" ");
            sw.Write("orientation=\"" + diagvo.orientation + "\" ");
            sw.Write("createdDate=\"" + diagvo.createdDate + "\" ");
            sw.Write("modifiedDate=\"" + diagvo.modifiedDate + "\" ");
            sw.Write("swimlanes=\"" + diagvo.swimlanes + "\"");
            sw.WriteLine(">");

            if (diagvo.notes != null)
            {
                sw.WriteLine(StringUtil.indent(depth + 1) + "<notes>" + StringUtil.escapeXML(diagvo.notes) + "</notes>");
            }

            if (diagvo.diagramObjects != null)
            {
                foreach (DiagramObjectVO diaObjVO in diagvo.diagramObjects)
                {
                    outputDiagramObject(diaObjVO, depth + 1, sw);
                }
            }

            if (diagvo.diagramLinks != null)
            {
                foreach (DiagramLinkVO diaLinkVO in diagvo.diagramLinks)
                {
                    outputDiagramLink(diaLinkVO, depth + 1, sw);
                }
            }
            sw.WriteLine(StringUtil.indent(depth) + "</diagram>");
        }
        // <diagram guid="{F491CD2F-BA6F-4570-9AF8-41589EBBBF95}" tpos="0" type="Logical" name="エラー画面" showDetails="0" attPub="True" attPri="True" attPro="True" cx="787" cy="1130" scale="75" orientation="P" createdDate="2018/07/05 13:08:58" swimlanes="locked=false;orientation=0;width=0;inbar=false;names=false;color=-1;bold=false;fcol=0;tcol=-1;ofCol=-1;ufCol=-1;hl=1;ufh=0;hh=0;cls=0;bw=0;hli=0;">
        private DiagramVO readDiagramNode(XmlNode diagNode)
        {
            DiagramVO diag = new DiagramVO();

            foreach (XmlAttribute attr in diagNode.Attributes)
            {
                switch (attr.Name)
                {
                case "name":
                    diag.name = attr.Value;
                    break;

                case "guid":
                    diag.guid = attr.Value;
                    break;

                case "stereotype":
                    diag.stereotype = attr.Value;
                    break;

                case "tpos":
                    diag.treePos = readAttributeIntValue(attr);
                    break;

                case "changed":
                    diag.changed = readAttributeCharValue(attr);
                    break;

                case "type":
                    diag.diagramType = attr.Value;
                    break;

                case "showDetails":
                    diag.showDetails = readAttributeIntValue(attr);
                    break;

                case "attPub":
                    diag.attPub = "True".Equals(attr.Value);
                    break;

                case "attPri":
                    diag.attPri = "True".Equals(attr.Value);
                    break;

                case "attPro":
                    diag.attPro = "True".Equals(attr.Value);
                    break;

                case "cx":
                    diag.cx = readAttributeIntValue(attr);
                    break;

                case "cy":
                    diag.cy = readAttributeIntValue(attr);
                    break;

                case "scale":
                    diag.scale = readAttributeIntValue(attr);
                    break;

                case "orientation":
                    diag.orientation = attr.Value;
                    break;

                case "createdDate":
                    diag.createdDate = readAttributeDateTimeValue(attr);
                    break;

                case "modifiedDate":
                    diag.modifiedDate = readAttributeDateTimeValue(attr);
                    break;

                case "swimlanes":
                    diag.swimlanes = attr.Value;
                    break;
                }
            }

            List <DiagramObjectVO> retDiagObjList  = new List <DiagramObjectVO>();
            List <DiagramLinkVO>   retDiagLinkList = new List <DiagramLinkVO>();

            foreach (XmlNode diachNode in diagNode.ChildNodes)
            {
                switch (diachNode.Name)
                {
                case "notes":
                    diag.notes = diachNode.InnerText;
                    break;

                case "diagramObject":
                    retDiagObjList.Add(readDiagramObjectNode(diachNode));
                    break;

                case "diagramLink":
                    retDiagLinkList.Add(readDiagramLinkNode(diachNode));
                    break;
                }
            }

            diag.diagramObjects = retDiagObjList;
            diag.diagramLinks   = retDiagLinkList;
            return(diag);
        }
        private void readDiagrams(PackageVO package)
        {
            // Console.WriteLine("readDiagrams(): packageID =" + package.packageId);

            string strSQL, strFields, strWhere;

            // 読み込む項目リスト
            strFields =
                "Diagram_ID, Package_ID, Diagram_Type, Name, Author, ShowDetails, " +
                "Notes, Stereotype, AttPub, AttPri, AttPro, Orientation, cx, cy, " +
                "Scale, CreatedDate, ModifiedDate, ShowForeign, ShowBorder, " +
                "ShowPackageContents, ea_guid, TPos, Swimlanes, StyleEx ";

            // WHERE文: DBに対しては主に パッケージID で検索(キー=IDで結合する必要があるため)
            strWhere = " where  Package_ID = " + package.packageId;

            // SQL文 を作成
            strSQL = "select " + strFields +
                     " from t_diagram  " +
                     strWhere +
                     " ORDER BY  TPos, Name ";

            OleDbCommand dbCom = new OleDbCommand();

            // SQLを実行する
            dbCom.CommandText = strSQL;
            dbCom.Connection  = objConn;

            OleDbDataReader  reader      = dbCom.ExecuteReader();
            List <DiagramVO> retDiagrams = new List <DiagramVO>();

            // 結果を表示します。
            while (reader.Read())
            {
                DiagramVO diag = new DiagramVO();

                diag.changed   = ' ';
                diag.diagramId = DbUtil.readIntField(reader, 0);
                diag.packageId = DbUtil.readIntField(reader, 1);
                // diag.parentId  = readIntField(reader, 2);
                diag.diagramType = DbUtil.readStringField(reader, 2);
                diag.name        = StringUtil.excludeSpecialChar("t_diagram", "name", diag.guid, DbUtil.readStringField(reader, 3));
                // diag.version = (DateTime)reader.GetValue(4);
                diag.author              = DbUtil.readStringField(reader, 4);
                diag.showDetails         = DbUtil.readIntField(reader, 5);
                diag.notes               = DbUtil.readStringField(reader, 6);
                diag.stereotype          = DbUtil.readStringField(reader, 7);
                diag.attPub              = DbUtil.readBoolField(reader, 8);
                diag.attPri              = DbUtil.readBoolField(reader, 9);
                diag.attPro              = DbUtil.readBoolField(reader, 10);
                diag.orientation         = DbUtil.readStringField(reader, 11);
                diag.cx                  = DbUtil.readIntField(reader, 12);
                diag.cy                  = DbUtil.readIntField(reader, 13);
                diag.scale               = DbUtil.readIntField(reader, 14);
                diag.createdDate         = DbUtil.readDateTimeField(reader, 15);
                diag.modifiedDate        = (DateTime)reader.GetValue(16);
                diag.showForeign         = DbUtil.readBoolField(reader, 17);
                diag.showBorder          = DbUtil.readBoolField(reader, 18);
                diag.showPackageContents = DbUtil.readBoolField(reader, 19);
                diag.guid                = DbUtil.readStringField(reader, 20);
                diag.treePos             = DbUtil.readIntField(reader, 21);
                diag.swimlanes           = DbUtil.readStringField(reader, 22);
                diag.styleEx             = DbUtil.readStringField(reader, 23);

                diag.diagramObjects = null;
                diag.diagramLinks   = null;

                readDiagramObjectsByDiagram(diag);

                readDiagramLinksByDiagram(diag);

                // 返却用の要素のリストに追加
                retDiagrams.Add(diag);
            }
            reader.Close();

            package.diagrams = retDiagrams;
        }