Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc)  » Working with emf compare from code?
Working with emf compare from code? [message #764800] Mon, 12 December 2011 21:37
js Missing name is currently offline js Missing nameFriend
Messages: 73
Registered: July 2009
Member
I am trying to use emf compare to copy content between model instances
(merge from left to right):


// Create 'org' model
MyBase base = ModelFactory.eINSTANCE.createMyBase();
MyData myData = ModelFactory.eINSTANCE.createMyData();
myData.setName("myname");
base.getContainer().add(myData);

// Create the copy
MyBase copy = ModelFactory.eINSTANCE.createMyBase();

Map<String, Object> options = new HashMap<String, Object>();
try {
MatchModel contentMatch = MatchService.doContentMatch(base, copy,
options);
DiffModel diff = DiffService.doDiff(contentMatch, false);
final List<DiffElement> differences = new
ArrayList<DiffElement>(diff.getOwnedElements());
// This will merge all references to the right model (second argument).
MergeService.merge(differences, true);
} catch (InterruptedException e) {
e.printStackTrace();
}


But I get this exception when calling merge:

org.eclipse.emf.compare.EMFCompareException: Couldn't copy value
model.impl.MyDataImpl@1f44ec7 (name: myname) of reference
org.eclipse.emf.ecore.impl.EReferenceImpl@2c17f7 (name: container) (ordered:
true, unique: true, lowerBound: 0, upperBound: -1) (changeable: true,
volatile: false, transient: false, defaultValueLiteral: null, unsettable:
false, derived: false) (containment: false, resolveProxies: true)
at
org.eclipse.emf.compare.diff.merge.EMFCompareEObjectCopier.copyReferenceValue(EMFCompareEObjectCopier.java:127)
at
org.eclipse.emf.compare.diff.merge.EMFCompareEObjectCopier.copyReferenceValue(EMFCompareEObjectCopier.java:170)
at
org.eclipse.emf.compare.diff.internal.merge.impl.ReferenceChangeLeftTargetMerger.undoInTarget(ReferenceChangeLeftTargetMerger.java:107)
at
org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
at
org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)
at
org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:48)
at
org.eclipse.emf.compare.diff.merge.service.MergeService.doMerge(MergeService.java:166)
at
org.eclipse.emf.compare.diff.merge.service.MergeService.merge(MergeService.java:130)
at
org.eclipse.emf.compare.diff.internal.merge.impl.DiffGroupMerger.undoInTarget(DiffGroupMerger.java:48)




This is the ecore I have defined:



<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="model"
nsURI="http://emf.examples/My.ecore" nsPrefix="example">
<eClassifiers xsi:type="ecore:EClass" name="MyBase">
<eStructuralFeatures xsi:type="ecore:EReference" name="container"
upperBound="-1"
eType="#//MyData"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="MyData">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
</ecore:EPackage>


Why are the changes not merged into the copy object (which is initially
empty)?
Previous Topic:[TEXO] Unique constraints
Next Topic:Best practices when updating/copying ecore models?
Goto Forum:
  


Current Time: Sat Apr 20 02:01:47 GMT 2024

Powered by FUDForum. Page generated in 0.02659 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top