예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="leftElm"></param>
        /// <param name="rightElm"></param>
        /// <param name="outputDetailFileFlg"></param>
        /// <returns></returns>
        public static ElementVO getMergedElement(ElementVO leftElm, ElementVO rightElm)
        {
            ElementDiffer differ = new ElementDiffer();

            differ.skipAttributeNoteFlg   = false;
            differ.skipElementTaggedValue = false;
            differ.skipElementTPosFlg     = true;
            differ.skipAttributeNoteFlg   = false;
            differ.skipAttributePosFlg    = false;
            differ.skipMethodNoteFlg      = false;
            differ.skipMethodPosFlg       = false;

            return(differ.getDisagreedElement(leftElm, rightElm));
        }
        /// <summary>
        /// パッケージの読み込み(再帰処理)
        /// 引数のパッケージノード以下を再帰的に読み込み、 Package, Element をVOに読み込む
        /// </summary>
        /// <param name="pkgvo">(out)パッケージのVO</param>
        /// <param name="parentNode">(in)対象のパッケージのXmlNode</param>
        private void readPackages(PackageVO pkgvo, XmlNode parentNode)
        {
            List <PackageVO> retList        = new List <PackageVO>();
            List <ElementVO> retElementList = new List <ElementVO>();
            List <DiagramVO> retDiagramList = new List <DiagramVO>();

            PackageVO pkg = null;

            foreach (XmlNode pkgNode in parentNode.ChildNodes)
            {
                if ("package".Equals(pkgNode.Name))
                {
                    pkg = readPackageNode(pkgNode);

                    readPackages(pkg, pkgNode);
                    retList.Add(pkg);
                }

                // package配下で elementノードを見つけたら
                if ("element".Equals(pkgNode.Name))
                {
                    // elementノード配下の情報から、 ElementVO を返却する
                    ElementVO elem = ElementsXmlReader.readElement(pkgNode, sortByPosFlg);
                    elem.packageId = pkgvo.packageId;

                    // 強いてelement毎のXMLファイルを読む必要がある場合のみ
                    if (elementFileReadFlg)
                    {
                        // 強いてelement毎のXMLファイルを読む必要がある場合のみ
                        if (ElementsXmlReader.existElementFile(elem.guid))
                        {
                            elem = ElementsXmlReader.readElementFile(elem.guid);
                        }
                    }

                    retElementList.Add(elem);
                }

                // package配下で diagram ノードを見つけたら
                if ("diagram".Equals(pkgNode.Name))
                {
                    retDiagramList.Add(readDiagramNode(pkgNode));
                }
            }

            pkgvo.childPackageList = retList;
            pkgvo.elements         = retElementList;
            pkgvo.diagrams         = retDiagramList;
        }
예제 #3
0
        /// <summary>
        /// ProjectDiffMakerなどで作成された、マージ済みの要素を受け取ってSide-by-Side形式での差分表示を行う
        /// </summary>
        /// <param name="elem"></param>
        private void setElementItems(ElementVO elem)
        {
            tableLayoutPanel1.RowCount = 1 + elem.attributes.Count + elem.methods.Count;

            int rowIndex = 0;

            // 要素のプロパティの表示項目を設定
            addItemElementProperty(elem, ref rowIndex);

            // 属性の表示項目を設定
            addItemAttributes(elem, ref rowIndex);

            // メソッドの表示項目を設定
            addItemMethods(elem, ref rowIndex);
        }
예제 #4
0
        /// <summary>
        /// 要素リンクラベルのクリック時イベントハンドラ(要素編集画面を開く)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void LblElemOpenClick(object sender, EventArgs e)
        {
            LinkLabel lbl  = (LinkLabel)sender;
            ElementVO elem = (ElementVO)lbl.Tag;

            if (elem.changed == 'U')
            {
                DiffElementForm eForm = new DiffElementForm(elem);
                eForm.Show(this);
            }
            else
            {
                openNewElementForm(elem);
            }
        }
