2011-01-30 11 views
5

Có cách nào kết hợp nhiều mô hình Ecore (2 hoặc nhiều hơn) trong một mô hình Ecore đơn lập trình bằng Java không? Với tất cả các mô hình phù hợp với cùng một metamodel.Làm thế nào để kết hợp các mô hình EMF theo lập trình trong Java?

Trong:

Model1 conforming to metamodelX 
Model2 conforming to metamodelX 
model3 conforming to metamodelX 
model4 conforming to metamodelX 
model5 conforming to metamodelX 

Out:

modelOut conforming to metamodelX and merge of Model1, Model2, model3, model4, model5 ... 

Trả lời

6

Có dự án Eclipse để xử lý EMF so sánh và sáp nhập, gọi EMF Hãy so sánh.

Dưới đây là ví dụ cung cấp bởi chúng:

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

Điều này thực sự cung cấp những cách rất tốt để xử lý các mô hình kết hợp và so sánh chất liệu khác. Bạn cũng có thể thực hiện các thay đổi theo cách thủ công.

Dưới đây là ví dụ hoàn cung cấp bởi chúng: Here

0

Bạn sẽ cần phải xác định những gì 'hợp nhất' có nghĩa đối với bạn. Bạn có thể dễ dàng đính kèm tất cả các mô hình EMF vào cùng một tài nguyên và tuần tự hóa chúng.

Có thể bạn sẽ muốn thiết lập sự tương đương giữa model1 và model2. Tìm một số đối tượng bằng nhau giữa model1 và model2. Sau này, bạn có thể tìm thấy sự khác biệt.

Như một ví dụ:

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 

Các phù hợp với bước thiết lập equivalencies sau:

Model1->FARM = Model2->FARM because serial number is equal 
all other entities have not been matched 

Sau bước này đến các khác biệt bước:

REMOVED: 2 CHICKENS, 3 EGGS, 1 PIG 
ADDED: 4 CHICKENS, 3 EGGS, 1 PIG 

Sử dụng những sự khác biệt , bạn có thể áp dụng chúng cho mô hình của mình. Chỉ áp dụng sự khác biệt 'ĐÃ ĐƯỢC' cung cấp cho bạn mô hình sau:

Model1+2 is a FARM with serial number 33829. Children: 2 CHICKENS, 3 EGGS, 1 PIG, 4 CHICKENS, 3 EGGS, 1 PIG 

Bạn có thể xác định quy tắc kinh doanh 'sáp nhập'. Trước tiên, bạn sẽ phải xác định khi nào hai thực thể giống nhau (khớp). Điều này có thể được dựa trên một khóa duy nhất, trên vị trí của họ trong cây, hoặc dựa trên rất nhiều thứ khác, tùy thuộc vào metamodel của bạn.

Kết quả là bạn sẽ có danh sách 'sự khác biệt'. Đó là vào bạn để xác định những khác biệt để áp dụng.

Nếu bạn thấy 'hợp nhất' dưới dạng SVN Merge (ví dụ: Model1 = Model0 + changes, Model2 = Model0 + các thay đổi khác), thì MergeService đã chứa tất cả các quy tắc kinh doanh để thực hiện việc này.