void SearchTermTextBoxTextChanged(object sender, EventArgs e)
        {
            ElementSearcher srch       = new ElementSearcher();
            string          searchWord = SearchTermTextBox.Text;

            if (searchWord.Length <= 0)
            {
                listView1.Items.Clear();
                return;
            }


            List <ElementSearchItem> results = new List <ElementSearchItem>();

            if (searchWord.Length > 1 && "{".Equals(searchWord.Substring(0, 1)))
            {
                ElementSearchItem element = srch.findByGuid(searchWord);
                results.Add(element);
            }
            else
            {
                results = srch.findByKeyword(searchWord);
            }

            listView1.Items.Clear();

            foreach (ElementSearchItem elem in results)
            {
                ListViewItem item = new ListViewItem(getStringArrayFromVO(elem));
                item.Tag = elem;
                listView1.Items.Add(item);
            }
        }
Beispiel #2
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("");
        }
        void ListView1MouseDoubleClick(object sender, MouseEventArgs e)
        {
            ElementSearchItem vo         = (ElementSearchItem)(listView1.SelectedItems[0].Tag);
            MainForm          parentForm = (MainForm)(this.Owner);
            ArtifactVO        atfvo      = parentForm.getArtifactByGuid(vo.artifactGuid);

            ElementVO targetElem = searchElementVoFromArtifact(atfvo, vo.elemGuid);

            parentForm.openNewElementForm(targetElem);
        }
        private string[] getStringArrayFromVO(ElementSearchItem vo)
        {
            string projectName = "";

            if (vo.elemPath != null && vo.elemPath.Contains("/"))
            {
                string[] ary = vo.elemPath.Split('/');
                projectName = ary[1];
            }

            string[] retAry = new String[] { vo.elemName, vo.elemAlias, vo.elemType, vo.elemStereotype,
                                             vo.elemPath, projectName };
            return(retAry);
        }
Beispiel #5
0
        private static void outputConnDestClass(string objGuid, ElementSearcher elemSrch, Dictionary <string, ElementSearchItem> nameHash, StreamWriter sw)
        {
            ElementSearchItem elemSrcItem = elemSrch.findByGuid(objGuid);

            if (elemSrcItem != null)
            {
                string identifiedName = filterSpecialChar(elemSrcItem.elemName);
                if (!nameHash.ContainsKey(identifiedName))
                {
                    sw.WriteLine("class \"" + identifiedName + "\" " + getStereotypeStr(elemSrcItem.elemStereotype) + " {");
                    sw.WriteLine("}");
                    nameHash.Add(identifiedName, elemSrcItem);
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// SQLiteに格納されたt_elementテーブルから、以下の条件でマッチしたレコードを取得し
        /// ElementSearchItemに格納して返す。
        ///   ・要素のタイプ が 'Class', 'Interface', 'Enumeration'のいずれか
        ///   ・要素パスが '/論理モデル/' に部分一致する
        /// </summary>
        /// <returns>取得</returns>
        private List <ElementSearchItem> getElementSearcheItems()
        {
            string           dbFileName = ProjectSetting.getVO().projectPath + "\\" + ProjectSetting.getVO().dbName;
            SQLiteConnection conn       = new SQLiteConnection("Data Source=" + dbFileName);

            conn.Open();


            List <ElementSearchItem> retList = new List <ElementSearchItem>();

            string sql =
                @"select objectId, elemGuid, elemName, elemAlias, elemType, ifnull(elemStereotype, ''),
                         elementPath, artifactGuid,  artifactName
				  from   t_element 
                  where  elemType in ('Class', 'Interface', 'Enumeration')
                   and   elementPath like '%/論理モデル/%'  ";

            using (var command = conn.CreateCommand())
            {
                //クエリの実行
                command.CommandText = sql;
                using (var sdr = command.ExecuteReader())
                {
                    //
                    while (sdr.Read())
                    {
                        ElementSearchItem elemSrchItem = new ElementSearchItem();

                        elemSrchItem.elementId      = sdr.GetInt32(0);
                        elemSrchItem.elemGuid       = sdr.GetString(1);
                        elemSrchItem.elemName       = StringUtil.removeQuoteChar(sdr.GetString(2));
                        elemSrchItem.elemAlias      = sdr.GetString(3);
                        elemSrchItem.elemType       = sdr.GetString(4);
                        elemSrchItem.elemStereotype = sdr.GetString(5);
                        elemSrchItem.elemPath       = sdr.GetString(6);
                        elemSrchItem.artifactGuid   = sdr.GetString(7);
                        elemSrchItem.artifactName   = sdr.GetString(8);

                        retList.Add(elemSrchItem);
                    }
                }
            }

            conn.Close();

            // 一件でも取得できたらtrueを返す
            return(retList);
        }
Beispiel #7
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");
        }