예제 #1
0
        public void repaint(ElementVO refreshElem)
        {
            this.savedElement = refreshElem;
            this.myElement    = refreshElem.Clone();
            this.panel.Controls.Clear();

            methods          = new List <MethodVO>();
            methNameList     = new List <TextBox>();
            behaviorTextList = new List <TextBox>();

            setElementItems(myElement);
        }
예제 #2
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);
        }
예제 #3
0
        /// <summary>
        /// 要素の不一致部分の抽出
        /// </summary>
        /// <param name="leftElem">左の要素</param>
        /// <param name="rightElem">右の要素</param>
        /// <returns></returns>
        public ElementVO getDisagreedElement(ElementVO leftElm, ElementVO rightElm)
        {
            // 要素自体が保持するプロパティの比較
            ElementVO outElm;

            if (!leftElm.name.Equals(rightElm.name))
            {
                outElm         = rightElm.Clone();
                outElm.changed = 'U';
            }
            else
            {
                outElm         = leftElm.Clone();
                outElm.changed = ' ';
            }

            if (!skipElementTPosFlg)
            {
                if (leftElm.treePos != rightElm.treePos)
                {
                    outElm         = rightElm.Clone();
                    outElm.changed = 'U';
                }
                else
                {
                    outElm         = leftElm.Clone();
                    outElm.changed = ' ';
                }
            }

            // 要素が保持する属性リストの比較
            Int16              lCnt, rCnt;
            AttributeVO        lAtr, rAtr, oAtr;
            List <AttributeVO> outAttributeList = new List <AttributeVO>();

            for (lCnt = 0, rCnt = 0; lCnt < leftElm.attributes.Count && rCnt < rightElm.attributes.Count;)
            {
                // 左側が最終の属性に達した場合
                if (lCnt >= leftElm.attributes.Count)
                {
                    // 右側の属性が追加されたものとして出力パッケージリストに追加
                    oAtr         = rightElm.attributes[rCnt];
                    oAtr.changed = 'C';
                    outAttributeList.Add(oAtr);
                    rCnt++;
                    continue;
                }

                // 右側が最終の属性に達した場合
                if (rCnt >= rightElm.attributes.Count)
                {
                    // 左側の属性が削除されたものとして出力パッケージリストに追加
                    oAtr         = leftElm.attributes[lCnt];
                    oAtr.changed = 'D';
                    outAttributeList.Add(oAtr);
                    lCnt++;
                    continue;
                }

                lAtr = leftElm.attributes[lCnt];
                rAtr = rightElm.attributes[rCnt];

                // GUIDの比較で一致した場合
                if (compareAttributeGuid(lAtr, rAtr) == 0)
                {
                    oAtr = getDisagreedAttribute(lAtr, rAtr);
                    if (oAtr != null)
                    {
                        oAtr.changed       = 'U';
                        oAtr.srcAttribute  = lAtr;
                        oAtr.destAttribute = rAtr;
                        outAttributeList.Add(oAtr);
                    }
                    lCnt++;
                    rCnt++;
                }
                else
                {
                    // 比較で一致するものが無かった場合: L > R なら Rの追加、 R < L なら Lの削除 とみなす
                    if (compareAttributeGuid(lAtr, rAtr) > 0)
                    {
                        oAtr         = rAtr;
                        oAtr.changed = 'C';
                        outAttributeList.Add(oAtr);

                        rCnt++;
                    }
                    else
                    {
                        oAtr         = lAtr;
                        oAtr.changed = 'D';
                        outAttributeList.Add(oAtr);

                        lCnt++;
                    }
                }
            }
            outElm.attributes = outAttributeList;

            // 要素が保持するメソッドリストの比較
            MethodVO        lMth, rMth, oMth;
            List <MethodVO> outMethods = new List <MethodVO>();

            for (lCnt = 0, rCnt = 0; lCnt < leftElm.methods.Count && rCnt < rightElm.methods.Count;)
            {
                // 左側が最終の操作に達した場合
                if (lCnt >= leftElm.methods.Count)
                {
                    // 右側の操作が追加されたものとして出力パッケージリストに追加
                    oMth         = rightElm.methods[rCnt];
                    oMth.changed = 'C';
                    outMethods.Add(oMth);
                    rCnt++;
                    continue;
                }

                // 右側が最終の操作に達した場合
                if (rCnt >= rightElm.methods.Count)
                {
                    // 左側の操作が削除されたものとして出力パッケージリストに追加
                    oMth         = leftElm.methods[lCnt];
                    oMth.changed = 'D';
                    outMethods.Add(oMth);
                    lCnt++;
                    continue;
                }


                lMth = leftElm.methods[lCnt];
                rMth = rightElm.methods[rCnt];

                // GUIDで一致するものがあった場合:
                if (compareMethodGuid(lMth, rMth) == 0)
                {
                    oMth = getDisagreedMethod(lMth, rMth);
                    if (oMth != null)
                    {
                        oMth.changed    = 'U';
                        oMth.srcMethod  = lMth;
                        oMth.destMethod = rMth;
                        outMethods.Add(oMth);
                    }

                    lCnt++;
                    rCnt++;
                }
                else
                {
                    // GUIDで一致するものが無かった場合: L > R なら Rの追加、 R < L なら Lの削除 とみなす
                    if (compareMethodGuid(lMth, rMth) > 0)
                    {
                        rMth.changed = 'C';

                        outMethods.Add(rMth);
                        rCnt++;
                    }
                    else
                    {
                        lMth.changed = 'D';
                        outMethods.Add(lMth);

                        lCnt++;
                    }
                }
            }
            outElm.methods = outMethods;

            // 要素が保持するタグ付き値リストの比較
            TaggedValueVO        lTag, rTag, oTag;
            List <TaggedValueVO> outTaggedValues = new List <TaggedValueVO>();

            for (lCnt = 0, rCnt = 0; lCnt < leftElm.taggedValues.Count && rCnt < rightElm.taggedValues.Count;)
            {
                // 左側が最終の操作に達した場合
                if (lCnt >= leftElm.taggedValues.Count)
                {
                    // 右側の操作が追加されたものとして出力パッケージリストに追加
                    oTag         = rightElm.taggedValues[rCnt];
                    oTag.changed = 'C';
                    outTaggedValues.Add(oTag);
                    rCnt++;
                    continue;
                }

                // 右側が最終の操作に達した場合
                if (rCnt >= rightElm.taggedValues.Count)
                {
                    // 左側の操作が削除されたものとして出力パッケージリストに追加
                    oTag         = leftElm.taggedValues[lCnt];
                    oTag.changed = 'D';
                    outTaggedValues.Add(oTag);
                    lCnt++;
                    continue;
                }


                lTag = leftElm.taggedValues[lCnt];
                rTag = rightElm.taggedValues[rCnt];

                // GUIDで一致するものがあった場合:
                if (compareTaggedValueGuid(lTag, rTag) == 0)
                {
                    oTag = getDisagreedTaggedValue(lTag, rTag);
                    if (oTag != null)
                    {
                        oTag.changed         = 'U';
                        oTag.srcTaggedValue  = lTag;
                        oTag.destTaggedValue = rTag;
                        outTaggedValues.Add(oTag);
                    }

                    lCnt++;
                    rCnt++;
                }
                else
                {
                    // GUIDで一致するものが無かった場合: L > R なら Rの追加、 R < L なら Lの削除 とみなす
                    if (compareTaggedValueGuid(lTag, rTag) > 0)
                    {
                        rTag.changed = 'C';

                        outTaggedValues.Add(rTag);
                        rCnt++;
                    }
                    else
                    {
                        lTag.changed = 'D';
                        outTaggedValues.Add(lTag);

                        lCnt++;
                    }
                }
            }
            outElm.taggedValues = outTaggedValues;

            if (outElm.attributes.Count == 0 && outElm.methods.Count == 0 && outElm.taggedValues.Count == 0)
            {
                if (outElm.changed == ' ')
                {
                    return(null);
                }
                else
                {
                    outElm.changed = 'U';
                    return(outElm);
                }
            }
            else
            {
                outElm.changed = 'U';
                return(outElm);
            }
        }