예제 #5
0
        /// <summary>
        /// 要素(クラス)の名称など、クラスの情報を表示する
        /// </summary>
        /// <param name="elem"></param>
        private void setElementItems(ElementVO elem)
        {
            // タイトルのクラス名のテキストをセット
            classNameText.Text      = elem.name;
            classNameText.BackColor = Color.White;
            classNameText.Anchor    = ((System.Windows.Forms.AnchorStyles)
                                           ((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                                              | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
            classNameText.ContextMenuStrip = this.classContextMenuStrip;

            switch (elem.eaType)
            {
            case "Screen":
                elementTypePictureBox.Image = global::ElementEditor.Properties.Resources.ICON_SYMBOL_SCREEN;
                break;

            case "GUIElement":
                elementTypePictureBox.Image = global::ElementEditor.Properties.Resources.ICON_SYMBOL_UIELEMENT;
                break;

            default:
                elementTypePictureBox.Image = global::ElementEditor.Properties.Resources.ICON_SYMBOL_CLASS;
                break;
            }
            elementTypePictureBox.Name     = "elementTypePictureBox";
            elementTypePictureBox.Location = new System.Drawing.Point(3, 3);
            elementTypePictureBox.Size     = new System.Drawing.Size(20, 20);
            elementTypePictureBox.TabStop  = false;


            if (myElement.elementReferenceVO != null)
            {
                implFileLinkLabel.Text = myElement.elementReferenceVO.fqcn;
                implFileLinkLabel.Tag  = myElement.elementReferenceVO;
            }
            else
            {
                implFileLinkLabel.Visible = false;
            }

            panel.SuspendLayout();
            makeTaggedValueItems(elem.taggedValues);
            makeAttributeItems(elem.attributes);
            makeMethodItems(elem.methods);
            panel.ResumeLayout();

            //btnCommit.Enabled = false;
        }
예제 #6
0
        /// <summary>
        /// XMLノードからの要素(クラス)の情報読み込み
        /// </summary>
        /// <param name="elementNode"></param>
        /// <returns></returns>
        public static ElementVO readElement(XmlNode elementNode, bool sortByPosFlg)
        {
            ElementVO elem = new ElementVO();

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

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

                case "type":
                    elem.eaType = attr.Value;
                    break;

                case "alias":
                    elem.alias = attr.Value;
                    break;

                case "stereotype":
                    elem.stereoType = attr.Value;
                    break;

                case "tpos":
                    Int32 p;
                    if (!Int32.TryParse(attr.Value, out p))
                    {
                        p = 0;
                    }
                    elem.treePos = p;
                    break;

                case "changed":
                    elem.changed = attr.Value[0];
                    break;
                }
            }

            readElementContents(elementNode, sortByPosFlg, ref elem);

            return(elem);
        }
예제 #7
0
        /// <summary>
        /// EAのTaggedValueを上書きもしくは追加する
        /// </summary>
        internal static void updateEaTaggedValueObject(ElementVO myElement, TaggedValueVO selectedTag)
        {
            EA.Repository repo = ProjectSetting.getVO().eaRepo;
            EA.Element    elem = null;

            // この属性を持っているはずの要素をGUIDより検索
            elem = (EA.Element)repo.GetElementByGuid(myElement.guid);
            if (elem == null)
            {
                return;
            }

            TaggedValue tvObj = null;

            if (elem.TaggedValues != null && elem.TaggedValues.Count > 0)
            {
                for (int i = 0; i < elem.TaggedValues.Count; i++)
                {
                    tvObj = elem.TaggedValues.GetAt((short)i);
                    if (selectedTag.guid == tvObj.PropertyGUID)
                    {
                        break;
                    }
                }
            }

            // 結果的に TaggedValue のオブジェクトが取得できなかったら、この要素の配下にタグ付き値を追加する
            if (tvObj == null)
            {
                tvObj = elem.TaggedValues.AddNew(selectedTag.name, "");
            }

            // 更新前後で更新ログ出力
            writeUpdateLogTaggedValue(tvObj, false);

            tvObj.Name  = selectedTag.name;
            tvObj.Notes = selectedTag.notes;
            // tvObj.ObjectType = selectedTag.name;
            tvObj.PropertyGUID = selectedTag.guid;
            tvObj.Value        = selectedTag.tagValue;

            // トランザクションのコミット
            tvObj.Update();

            // 更新前後で更新ログ出力
            writeUpdateLogTaggedValue(tvObj, true);
        }
        /// <summary>
        /// 詳細のCSVファイルを出力する(要素)
        /// </summary>
        /// <param name="atf">成果物VO</param>
        /// <param name="elem">要素</param>
        /// <param name="sw">出力ストリームライター</param>
        private void outputChangedDetailElement(ArtifactVO atf, ElementVO elem, StreamWriter sw)
        {
            foreach (AttributeVO a in elem.attributes)
            {
                outputChangedDetailAttribute(atf, elem, a, sw);
            }

            foreach (MethodVO m in elem.methods)
            {
                outputChangedDetailMethod(atf, elem, m, sw);
            }

            foreach (TaggedValueVO tv in elem.taggedValues)
            {
                outputChangedDetailTaggedValue(atf, elem, tv, sw);
            }
        }
예제 #9
0
        /// <summary>
        /// コンストラクタ(外部で比較した結果の要素ファイルがある時用)
        /// </summary>
        /// <param name="element"></param>
        public DiffElementForm(ElementVO element)
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
            myElement = element;

            //
            this.Text = "クラス: " + myElement.name + " " + myElement.guid;

            setElementItems(myElement);
        }
