基于反射机制的EMF模型比较 - 编程入门网
} else {
compareLog.add(new CompareInfo (CompareInfo.REMOTE_ADD,
compareType, remoteObject, localObject));
}
}
for (int i = 0; i < local.size(); i++) {
EObject localObject = (EObject) local.get(i);
EObject remoteObject = findElementByID(remote, localObject);
if (remoteObject == null) { //差集 local-remote 元 素
compareLog.add(new CompareInfo (CompareInfo.REMOTE_DELETE,
compareType, remoteObject, localObject));
}
}
}
基于反射机制的EMF模型比较(5)时间:2011-09-09 IBM 石立川 王芹华 邵兵4. 一个完整的 EMF 模型比较器 下面针对一个本地模型与远端模型同步的场景,综合运用 EMF 反射 API 实 现一个完整的 EMF 模型比较器。所谓同步,是指将远端模型与本地模型做比较 ,得到两者的差异并显示给用户,最终由用户决定更新本地模型还是更新远端模 型的一系列动作。对照图 4 的类图,工具类 ModelComparePort 负责比较本地 模型和远端模型,每比较出一处不同,便生成一个 CompareInfo 对象记录此差 异项,最终得到一个差异项列表。CompareInfo 可以记录的差异类型包括:远端 / 本地模型增加新节点、远端 / 本地模型删除和修改节点。 图 4. 比较器类图 ModelComparePort 类在执行比较之前,函数 initALLStructuralFeature() 初始化一个 EStructuralFeature 列表,罗列所有需要参与比较的字段。如清单 5 所示。设定此列表的作用是控制比较的范围。 清单 5. 初始化需要比较的字段
基于反射机制的EMF模型比较(6)时间:2011-09-09 IBM 石立川 王芹华 邵兵比较两个对象差异的本质是比较两个可比对象相同字段值的差异。本例中的 被比较对象都具有 ID 字段,只有 ID 相同的对象才具有可比性。 当确定两个对象具有可比性之后,需要遍历字段列表 _featureList,获取并 比较两个对象中相同字段的值。因为需要比较的字段来自不同的建模类,并且本 例中这些字段被放置在一个列表内,所以需要判断某字段是否可以用于一个对象 的方法。清单 6 列出了完成这一功能的代码片断,函数 isSuitable() 递归遍 历一个类型及其所有超类型,判断参数 feature 是否适用于此对象。 清单 6. 判断一个 EStructuralFeature 是否适用于一个对象
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |