2011-01-30 8 views
5

Esiste un modo per combinare più modelli Ecore (2 o più) in un singolo modello Ecore in modo programmatico in Java? Con tutti i modelli conformi allo stesso metamodello.Come unire i modelli EMF a livello di codice in Java?

In:

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 ... 

risposta

6

C'è progetto Eclipse per la gestione di campi elettromagnetici confronto e l'unione, chiamato EMF Confronta.

Ecco esempio fornito da loro:

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

Questo dà veramente ottimi modi per gestire il modello di fusione e altri animali confrontare. Puoi anche passare manualmente le modifiche.

Ecco piena esempio fornito da loro: Here

0

Sarà necessario definire che cosa significa per voi 'merge'. È possibile collegare facilmente tutti i modelli EMF alla stessa risorsa e serializzarli.

Probabilmente vorrai stabilire le equivalenze tra model1 e model2. Trova alcuni oggetti uguali tra model1 e model2. Dopo questo, puoi trovare le differenze.

Ad esempio:

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 

Il corrispondenza passo stabilisce le seguenti equivalenze:

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

Dopo questo passo viene la differenze passo:

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

Utilizzando le differenze , è possibile applicarle al modello. Applicando solo la differenza 'ha aggiunto' ti dà il seguente modello:

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

E 'a voi per determinare le regole di business di 'fusione'. Dovrai prima determinare quando due entità sono uguali (corrispondenza). Questo può essere basato su una chiave univoca, sul loro posto nell'albero o sulla base di molte altre cose, a seconda del tuo metamodello.

Di conseguenza, si avrà un elenco di "differenze". Spetta a te definire quali differenze applicare.

Se vedete "unire" come unione SVN (cioè Modello1 = Modello0 + cambia, Modello2 = Modello0 + altre modifiche), quindi lo MergeService contiene già tutte le regole aziendali per farlo.

Problemi correlati