快速业务通道

基于反射机制的EMF模型比较 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
eturn true;        }      }      return false;    }

如果一个 EStructuralFeature 适用于两个对象,则用 eGet() 方法获取两 个对象在该字段的值并进行比较。通过 EMF 反射 API 取值和根据得到值的不同 类型进行比较的细节同第 3 章。ModelComparePort 类的列表类型变量 _comparedNodes 是用作记录已经比较过节点的备忘录,在进行比较之前需要查 阅备忘录避免重复比较,在比较之后需要更新备忘录。比较器发现两个对象的不 同便生成一个 CompareInfo 对象,最终得到一个由 CompareInfo 对象组成的差 异项列表,关键代码如清单 7 所示:

清单 7. 比较两个 EObject 对象

public void compareT(EObject remote, EObject local, int  compareType,        List<CompareInfo> compareLog)    {      if (remote == null && local != null)      {        compareLog.add(new CompareInfo (CompareInfo.REMOTE_DELETE,            compareType, remote, local));        return;      }      else if (remote != null && local == null)      {        compareLog.add(new CompareInfo(CompareInfo.REMOTE_ADD,  compareType,            remote, local));        return;      }      if (((MObject) local).getEditStatus().equals(          EditStatus.DELETED_LITERAL))      {        compareLog.add(new CompareInfo (CompareInfo.REMOTE_MODIFIED,            compareType, remote, local));        return;      }      if (!_comparedNodes.contains(remote))        _comparedNodes.add(remote);      else        return;      // compare all      for (int i = 0; i < _featureList.size(); i++)      {        EStructuralFeature feature = _featureList.get (i);        if (isSuitable(remote, feature))        {          if (remote.eGet(feature) instanceof Elist              || local.eGet(feature) instanceof  Elist)          { // if the value is a list            compare((EList) remote.eGet(feature), (EList)  local                .eGet(feature), compareType,  compareLog);          }          else if (remote.eGet(feature) instanceof  Eobject              || local.eGet(feature) instanceof  Eobject)          { // if the value is an Eobject            compareT((EObject) remote.eGet(feature),  (EObject) local                .eGet(feature), compareType,  compareLog);          }          else          { // if the value is a simple object            Object remoteValue = remote.eGet (feature);            Object localValue = local.eGet(feature);            if (remoteValue != null &&  localValue != null)            {              if (!remoteValue.equals(localValue))              {                // the two remote value and local  value are

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号