예제 #4
0
        /// <summary>
        /// 要素の不一致部分の抽出
        /// </summary>
        /// <param name="leftElem">左の要素</param>
        /// <param name="rightElem">右の要素</param>
        /// <returns></returns>
        public ElementVO getDisagreedElement(ElementVO leftElm, ElementVO rightElm)
        {
            // 出力する要素のインスタンスは一旦左側要素のクローンとする
            ElementVO outElm = leftElm.Clone();

            outElm.changed = ' ';

            // 要素自体が保持するプロパティの比較
            ElementPropertyVO lProp = new ElementPropertyVO(leftElm);
            ElementPropertyVO rProp = new ElementPropertyVO(rightElm);

            if (lProp.getComparableString() != rProp.getComparableString())
            {
                outElm.changed             = 'U';
                outElm.propertyChanged     = 'U';
                outElm.srcElementProperty  = lProp;
                outElm.destElementProperty = rProp;
            }


            leftElm.sortChildNodesGuid();
            rightElm.sortChildNodesGuid();


            // 要素が保持する属性リストの比較
            Int16              lCnt, rCnt;
            AttributeVO        lAtr, rAtr, oAtr;
            List <AttributeVO> outAttributeList = new List <AttributeVO>();

            for (lCnt = 0, rCnt = 0; lCnt < leftElm.attributes.Count || rCnt < rightElm.attributes.Count;)
            {
                // 左側が最終の属性に達した場合
                if (lCnt >= leftElm.attributes.Count)
                {
                    // 右側の属性が追加されたものとして出力パッケージリストに追加
                    oAtr         = rightElm.attributes[rCnt];
                    oAtr.changed = 'C';
                    outAttributeList.Add(oAtr);
                    rCnt++;
                    continue;
                }

                // 右側が最終の属性に達した場合
                if (rCnt >= rightElm.attributes.Count)
                {
                    // 左側の属性が削除されたものとして出力パッケージリストに追加
                    oAtr         = leftElm.attributes[lCnt];
                    oAtr.changed = 'D';
                    outAttributeList.Add(oAtr);
                    lCnt++;
                    continue;
                }

                lAtr = leftElm.attributes[lCnt];
                rAtr = rightElm.attributes[rCnt];

                // GUIDの比較で一致した場合
                if (compareAttributeGuid(lAtr, rAtr) == 0)
                {
                    oAtr = getDisagreedAttribute(lAtr, rAtr);
                    if (oAtr != null)
                    {
                        oAtr.changed       = 'U';
                        oAtr.srcAttribute  = lAtr;
                        oAtr.destAttribute = rAtr;
                        outAttributeList.Add(oAtr);
                    }
                    lCnt++;
                    rCnt++;
                }
                else
                {
                    // 比較で一致するものが無かった場合: L > R なら Rの追加、 R < L なら Lの削除 とみなす
                    if (compareAttributeGuid(lAtr, rAtr) > 0)
                    {
                        oAtr         = rAtr;
                        oAtr.changed = 'C';
                        outAttributeList.Add(oAtr);

                        rCnt++;
                    }
                    else
                    {
                        oAtr         = lAtr;
                        oAtr.changed = 'D';
                        outAttributeList.Add(oAtr);

                        lCnt++;
                    }
                }
            }
            outElm.attributes = outAttributeList;

            // 要素が保持するメソッドリストの比較
            MethodVO        lMth, rMth, oMth;
            List <MethodVO> outMethods = new List <MethodVO>();

            for (lCnt = 0, rCnt = 0; lCnt < leftElm.methods.Count || rCnt < rightElm.methods.Count;)
            {
                // 左側が最終の操作に達した場合
                if (lCnt >= leftElm.methods.Count)
                {
                    // 右側の操作が追加されたものとして出力パッケージリストに追加
                    oMth         = rightElm.methods[rCnt];
                    oMth.changed = 'C';
                    outMethods.Add(oMth);
                    rCnt++;
                    continue;
                }

                // 右側が最終の操作に達した場合
                if (rCnt >= rightElm.methods.Count)
                {
                    // 左側の操作が削除されたものとして出力パッケージリストに追加
                    oMth         = leftElm.methods[lCnt];
                    oMth.changed = 'D';
                    outMethods.Add(oMth);
                    lCnt++;
                    continue;
                }


                lMth = leftElm.methods[lCnt];
                rMth = rightElm.methods[rCnt];

                // GUIDで一致するものがあった場合:
                if (compareMethodGuid(lMth, rMth) == 0)
                {
                    oMth = getDisagreedMethod(lMth, rMth);
                    if (oMth != null)
                    {
                        oMth.changed    = 'U';
                        oMth.srcMethod  = lMth;
                        oMth.destMethod = rMth;
                        outMethods.Add(oMth);
                    }

                    lCnt++;
                    rCnt++;
                }
                else
                {
                    // GUIDで一致するものが無かった場合: L > R なら Rの追加、 R < L なら Lの削除 とみなす
                    if (compareMethodGuid(lMth, rMth) > 0)
                    {
                        rMth.changed = 'C';

                        outMethods.Add(rMth);
                        rCnt++;
                    }
                    else
                    {
                        lMth.changed = 'D';
                        outMethods.Add(lMth);

                        lCnt++;
                    }
                }
            }
            outElm.methods = outMethods;

            // 要素が保持するタグ付き値リストの比較
            TaggedValueVO        lTag, rTag, oTag;
            List <TaggedValueVO> outTaggedValues = new List <TaggedValueVO>();

            for (lCnt = 0, rCnt = 0; lCnt < leftElm.taggedValues.Count || rCnt < rightElm.taggedValues.Count;)
            {
                // 左側が最終の操作に達した場合
                if (lCnt >= leftElm.taggedValues.Count)
                {
                    // 右側の操作が追加されたものとして出力パッケージリストに追加
                    oTag         = rightElm.taggedValues[rCnt];
                    oTag.changed = 'C';
                    outTaggedValues.Add(oTag);
                    rCnt++;
                    continue;
                }

                // 右側が最終の操作に達した場合
                if (rCnt >= rightElm.taggedValues.Count)
                {
                    // 左側の操作が削除されたものとして出力パッケージリストに追加
                    oTag         = leftElm.taggedValues[lCnt];
                    oTag.changed = 'D';
                    outTaggedValues.Add(oTag);
                    lCnt++;
                    continue;
                }


                lTag = leftElm.taggedValues[lCnt];
                rTag = rightElm.taggedValues[rCnt];

                // GUIDで一致するものがあった場合:
                if (compareTaggedValueGuid(lTag, rTag) == 0)
                {
                    oTag = getDisagreedTaggedValue(lTag, rTag);
                    if (oTag != null)
                    {
                        oTag.changed         = 'U';
                        oTag.srcTaggedValue  = lTag;
                        oTag.destTaggedValue = rTag;
                        outTaggedValues.Add(oTag);
                    }

                    lCnt++;
                    rCnt++;
                }
                else
                {
                    // GUIDで一致するものが無かった場合: L > R なら Rの追加、 R < L なら Lの削除 とみなす
                    if (compareTaggedValueGuid(lTag, rTag) > 0)
                    {
                        rTag.changed = 'C';

                        outTaggedValues.Add(rTag);
                        rCnt++;
                    }
                    else
                    {
                        lTag.changed = 'D';
                        outTaggedValues.Add(lTag);

                        lCnt++;
                    }
                }
            }
            outElm.taggedValues = outTaggedValues;

            if (outElm.attributes.Count == 0 && outElm.methods.Count == 0 && outElm.taggedValues.Count == 0)
            {
                if (outElm.changed == ' ')
                {
                    return(null);
                }
                else
                {
                    outElm.changed = 'U';
                    return(outElm);
                }
            }
            else
            {
                outElm.changed = 'U';
                return(outElm);
            }
        }