예제 #10
0
 /// <summary>
 /// 全属性・操作CSVに操作行を追加
 /// </summary>
 /// <param name="pak">パッケージVO</param>
 /// <param name="elem">要素VO</param>
 /// <param name="mth">操作VO</param>
 /// <param name="csvsw">出力ストリーム</param>
 private void writeCsvFileMethod(PackageVO pak, ElementVO elem, MethodVO mth, StreamWriter csvsw)
 {
     csvsw.Write("" + addQuote(pak.guid));
     csvsw.Write("," + addQuote(pak.stereoType));
     csvsw.Write("," + addQuote(pak.pathName));
     csvsw.Write("," + addQuote(elem.guid));
     csvsw.Write("," + addQuote(elem.eaType));
     csvsw.Write("," + addQuote(elem.name));
     csvsw.Write("," + addQuote(elem.stereoType));
     // csvsw.Write("," + elem.tag);
     csvsw.Write("," + addQuote("m"));
     csvsw.Write("," + addQuote(mth.guid));
     csvsw.Write("," + addQuote(mth.name));
     csvsw.Write("," + addQuote(mth.alias));
     csvsw.Write("," + addQuote(mth.getParamDesc()));
     csvsw.Write("\r\n");
 }
예제 #11
0
 /// <summary>
 /// 全属性・操作CSVに属性行を追加
 /// </summary>
 /// <param name="atf">成果物VO</param>
 /// <param name="elem">要素VO</param>
 /// <param name="attr">属性VO</param>
 /// <param name="csvsw">出力ストリーム</param>
 private void writeCsvFileAttr(PackageVO pak, ElementVO elem, AttributeVO attr, StreamWriter csvsw)
 {
     csvsw.Write("" + addQuote(pak.guid));
     csvsw.Write("," + addQuote(pak.stereoType));
     csvsw.Write("," + addQuote(pak.pathName));
     csvsw.Write("," + addQuote(elem.guid));
     csvsw.Write("," + addQuote(elem.eaType));
     csvsw.Write("," + addQuote(elem.name));
     csvsw.Write("," + addQuote(elem.stereoType));
     // csvsw.Write("," + elem.tag);
     csvsw.Write("," + addQuote("a"));
     csvsw.Write("," + addQuote(attr.guid));
     csvsw.Write("," + addQuote(attr.name));
     csvsw.Write("," + addQuote(attr.alias));
     csvsw.Write("," + addQuote(""));
     csvsw.Write("\r\n");
 }
        private void outputChangedSummaryElement(ArtifactVO atf, ElementVO elem, StreamWriter sw)
        {
            string chdesc;

            chdesc = "";
            chdesc = chdesc + "attribute:" + elem.attributes.Count + "/";
            chdesc = chdesc + "method:" + elem.methods.Count;

            sw.Write("\"" + atf.changed + "\"");
            sw.Write(",\"" + atf.guid + "\"");
            sw.Write(",\"" + atf.name + "\"");
            sw.Write(",\"" + atf.pathName + "\"");
            sw.Write(",\"" + elem.changed + "\"");
            sw.Write(",\"" + elem.guid + "\"");
            sw.Write(",\"" + elem.name + "\"");
            sw.Write(",\"" + chdesc + "\"");
            sw.WriteLine("");
        }
예제 #13
0
        private void insertBehaviorsInMethod(ElementVO elem, MethodVO mth)
        {
            // ふるまいを行ごとに切り分け、チャンク単位で登録
            List <BehaviorChunk> chunks = bhvParser.parseBehavior(mth);

            foreach (BehaviorChunk chk in chunks)
            {
                insertBehaviorTable(mth, chk);
                behaviorRecCount++;

                if (behaviorRecCount > 0 && (behaviorRecCount + 1) % 1000 == 0)
                {
                    Console.Write(".");
                    transaction.Commit();
                    transaction = conn.BeginTransaction();
                }
            }
        }
예제 #14
0
        /// <summary>
        /// クラスの内容をソースファイルとして出力する
        /// </summary>
        /// <param name="artifacts">全成果物リスト</param>
        public void outputCSharpCode(ElementVO elem)
        {
            StreamWriter srcsw = null;

            if (elem.eaType != "Class" && elem.eaType != "Interface" && elem.eaType != "Enumeration")
            {
                return;
            }

            try
            {
                //string outputDir = @"C:\ea-artifacts\in-progress\cuvic_aswea_20190401\logicsrc\" + elem.elementPath.Replace('/', '\\');
                string outputDir = ProjectSetting.getVO().projectPath + "\\logicsrc\\" + elem.elementPath.Replace('/', '\\');
                makeSrcDirIfNotExist(outputDir);
                Console.WriteLine("elementPath = " + elem.elementPath);

                srcsw = new StreamWriter(outputDir + @"\" + elem.name + ".cs", false, System.Text.Encoding.GetEncoding("utf-8"));

                // namespaceは要素のフルパスの "/" を "." に置き換え、
                // かつ先頭の "." を取った文字列にする
                string namespaceStr = elem.elementPath.Replace('/', '.');
                if (namespaceStr.Length > 1 && namespaceStr.StartsWith("."))
                {
                    namespaceStr = namespaceStr.Substring(1, namespaceStr.Length - 1);
                }

                srcsw.WriteLine("namespace " + namespaceStr);
                srcsw.WriteLine("{");
                srcsw.WriteLine(elem.generateDeclareString(1));
                srcsw.WriteLine("}");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Message=" + ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                if (srcsw != null)
                {
                    srcsw.Close();
                }
            }
        }
예제 #15
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);
        }
        /// <summary>
        /// 成果物配下の全要素を読み込んで返却する。
        /// elementノード直下の属性のみ読み込み、attribute/method以下は読み込まない。
        /// </summary>
        /// <param name="artifact"></param>
        /// <param name="outElementNodes"></param>
        /// <returns></returns>
        public List <ElementVO> readAllElements(ArtifactVO artifact, ref XmlNodeList outElemNodes)
        {
            string fileName = this.artifactsPath + "/" + "atf_" + artifact.guid.Substring(1, 36) + ".xml";

            // XMLテキストをロードする
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(fileName);

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

            // elementノードを全て取得する
            outElemNodes = xmlDoc.SelectNodes("//element");

            if (outElemNodes != null)
            {
                foreach (XmlNode elemNode in outElemNodes)
                {
                    ElementVO elemvo = new ElementVO();
                    foreach (XmlAttribute attr in elemNode.Attributes)
                    {
                        switch (attr.Name)
                        {
                        case "elementId": elemvo.elementId = readAttributeIntValue(attr); break;

                        case "name": elemvo.name = attr.Value; break;

                        case "alias": elemvo.alias = attr.Value; break;

                        case "type": elemvo.eaType = attr.Value; break;

                        case "stereotype": elemvo.stereoType = attr.Value; break;

                        case "guid": elemvo.guid = attr.Value; break;
                        }
                    }
                    retList.Add(elemvo);
                }
            }

            return(retList);
        }
