如何在Java中以编程方式合并EMF模型?

有没有办法在Java中以编程方式将多个Ecore模型(2个或更多个)组合在一个Ecore模型中?所有模型都符合相同的元模型。 在:
Model1 conforming to metamodelX
Model2 conforming to metamodelX
model3 conforming to metamodelX
model4 conforming to metamodelX
model5 conforming to metamodelX
日期:
modelOut conforming to metamodelX and merge of Model1, Model2, model3, model4, model5 ...
    
已邀请:
Eclipse项目用于处理EMF比较和合并,称为EMF比较。 以下是他们提供的示例:
// Loading models
EObject model1 = ModelUtils.load(model1, resourceSet);
EObject model2 = ModelUtils.load(model2, resourceSet);

// Matching model elements
MatchModel match = MatchService.doMatch(model1, model2, Collections.<String, Object> emptyMap());
// Computing differences
DiffModel diff = DiffService.doDiff(match, false);
// Merges all differences from model1 to model2
List<DiffElement> differences = new ArrayList<DiffElement>(diff.getOwnedElements());
MergeService.merge(differences, true);
这确实提供了很好的方法来处理模型合并和其他比较的东西。您也可以手动完成更改。 以下是他们提供的完整示例:这里     
您需要定义“合并”对您意味着什么。您可以轻松地将所有EMF模型附加到同一资源并对其进行序列化。 您可能希望在model1和model2之间建立等效项。找到一些在model1和model2之间相等的对象。 在此之后,您可以找到差异。 举个例子:
Model1 is a FARM with serial number 33829. Children: 2 CHICKENS, 3 EGGS and 1 PIG
Model2 is a FARM with serial number 33829. Children: 4 CHICKENS, 3 EGGS and 1 PIG
匹配步骤确定以下等效项:
Model1->FARM = Model2->FARM   because serial number is equal
all other entities have not been matched
在此步骤之后出现差异步骤:
REMOVED: 2 CHICKENS, 3 EGGS, 1 PIG
ADDED: 4 CHICKENS, 3 EGGS, 1 PIG
使用这些差异,您可以将它们应用于您的模型。仅应用“添加”差异会为您提供以下模型:
Model1+2 is a FARM with serial number 33829. Children: 2 CHICKENS, 3 EGGS, 1 PIG, 4 CHICKENS, 3 EGGS, 1 PIG
由您决定“合并”的业务规则。您首先必须确定两个实体何时相同(匹配)。这可以基于唯一键,它们在树中的位置,或基于许多其他内容,具体取决于您的元模型。 因此,您将获得“差异”列表。由您来定义要应用的差异。 如果您将'merge'视为SVN Merge(即Model1 = Model0 +更改,Model2 = Model0 +其他更改),则
MergeService
已包含执行此操作的所有业务规则。     

要回复问题请先登录注册