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); }
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); }
/// <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); } }
/// <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); } }