예제 #17
0
//		void ButtonOutputDocumentClick(object sender, EventArgs e)
//		{
//			string docFileName = selectDocumentFile(mergedElement);
//
//			if (docFileName != null) {
//				ClassDocumentMaker docmaker = new ClassDocumentMaker();
//				docmaker.make(mergedElement, docFileName);
//
//				// docxファイルが出来たらそのファイルを開く
//				Process p = Process.Start( docFileName );
//			}
//		}

        /// <summary>
        /// ファイル選択ダイアログを開き、出力するドキュメントのパスを入力させる
        /// </summary>
        /// <param name="mergedElement">デフォルトのファイル名取得用のElement</param>
        /// <returns>出力ファイル名(.docx)フルパス。 ファイル選択時にキャンセルした場合は null</returns>
        private string selectDocumentFile(ElementVO mergedElement)
        {
            //OpenFileDialogクラスのインスタンスを作成
            OpenFileDialog dialog = new OpenFileDialog();

            string defaultName = mergedElement.name + "_" + mergedElement.guid.Substring(1, 8) + ".docx";

            //はじめに「ファイル名」で表示される文字列を指定する
            dialog.FileName = defaultName;

            //はじめに表示されるフォルダを指定する
            //指定しない(空の文字列)の時は、現在のディレクトリが表示される
//			dialog.InitialDirectory = @"C:\";
            dialog.InitialDirectory = "";

            //[ファイルの種類]に表示される選択肢を指定する
            //指定しないとすべてのファイルが表示される
            dialog.Filter = "ドキュメントファイル(*.docx)|*.docx|すべてのファイル(*.*)|*.*";
            //[ファイルの種類]ではじめに選択されるものを指定する
            //1番目の「すべてのファイル」が選択されているようにする
            dialog.FilterIndex = 1;
            //タイトルを設定する
            dialog.Title = "出力するWordファイル名(docx)を指定してください";
            //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
            dialog.RestoreDirectory = true;
            //存在しないファイルの名前が指定されたとき警告を表示する
            //デフォルトでTrueなので指定する必要はない
            dialog.CheckFileExists = false;
            //存在しないパスが指定されたとき警告を表示する
            //デフォルトでTrueなので指定する必要はない
            dialog.CheckPathExists = true;

            //ダイアログを表示する
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                return(dialog.FileName);
            }
            else
            {
                return(null);
            }
        }
예제 #18
0
        /// <summary>
        /// コンストラクタ(ローカルファイルのorigとchangedの比較用)
        /// </summary>
        /// <param name="lElem">ローカルのorig要素ファイルの内容</param>
        /// <param name="rElem">ローカルのchanged要素ファイルの内容</param>
        public DiffElementForm(ElementVO lElem, ref ElementVO rElem)
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
            myElement = lElem;

            leftElement  = lElem;
            rightElement = rElem;

            //
            this.Text = "クラス: " + leftElement.name + " " + leftElement.guid;

            setElementItems(leftElement, rightElement);
        }
예제 #19
0
        /// <summary>
        /// ElementList_all.xml を読み、リスト化する
        ///
        /// </summary>
        /// <returns>ElementVOのリスト</returns>
        public ElementVO readElementByGUID(string guid)
        {
            // 対象のelementノードに移動する
            XmlNode elemNode = this.xmlDoc.SelectSingleNode("//element[@guid='" + guid + "']");

            // GUIDをキーとしたXMLツリーの検索でマッチしたら
            if (elemNode != null)
            {
                // readElementメソッドの結果をそのまま返却(sort条件はPOS・名称によるソート)
                return(readElement(elemNode, true));
            }
            else
            {
                ElementVO elemvo = new ElementVO();
                elemvo.name = "(Unknown Object)";
                elemvo.guid = "";

                return(elemvo);
            }
        }
