Вам нужно будет определить, что для вас означает «слияние». Вы можете легко присоединить все модели EMF к одному ресурсу и сериализовать их.
Возможно, вы захотите установить эквивалентность между моделью 1 и моделью 2. Найдите несколько объектов, которые равны между 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
Вы должны определить бизнес-правила «слияния». Сначала вы должны определить, когда два объекта одинаковы (совпадают). Это может быть основано на уникальном ключе, их месте в дереве или на множестве других вещей, в зависимости от вашей метамодели.
В результате у вас будет список «отличий». Вам решать, какие различия применить.
Если вы видите 'слияние' как слияние SVN (т.е. Model1 = Model0 + изменения, Model2 = Model0 + другие изменения), то MergeService
уже содержит все бизнес-правила для этого.