예제 #20
0
        public MainForm(ElementVO element)
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
            myElement = element;

            //
            this.Text = "クラス: " + myElement.name + " " + myElement.guid;

            addElementLabels(myElement);

            // 今開いているEAへのアタッチを試みる
            AttachEA();
        }
        private void outputClass(ElementVO elemvo, int depth, StreamWriter sw)
        {
            sw.Write(indent(depth) + "<element ");
            sw.Write(" changed='" + elemvo.changed + "' ");
            sw.Write(" guid='" + escapeXML(elemvo.guid) + "' ");
            sw.Write(" tpos='" + elemvo.treePos + "' ");
            sw.Write(" type='" + elemvo.objectType + "' ");
            sw.Write(" name='" + escapeXML(elemvo.name) + "' ");
            sw.Write(" alias='" + escapeXML(elemvo.alias) + "' ");

            if (elemvo.stereoType != null)
            {
                sw.Write(" stereotype='" + elemvo.stereoType + "' ");
            }
            sw.WriteLine(">");

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

            // 1.2.1 クラスのタグ付き値出力
//			if (elemvo.taggedValues.Count > 0) {
//				outputClassTags(elemvo, depth+1, sw);
//			}

            // 1.2.2 クラスの属性出力
            if (elemvo.attributes.Count > 0)
            {
                outputClassAttributes(elemvo, depth + 1, sw);
            }

            // 1.2.3 クラスの操作(メソッド)出力
            if (elemvo.methods.Count > 0)
            {
                outputClassMethods(elemvo, depth + 1, sw);
            }

            sw.WriteLine(indent(depth) + "</element>");
        }
        public static ElementVO getElementFromEAObject(EA.Element eaElementObj)
        {
            ElementVO elemvo = new ElementVO();

            elemvo.name       = excludeSpecialChar(eaElementObj.Name);
            elemvo.notes      = eaElementObj.Notes;
            elemvo.guid       = eaElementObj.ElementGUID;
            elemvo.eaType     = eaElementObj.Type;
            elemvo.alias      = excludeSpecialChar(eaElementObj.Alias);
            elemvo.stereoType = excludeSpecialChar(eaElementObj.StereotypeEx);
            elemvo.treePos    = eaElementObj.TreePos;

            // EA内のタイプが "Class" で、かつ tag に値がセットされている場合は ElementRef情報を取得
            if ("Class".Equals(eaElementObj.Type) && eaElementObj.Tag != null)
            {
                elemvo.elementReferenceVO = getElementRefFromEAObject(eaElementObj);
            }

            getElementContentFromEAObject(eaElementObj, elemvo);

            return(elemvo);
        }
        // 処理対象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>
        /// ElementList_all.xml を読み、リスト化する
        ///
        /// </summary>
        /// <returns>ElementVOのリスト</returns>
        public ElementVO readElementByGUID(string guid)
        {
            // 対象のelementノードに移動する
            XmlNode elemNode = this.xmlDoc.SelectSingleNode("//element[@guid='" + guid + "']");

            ElementVO elemvo = new ElementVO();

            if (elemNode != null)
            {
                elemvo.name = elemNode.SelectSingleNode("@name").Value;
                elemvo.guid = elemNode.SelectSingleNode("@guid").Value;

                readElementContents(elemvo, elemNode);
            }
            else
            {
                elemvo.name = "(Unknown Object)";
                elemvo.guid = "";
            }

            return(elemvo);
        }
예제 #24
0
        /// <summary>
        /// 要素情報のインデックステーブルの行追加
        /// </summary>
        /// <param name="atf"></param>
        /// <param name="elem"></param>
        private void insertMthTable(ArtifactVO atf, ElementVO elem, MethodVO mth)
        {
            // MethodId が既に出力済みMapに存在しているかをチェックし、存在していたらINSERTせずリターン
            if (outputMethodMap.ContainsKey(mth.methodId))
            {
                return;
            }

            string sql = @"insert into t_attr_mth
					(
                      attrMthId, elemId, elemGuid, attrMthFlg, attrMthType,
                      attrMthGuid, attrMthName, attrMthAlias, attrMthNotes, mthParamDesc
					) values (
					  @attrMthId, @elemId, @elemGuid, @attrMthFlg, @attrMthType,
                      @attrMthGuid, @attrMthName, @attrMthAlias, @attrMthNotes, @mthParamDesc
					) "                    ;

            using (SQLiteCommand command2 = conn.CreateCommand())
            {
                SQLiteParameter[] parameters = new SQLiteParameter[] {
                    new SQLiteParameter("@attrMthId", (mth.methodId))
                    , new SQLiteParameter("@elemId", elem.elementId)
                    , new SQLiteParameter("@elemGuid", elem.guid)
                    , new SQLiteParameter("@attrMthFlg", "m")
                    , new SQLiteParameter("@attrMthType", mth.returnType)
                    , new SQLiteParameter("@attrMthGuid", mth.guid)
                    , new SQLiteParameter("@attrMthName", mth.name)
                    , new SQLiteParameter("@attrMthAlias", mth.alias)
                    , new SQLiteParameter("@attrMthNotes", mth.notes)
                    , new SQLiteParameter("@mthParamDesc", mth.getParamDesc())
                };

                command2.CommandText = sql;
                command2.Parameters.AddRange(parameters);
                command2.ExecuteNonQuery();
            }

            outputMethodMap.Add(mth.methodId, mth);
        }
예제 #25
0
        /// <summary>
        /// t_attr_meth テーブルに属性行の追加
        /// </summary>
        /// <param name="atf"></param>
        /// <param name="elem"></param>
        private void insertAttrTable(ArtifactVO atf, ElementVO elem, AttributeVO attr)
        {
            // AttrbuteId が既に出力済みMapに存在しているかをチェックし、存在していたらINSERTせずリターン
            if (outputAttributeMap.ContainsKey(attr.attributeId))
            {
                return;
            }

            string sql = @"insert into t_attr_mth
					(
                      attrMthId, elemId, elemGuid, attrMthFlg, attrMthType,
                      attrMthGuid, attrMthName, attrMthAlias, attrMthNotes
					) values (
					  @attrMthId, @elemId, @elemGuid, @attrMthFlg, @attrMthType,
                      @attrMthGuid, @attrMthName, @attrMthAlias, @attrMthNotes
					) "                    ;

            using (SQLiteCommand command2 = conn.CreateCommand())
            {
                SQLiteParameter[] parameters = new SQLiteParameter[] {
                    new SQLiteParameter("@attrMthId", (attr.attributeId) * -1)
                    , new SQLiteParameter("@elemId", elem.elementId)
                    , new SQLiteParameter("@elemGuid", elem.guid)
                    , new SQLiteParameter("@attrMthFlg", "a")
                    , new SQLiteParameter("@attrMthType", attr.eaType)
                    , new SQLiteParameter("@attrMthGuid", attr.guid)
                    , new SQLiteParameter("@attrMthName", attr.name)
                    , new SQLiteParameter("@attrMthAlias", attr.alias)
                    , new SQLiteParameter("@attrMthNotes", attr.notes)
                };

                command2.CommandText = sql;
                command2.Parameters.AddRange(parameters);
                command2.ExecuteNonQuery();
            }

            outputAttributeMap.Add(attr.attributeId, attr);
        }
예제 #26
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pack"></param>
        /// <param name="elem"></param>
        private void retrieveElement(PackageVO pack, ElementVO elem, StreamWriter csvsw, short outputType)
        {
            // 論理モデルをターゲットとして要素のタイプ が クラス、インタフェース、列挙 の場合は独自のCSVファイルに出力
            if (elem.eaType == "Class" || elem.eaType == "Interface" || elem.eaType == "Enumeration")
            {
                if (outputType == OUTPUTTYPE_ELEMENT)
                {
                    writeElementCsv(pack, elem, csvsw);
                }
                else if (outputType == OUTPUTTYPE_ATTRMTH)
                {
                    foreach (AttributeVO attr in elem.attributes)
                    {
                        writeCsvFileAttr(pack, elem, attr, csvsw);
                    }

                    foreach (MethodVO mth in elem.methods)
                    {
                        writeCsvFileMethod(pack, elem, mth, csvsw);
                    }
                }
            }
        }
        /// <summary>
        /// 操作の所属クラスの接続要素を取得する
        /// </summary>
        /// <param name="method">EA.Method</param>
        public IList <CrossReference> GetConnectionClassList()
        {
            IList <CrossReference> crList     = new List <CrossReference>();
            ElementsXmlReader      elemReader = new ElementsXmlReader(ProjectSetting.getVO().projectPath);

            foreach (ConnectorVO convo in this.element.connectors)
            {
                CrossReference cref = new CrossReference();
                cref.Name        = convo.targetObjName;
                cref.ElementGUID = convo.targetObjGuid;

                ElementVO destObject = elemReader.readElementByGUID(cref.ElementGUID);

                // タイプ
                cref.Type = convo.connectorType;

                // コメント
//                cref.Notes = connector.Notes;
                cref.Notes = destObject.notes;

                // パッケージ
//                cref.PackageName = repository.GetPackageByID(targetElement.PackageID).Name;
                cref.PackageName = "packageName";

                // 属性・操作一覧
                cref.AttributesMethods = this.GetAttributesMethodsFromElement(destObject);

                // クラスフラグ
                cref.classflg = false;
                // 削除権限フラグ
                cref.CanDelete = false;

                crList.Add(cref);
            }

            return(crList);
        }
예제 #28
0
        /// <summary>
        /// 要素情報のインデックステーブルの行追加
        /// </summary>
        /// <param name="atf"></param>
        /// <param name="elem"></param>
        private void insertElementTable(ArtifactVO atf, ElementVO elem)
        {
            // ElementId が既に出力済みMapに存在しているかをチェックし、存在していたらリターン
            if (outputElementMap.ContainsKey(elem.elementId))
            {
                return;
            }

            string sql = @"insert into t_element
					(objectId, elemGuid, elemName, elemAlias, elemType, elemStereotype,
					 artifactGuid, artifactName, packageId, elementPath
					) values (
					 @objectId, @elemGuid, @elemName, @elemAlias, @elemType, @elemStereotype,
					 @artifactGuid, @artifactName, @packageId, @elementPath
					) "                    ;

            using (SQLiteCommand command2 = conn.CreateCommand()) {
                SQLiteParameter[] parameters = new SQLiteParameter[] {
                    new SQLiteParameter("@objectId", elem.elementId)
                    , new SQLiteParameter("@elemGuid", elem.guid)
                    , new SQLiteParameter("@elemName", elem.name)
                    , new SQLiteParameter("@elemAlias", elem.alias)
                    , new SQLiteParameter("@elemType", elem.eaType)
                    , new SQLiteParameter("@elemStereotype", elem.stereoType)
                    , new SQLiteParameter("@artifactGuid", atf.guid)
                    , new SQLiteParameter("@artifactName", atf.name)
                    , new SQLiteParameter("@packageId", elem.packageId)
                    , new SQLiteParameter("@elementPath", elem.elementPath)
                };

                command2.CommandText = sql;
                command2.Parameters.AddRange(parameters);
                command2.ExecuteNonQuery();
            }

            outputElementMap.Add(elem.elementId, elem);
        }
예제 #29
0
        public ElementForm(ref ElementVO element)
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            // changed のXMLファイルが存在する場合はそちらを読み込む
            if (ElementsXmlReader.existChangedElementFile(element.guid))
            {
                element = ElementsXmlReader.readChangedElementFile(element.guid);
            }

            // このフォームを開いた時点の要素を保存
            savedElement = element;

            // このフォーム内で変更されうる要素オブジェクトはクローンで作成
            myElement = element.Clone();

            //
            this.Text = myElement.eaType + " " + myElement.name + " " + myElement.guid;

            if (ProjectSetting.getEARepo() == null)
            {
                buttonViewDiff.Enabled = false;
            }
            else
            {
                buttonViewDiff.Enabled = true;
            }

            // 初期状態で一時保存ボタンは使用不可
            btnCommit.Enabled = false;

            setElementItems(myElement);
        }
예제 #30
0
        /// <summary>
        /// 要素毎のAsciidoc出力
        /// </summary>
        /// <param name="outputDir"></param>
        /// <param name="elem"></param>
        public static void doWrite(string outputDir, ElementVO elem)
        {
            string filepath = outputDir + "\\elements\\" + elem.guid.Substring(1, 1) + "\\"
                              + elem.guid.Substring(2, 1) + "\\" + elem.guid.Substring(1, 36) + ".adoc";

            // 要素XMLを出力するフォルダ (projectDir + /elements/ 配下) が存在するかを調べ、なければ作る
            string edir = outputDir + @"\elements\" + elem.guid.Substring(1, 1) + @"\" + elem.guid.Substring(2, 1);

            checkAndMakeElementDir(edir);

            try
            {
                //BOM無しのUTF8でテキストファイルを作成する
                StreamWriter sw = new StreamWriter(filepath);
                // atfsw.WriteLine(@":sectnums:");

                //
                writeElement(elem, sw);

                sw.Close();
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }