Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc)  » Merging UML models
Merging UML models [message #119142] Sat, 19 April 2008 09:07 Go to next message
Sam Sabra is currently offline Sam SabraFriend
Messages: 10
Registered: July 2009
Junior Member
Good day,

I'm trying to modify the standalone example by Cedric Brun (ExampleLauncher.java) to merge two UML models. I've managed to get
it to output the result.emfdiff difference file (while ignoring XMI IDs). When I try to merge, I get a
java.lang.NullPointerException at MergeService.merge(diff.getOwnedElements(), true); (see details below). Any ideas?

Thanks,

Sam

Here's the error:

Exception in thread "main" java.lang.NullPointerException
at org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
at org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
at org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
at org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
at org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)

Here's the essential code:

if (args.length == 2 && new File(args[0]).canRead() && new File(args[1]).canRead()) {
// Creates the resourceSet where we'll load the models
final ResourceSet resourceSet = new ResourceSetImpl();
UMLPackage umlPackage = UMLPackage.eINSTANCE;
resourceSet.getPackageRegistry().put(umlPackage.getNsURI(), umlPackage);

try {
// Loads the two models passed as arguments
final EObject model1 = ModelUtils.load(new File(args[0]), resourceSet);
final EObject model2 = ModelUtils.load(new File(args[1]), resourceSet);


Map<String,Object> options = new HashMap<String,Object>();
options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);

// Creates the match then the diff model for those two models
final MatchModel match = MatchService.doMatch(model1, model2, options);
final DiffModel diff = DiffService.doDiff(match, false);

MergeService.merge(diff.getOwnedElements(), true); // line 77: java.lang.NullPointerException


// Prints the results
try {
System.out.println(ModelUtils.serialize(match));
System.out.println(ModelUtils.serialize(diff));
} catch (IOException e) {
e.printStackTrace();
}

// Serializes the result as "result.emfdiff" in the directory this class has been called from.
System.out.println("saving emfdiff as \"result.emfdiff\""); //$NON-NLS-1$
final ModelInputSnapshot snapshot = DiffFactory.eINSTANCE.createModelInputSnapshot();
snapshot.setDate(Calendar.getInstance().getTime());
snapshot.setMatch(match);
snapshot.setDiff(diff);
ModelUtils.save(snapshot, "result.emfdiff"); //$NON-NLS-1$
} catch (IOException e) {
// shouldn't be thrown
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Re: Merging UML models [message #119338 is a reply to message #119142] Mon, 21 April 2008 08:15 Go to previous messageGo to next message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------020606000705040607050701
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Sam,

I wonder... Are you using EMF Compare's latest build or the code from
CVS? We fixed some problems within the merging API and some of the
lines from your stack no longer match with code lines so this issue
could already be fixed.

Could you update to the latest version of EMF Compare (we have a new
build ready if you use the built version) and check if the problem still
happens?

If the exception is still thrown, could you provide us the models you
compare (either through bugzilla (preferred) or mail)? This is a
potential problem of the generic differencing engine and we'd need to
confirm it.

Laurent Goubet
Obeo

Sam Sabra a
Re: Merging UML models [message #119414 is a reply to message #119338] Mon, 21 April 2008 19:28 Go to previous messageGo to next message
Sam Sabra is currently offline Sam SabraFriend
Messages: 10
Registered: July 2009
Junior Member
Laurent,

Thanks for the reply.

I've updated to the latest build and I got the same error with different
line numbers. Please see https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087

Regards,

Sam

laurent Goubet wrote:
> Sam,
>
> I wonder... Are you using EMF Compare's latest build or the code from
> CVS? We fixed some problems within the merging API and some of the
> lines from your stack no longer match with code lines so this issue
> could already be fixed.
>
> Could you update to the latest version of EMF Compare (we have a new
> build ready if you use the built version) and check if the problem still
> happens?
>
> If the exception is still thrown, could you provide us the models you
> compare (either through bugzilla (preferred) or mail)? This is a
> potential problem of the generic differencing engine and we'd need to
> confirm it.
>
> Laurent Goubet
> Obeo
>
> Sam Sabra a écrit :
>> Good day,
>>
>> I'm trying to modify the standalone example by Cedric Brun
>> (ExampleLauncher.java) to merge two UML models. I've managed to get it
>> to output the result.emfdiff difference file (while ignoring XMI IDs).
>> When I try to merge, I get a java.lang.NullPointerException at
>> MergeService.merge(diff.getOwnedElements(), true); (see details
>> below). Any ideas?
>>
>> Thanks,
>>
>> Sam
>>
>> Here's the error:
>>
>> Exception in thread "main" java.lang.NullPointerException
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>
>> at
>> org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>
>>
>> Here's the essential code:
>>
>> if (args.length == 2 && new File(args[0]).canRead() && new
>> File(args[1]).canRead()) {
>> // Creates the resourceSet where we'll load the models
>> final ResourceSet resourceSet = new ResourceSetImpl();
>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>
>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(), umlPackage);
>>
>> try {
>> // Loads the two models passed as arguments
>> final EObject model1 = ModelUtils.load(new
>> File(args[0]), resourceSet);
>> final EObject model2 = ModelUtils.load(new
>> File(args[1]), resourceSet);
>>
>>
>> Map<String,Object> options = new
>> HashMap<String,Object>();
>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>
>> // Creates the match then the diff model for those two
>> models
>> final MatchModel match = MatchService.doMatch(model1,
>> model2, options);
>> final DiffModel diff = DiffService.doDiff(match, false);
>>
>> MergeService.merge(diff.getOwnedElements(), true); //
>> line 77: java.lang.NullPointerException
>>
>>
>> // Prints the results
>> try {
>> System.out.println(ModelUtils.serialize(match));
>> System.out.println(ModelUtils.serialize(diff));
>> } catch (IOException e) {
>> e.printStackTrace();
>> }
>>
>> // Serializes the result as "result.emfdiff" in the
>> directory this class has been called from.
>> System.out.println("saving emfdiff as
>> \"result.emfdiff\""); //$NON-NLS-1$
>> final ModelInputSnapshot snapshot =
>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>> snapshot.setDate(Calendar.getInstance().getTime());
>> snapshot.setMatch(match);
>> snapshot.setDiff(diff);
>> ModelUtils.save(snapshot, "result.emfdiff");
>> //$NON-NLS-1$
>> } catch (IOException e) {
>> // shouldn't be thrown
>> e.printStackTrace();
>> } catch (InterruptedException e) {
>> e.printStackTrace();
>> }
>> }
>>
>>
>>
>>
>>
>
Re: Merging UML models [message #119478 is a reply to message #119414] Tue, 22 April 2008 11:51 Go to previous messageGo to next message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------080609070400090401000107
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Sam,

Thanks for the feedback, this was indeed a bug on our side. This has
been fixed on CVS and will be included in the next integration build.

Laurent Goubet
Obeo

Sam Sabra a
Re: Merging UML models [message #119638 is a reply to message #119478] Wed, 23 April 2008 02:47 Go to previous messageGo to next message
Sam Sabra is currently offline Sam SabraFriend
Messages: 10
Registered: July 2009
Junior Member
Laurent,

Thank you for handling this quickly, excellent response time! Looking
forward to the next integration build.

Best regards,

Sam

laurent Goubet wrote:
> Sam,
>
> Thanks for the feedback, this was indeed a bug on our side. This has
> been fixed on CVS and will be included in the next integration build.
>
> Laurent Goubet
> Obeo
>
> Sam Sabra a écrit :
>> Laurent,
>>
>> Thanks for the reply.
>>
>> I've updated to the latest build and I got the same error with
>> different line numbers. Please see
>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>
>> Regards,
>>
>> Sam
>>
>> laurent Goubet wrote:
>>> Sam,
>>>
>>> I wonder... Are you using EMF Compare's latest build or the code from
>>> CVS? We fixed some problems within the merging API and some of the
>>> lines from your stack no longer match with code lines so this issue
>>> could already be fixed.
>>>
>>> Could you update to the latest version of EMF Compare (we have a new
>>> build ready if you use the built version) and check if the problem
>>> still happens?
>>>
>>> If the exception is still thrown, could you provide us the models you
>>> compare (either through bugzilla (preferred) or mail)? This is a
>>> potential problem of the generic differencing engine and we'd need to
>>> confirm it.
>>>
>>> Laurent Goubet
>>> Obeo
>>>
>>> Sam Sabra a écrit :
>>>> Good day,
>>>>
>>>> I'm trying to modify the standalone example by Cedric Brun
>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>> below). Any ideas?
>>>>
>>>> Thanks,
>>>>
>>>> Sam
>>>>
>>>> Here's the error:
>>>>
>>>> Exception in thread "main" java.lang.NullPointerException
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>>>
>>>>
>>>> Here's the essential code:
>>>>
>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>> File(args[1]).canRead()) {
>>>> // Creates the resourceSet where we'll load the models
>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>
>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>> umlPackage);
>>>>
>>>> try {
>>>> // Loads the two models passed as arguments
>>>> final EObject model1 = ModelUtils.load(new
>>>> File(args[0]), resourceSet);
>>>> final EObject model2 = ModelUtils.load(new
>>>> File(args[1]), resourceSet);
>>>>
>>>>
>>>> Map<String,Object> options = new
>>>> HashMap<String,Object>();
>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>>>
>>>> // Creates the match then the diff model for those
>>>> two models
>>>> final MatchModel match =
>>>> MatchService.doMatch(model1, model2, options);
>>>> final DiffModel diff = DiffService.doDiff(match,
>>>> false);
>>>>
>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>> // line 77: java.lang.NullPointerException
>>>>
>>>>
>>>> // Prints the results
>>>> try {
>>>> System.out.println(ModelUtils.serialize(match));
>>>> System.out.println(ModelUtils.serialize(diff));
>>>> } catch (IOException e) {
>>>> e.printStackTrace();
>>>> }
>>>>
>>>> // Serializes the result as "result.emfdiff" in the
>>>> directory this class has been called from.
>>>> System.out.println("saving emfdiff as
>>>> \"result.emfdiff\""); //$NON-NLS-1$
>>>> final ModelInputSnapshot snapshot =
>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>> snapshot.setMatch(match);
>>>> snapshot.setDiff(diff);
>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>> //$NON-NLS-1$
>>>> } catch (IOException e) {
>>>> // shouldn't be thrown
>>>> e.printStackTrace();
>>>> } catch (InterruptedException e) {
>>>> e.printStackTrace();
>>>> }
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>
Re: Merging UML models [message #119844 is a reply to message #119638] Thu, 24 April 2008 09:38 Go to previous messageGo to next message
Cedric Brun is currently offline Cedric BrunFriend
Messages: 431
Registered: July 2009
Senior Member
Hi Sam,

The new build is available here :

http://www.eclipse.org/modeling/emft/downloads/?project=comp are

regards,

Cédric

Sam Sabra wrote:

> Laurent,
>
> Thank you for handling this quickly, excellent response time! Looking
> forward to the next integration build.
>
> Best regards,
>
> Sam
>
> laurent Goubet wrote:
>> Sam,
>>
>> Thanks for the feedback, this was indeed a bug on our side. This has
>> been fixed on CVS and will be included in the next integration build.
>>
>> Laurent Goubet
>> Obeo
>>
>> Sam Sabra a écrit :
>>> Laurent,
>>>
>>> Thanks for the reply.
>>>
>>> I've updated to the latest build and I got the same error with
>>> different line numbers. Please see
>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>
>>> Regards,
>>>
>>> Sam
>>>
>>> laurent Goubet wrote:
>>>> Sam,
>>>>
>>>> I wonder... Are you using EMF Compare's latest build or the code from
>>>> CVS? We fixed some problems within the merging API and some of the
>>>> lines from your stack no longer match with code lines so this issue
>>>> could already be fixed.
>>>>
>>>> Could you update to the latest version of EMF Compare (we have a new
>>>> build ready if you use the built version) and check if the problem
>>>> still happens?
>>>>
>>>> If the exception is still thrown, could you provide us the models you
>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>> potential problem of the generic differencing engine and we'd need to
>>>> confirm it.
>>>>
>>>> Laurent Goubet
>>>> Obeo
>>>>
>>>> Sam Sabra a écrit :
>>>>> Good day,
>>>>>
>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>> below). Any ideas?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Sam
>>>>>
>>>>> Here's the error:
>>>>>
>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>>>>
>>>>>
>>>>> Here's the essential code:
>>>>>
>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>> File(args[1]).canRead()) {
>>>>> // Creates the resourceSet where we'll load the models
>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>
>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>> umlPackage);
>>>>>
>>>>> try {
>>>>> // Loads the two models passed as arguments
>>>>> final EObject model1 = ModelUtils.load(new
>>>>> File(args[0]), resourceSet);
>>>>> final EObject model2 = ModelUtils.load(new
>>>>> File(args[1]), resourceSet);
>>>>>
>>>>>
>>>>> Map<String,Object> options = new
>>>>> HashMap<String,Object>();
>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>>>>
>>>>> // Creates the match then the diff model for those
>>>>> two models
>>>>> final MatchModel match =
>>>>> MatchService.doMatch(model1, model2, options);
>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>> false);
>>>>>
>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>> // line 77: java.lang.NullPointerException
>>>>>
>>>>>
>>>>> // Prints the results
>>>>> try {
>>>>> System.out.println(ModelUtils.serialize(match));
>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>> } catch (IOException e) {
>>>>> e.printStackTrace();
>>>>> }
>>>>>
>>>>> // Serializes the result as "result.emfdiff" in the
>>>>> directory this class has been called from.
>>>>> System.out.println("saving emfdiff as
>>>>> \"result.emfdiff\""); //$NON-NLS-1$
>>>>> final ModelInputSnapshot snapshot =
>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>> snapshot.setMatch(match);
>>>>> snapshot.setDiff(diff);
>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>> //$NON-NLS-1$
>>>>> } catch (IOException e) {
>>>>> // shouldn't be thrown
>>>>> e.printStackTrace();
>>>>> } catch (InterruptedException e) {
>>>>> e.printStackTrace();
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>


http://cedric.brun.io news and articles on eclipse and eclipse modeling.
Re: Merging UML models [message #122682 is a reply to message #119844] Mon, 19 May 2008 16:38 Go to previous messageGo to next message
Mark Melia is currently offline Mark MeliaFriend
Messages: 142
Registered: July 2009
Senior Member
Hi Sam, Cedric,

I was having the same problem, and got the latest from the EMFT site. I
now have a new error, a ConcurrentModificationException which is a bit of
a mystery as there is nothing concurrent in what I am doing? The error is
below, I am working with EMF Compare 0.8.0v20080506. Any ideas?

Mark

java.util.ConcurrentModificationException
at
org.eclipse.emf.common.util.BasicEList$EIterator.checkModCou nt(BasicEList.java:1378)
at
org.eclipse.emf.common.util.BasicEList$EIterator.doNext(Basi cEList.java:1332)
at
org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicE List.java:1312)
at
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:132)
at test.Test.main(Test.java:39)

Cédric Brun wrote:

> Hi Sam,

> The new build is available here :

> http://www.eclipse.org/modeling/emft/downloads/?project=comp are

> regards,

> Cédric

> Sam Sabra wrote:

>> Laurent,
>>
>> Thank you for handling this quickly, excellent response time! Looking
>> forward to the next integration build.
>>
>> Best regards,
>>
>> Sam
>>
>> laurent Goubet wrote:
>>> Sam,
>>>
>>> Thanks for the feedback, this was indeed a bug on our side. This has
>>> been fixed on CVS and will be included in the next integration build.
>>>
>>> Laurent Goubet
>>> Obeo
>>>
>>> Sam Sabra a écrit :
>>>> Laurent,
>>>>
>>>> Thanks for the reply.
>>>>
>>>> I've updated to the latest build and I got the same error with
>>>> different line numbers. Please see
>>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>>
>>>> Regards,
>>>>
>>>> Sam
>>>>
>>>> laurent Goubet wrote:
>>>>> Sam,
>>>>>
>>>>> I wonder... Are you using EMF Compare's latest build or the code from
>>>>> CVS? We fixed some problems within the merging API and some of the
>>>>> lines from your stack no longer match with code lines so this issue
>>>>> could already be fixed.
>>>>>
>>>>> Could you update to the latest version of EMF Compare (we have a new
>>>>> build ready if you use the built version) and check if the problem
>>>>> still happens?
>>>>>
>>>>> If the exception is still thrown, could you provide us the models you
>>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>>> potential problem of the generic differencing engine and we'd need to
>>>>> confirm it.
>>>>>
>>>>> Laurent Goubet
>>>>> Obeo
>>>>>
>>>>> Sam Sabra a écrit :
>>>>>> Good day,
>>>>>>
>>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>>> below). Any ideas?
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Sam
>>>>>>
>>>>>> Here's the error:
>>>>>>
>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>>>>>
>>>>>>
>>>>>> Here's the essential code:
>>>>>>
>>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>>> File(args[1]).canRead()) {
>>>>>> // Creates the resourceSet where we'll load the models
>>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>>
>>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>>> umlPackage);
>>>>>>
>>>>>> try {
>>>>>> // Loads the two models passed as arguments
>>>>>> final EObject model1 = ModelUtils.load(new
>>>>>> File(args[0]), resourceSet);
>>>>>> final EObject model2 = ModelUtils.load(new
>>>>>> File(args[1]), resourceSet);
>>>>>>
>>>>>>
>>>>>> Map<String,Object> options = new
>>>>>> HashMap<String,Object>();
>>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>>>>>
>>>>>> // Creates the match then the diff model for those
>>>>>> two models
>>>>>> final MatchModel match =
>>>>>> MatchService.doMatch(model1, model2, options);
>>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>>> false);
>>>>>>
>>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>>> // line 77: java.lang.NullPointerException
>>>>>>
>>>>>>
>>>>>> // Prints the results
>>>>>> try {
>>>>>> System.out.println(ModelUtils.serialize(match));
>>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>>> } catch (IOException e) {
>>>>>> e.printStackTrace();
>>>>>> }
>>>>>>
>>>>>> // Serializes the result as "result.emfdiff" in the
>>>>>> directory this class has been called from.
>>>>>> System.out.println("saving emfdiff as
>>>>>> "result.emfdiff""); //$NON-NLS-1$
>>>>>> final ModelInputSnapshot snapshot =
>>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>>> snapshot.setMatch(match);
>>>>>> snapshot.setDiff(diff);
>>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>>> //$NON-NLS-1$
>>>>>> } catch (IOException e) {
>>>>>> // shouldn't be thrown
>>>>>> e.printStackTrace();
>>>>>> } catch (InterruptedException e) {
>>>>>> e.printStackTrace();
>>>>>> }
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
Re: Merging UML models [message #122692 is a reply to message #122682] Tue, 20 May 2008 07:08 Go to previous messageGo to next message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------060403030008040902080707
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit

Mark,

Here is the javadoc for MergeService#merge(List, boolean) which you are
calling in your code :

/**
* Merges a list of DiffElements in the direction specified by
<code>leftToRight</code>.
* <p>
* Will notify the list of its merge listeners before, and after the
operation.
* </p>
*
* @param elements
* {@link DiffElement}s containing the information to merge.
* @param leftToRight
* <code>True</code> if the changes must be applied from the
left to the right model,
* <code>False</code> when they have to be applied the other
way around.
* @throws ConcurrentModificationException
* Could be thrown if the list you give is directly a
reference from the meta model such as
* {@link DiffModel#getOwnedElements()} or {@link
DiffElement#getSubDiffElements()}. Copy the
* list before merging it.
*/

So yes, a ConcurrentModificationException *can* be thrown as the model
will be modified when using merge operations. Simply create a new List
containing all the elements to be merged to avoid these exceptions.

Laurent Goubet
Obeo

Mark Melia a
Re: Merging UML models [message #122697 is a reply to message #122692] Tue, 20 May 2008 11:09 Go to previous messageGo to next message
Mark Melia is currently offline Mark MeliaFriend
Messages: 142
Registered: July 2009
Senior Member
Hi Laurent,

Ok - I think I am nearly there - and thanks again for all your help. I
have the code running ok (well appears to be), but the models do not
change - there is no merge of one model into another (am I missing
something)?

I have pasted the code below and I think it should work as when i iterate
the diffElements I get:
org.eclipse.emf.compare.diff.metamodel.impl.DiffGroupImpl@12b3d53
(conflicting: false, kind: Addition)

Any ideas - thanks :)?

Mark

ps If you want to see the models I can paste the XMI in.

public static void main(String[] args) {
try {
EPackage model = (EPackage)ModelUtils.load(new
File("/home/mmelia/workspace3/AATest/model/A.ecore"), new
ResourceSetImpl());
EPackage.Registry.INSTANCE.put("http://dcu.ie/#A", model);

Resource model1 = ModelUtils.load(new
File("/home/mmelia/workspace3/AATest/model/B.ecore"), new
ResourceSetImpl()).eResource();
Resource model2 =
ModelUtils.load(URI.createFileURI("/home/mmelia/workspace3/AATest/model/C.ecore "),new
ResourceSetImpl()).eResource();

final MatchModel match = MatchService.doResourceMatch(model1, model2,
null);
// Detects differences
final DiffModel diff = DiffService.doDiff(match);
// Merges all differences from model1 to model2
EList<DiffElement> el = new BasicEList
<DiffElement>(diff.getOwnedElements());
MergeService.merge(el, true);
Iterator itr = el.iterator();
while(itr.hasNext()){

Object diffElement = itr.next();
DiffElement d = (org.eclipse.emf.compare.diff.metamodel.DiffElement)
diffElement;
System.out.println("here "+ d);
while(d.eContents().iterator().hasNext()){
EObject o = (EObject)d.eContents().iterator().next();
System.out.println(o);
}
}

} catch (Exception exception) {
exception.printStackTrace();


laurent Goubet wrote:

> Mark,

> Here is the javadoc for MergeService#merge(List, boolean) which you are
> calling in your code :

> /**
> * Merges a list of DiffElements in the direction specified by
> <code>leftToRight</code>.
> * <p>
> * Will notify the list of its merge listeners before, and after the
> operation.
> * </p>
> *
> * @param elements
> * {@link DiffElement}s containing the information to merge.
> * @param leftToRight
> * <code>True</code> if the changes must be applied from the
> left to the right model,
> * <code>False</code> when they have to be applied the other
> way around.
> * @throws ConcurrentModificationException
> * Could be thrown if the list you give is directly a
> reference from the meta model such as
> * {@link DiffModel#getOwnedElements()} or {@link
> DiffElement#getSubDiffElements()}. Copy the
> * list before merging it.
> */

> So yes, a ConcurrentModificationException *can* be thrown as the model
> will be modified when using merge operations. Simply create a new List
> containing all the elements to be merged to avoid these exceptions.

> Laurent Goubet
> Obeo

> Mark Melia a écrit :
>> Hi Sam, Cedric,
>>
>> I was having the same problem, and got the latest from the EMFT site. I
>> now have a new error, a ConcurrentModificationException which is a bit
>> of a mystery as there is nothing concurrent in what I am doing? The
>> error is below, I am working with EMF Compare 0.8.0v20080506. Any ideas?
>>
>> Mark
>>
>> java.util.ConcurrentModificationException
>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.checkModCou nt(BasicEList.java:1378)
>>
>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.doNext(Basi cEList.java:1332)
>>
>> at
>> org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicE List.java:1312)
>> at
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:132)
>>
>> at test.Test.main(Test.java:39)
>>
>> Cédric Brun wrote:
>>
>>> Hi Sam,
>>
>>> The new build is available here :
>>
>>> http://www.eclipse.org/modeling/emft/downloads/?project=comp are
>>
>>> regards,
>>
>>> Cédric
>>
>>> Sam Sabra wrote:
>>
>>>> Laurent,
>>>>
>>>> Thank you for handling this quickly, excellent response time! Looking
>>>> forward to the next integration build.
>>>>
>>>> Best regards,
>>>>
>>>> Sam
>>>>
>>>> laurent Goubet wrote:
>>>>> Sam,
>>>>>
>>>>> Thanks for the feedback, this was indeed a bug on our side. This has
>>>>> been fixed on CVS and will be included in the next integration build.
>>>>>
>>>>> Laurent Goubet
>>>>> Obeo
>>>>>
>>>>> Sam Sabra a écrit :
>>>>>> Laurent,
>>>>>>
>>>>>> Thanks for the reply.
>>>>>>
>>>>>> I've updated to the latest build and I got the same error with
>>>>>> different line numbers. Please see
>>>>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Sam
>>>>>>
>>>>>> laurent Goubet wrote:
>>>>>>> Sam,
>>>>>>>
>>>>>>> I wonder... Are you using EMF Compare's latest build or the code from
>>>>>>> CVS? We fixed some problems within the merging API and some of the
>>>>>>> lines from your stack no longer match with code lines so this issue
>>>>>>> could already be fixed.
>>>>>>>
>>>>>>> Could you update to the latest version of EMF Compare (we have a new
>>>>>>> build ready if you use the built version) and check if the problem
>>>>>>> still happens?
>>>>>>>
>>>>>>> If the exception is still thrown, could you provide us the models you
>>>>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>>>>> potential problem of the generic differencing engine and we'd need to
>>>>>>> confirm it.
>>>>>>>
>>>>>>> Laurent Goubet
>>>>>>> Obeo
>>>>>>>
>>>>>>> Sam Sabra a écrit :
>>>>>>>> Good day,
>>>>>>>>
>>>>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>>>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>>>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>>>>> below). Any ideas?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Sam
>>>>>>>>
>>>>>>>> Here's the error:
>>>>>>>>
>>>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Here's the essential code:
>>>>>>>>
>>>>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>>>>> File(args[1]).canRead()) {
>>>>>>>> // Creates the resourceSet where we'll load the models
>>>>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>>>>
>>>>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>>>>> umlPackage);
>>>>>>>>
>>>>>>>> try {
>>>>>>>> // Loads the two models passed as arguments
>>>>>>>> final EObject model1 = ModelUtils.load(new
>>>>>>>> File(args[0]), resourceSet);
>>>>>>>> final EObject model2 = ModelUtils.load(new
>>>>>>>> File(args[1]), resourceSet);
>>>>>>>>
>>>>>>>>
>>>>>>>> Map<String,Object> options = new
>>>>>>>> HashMap<String,Object>();
>>>>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID,
>>>>>>>> true);
>>>>>>>>
>>>>>>>> // Creates the match then the diff model for those
>>>>>>>> two models
>>>>>>>> final MatchModel match =
>>>>>>>> MatchService.doMatch(model1, model2, options);
>>>>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>>>>> false);
>>>>>>>>
>>>>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>>>>> // line 77: java.lang.NullPointerException
>>>>>>>>
>>>>>>>>
>>>>>>>> // Prints the results
>>>>>>>> try {
>>>>>>>> System.out.println(ModelUtils.serialize(match));
>>>>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>>>>> } catch (IOException e) {
>>>>>>>> e.printStackTrace();
>>>>>>>> }
>>>>>>>>
>>>>>>>> // Serializes the result as "result.emfdiff" in the
>>>>>>>> directory this class has been called from.
>>>>>>>> System.out.println("saving emfdiff as
>>>>>>>> "result.emfdiff""); //$NON-NLS-1$
>>>>>>>> final ModelInputSnapshot snapshot =
>>>>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>>>>> snapshot.setMatch(match);
>>>>>>>> snapshot.setDiff(diff);
>>>>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>>>>> //$NON-NLS-1$
>>>>>>>> } catch (IOException e) {
>>>>>>>> // shouldn't be thrown
>>>>>>>> e.printStackTrace();
>>>>>>>> } catch (InterruptedException e) {
>>>>>>>> e.printStackTrace();
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>
>>
Re: Merging UML models [message #122704 is a reply to message #122697] Tue, 20 May 2008 11:24 Go to previous messageGo to next message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------010308070404050207040107
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit

Mark,

You will need to save the merged model. Simply put the following line
before the end of your try/catch :

model2.save(Collections.emptyMap());

Laurent Goubet
Obeo

Mark Melia a
Re: Merging UML models [message #122710 is a reply to message #122704] Tue, 20 May 2008 12:31 Go to previous messageGo to next message
Mark Melia is currently offline Mark MeliaFriend
Messages: 142
Registered: July 2009
Senior Member
Hi Laurent,

Thanks for that, it now saves a new model, but the model seems to just be
model1 copied to model2. I am wondering if I am using the right classes,
as I see there are two MergeService classes for EMF compare. I have copied
my import statements - are all these the correct classes to be using?

Apologies for not getting this - and thanks for your patience.

Mark

import org.eclipse.emf.compare.diff.merge.service.MergeService;
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
import org.eclipse.emf.compare.diff.metamodel.DiffModel;
import org.eclipse.emf.compare.diff.service.DiffService;
import org.eclipse.emf.compare.match.metamodel.MatchModel;
import org.eclipse.emf.compare.match.service.MatchService;
import org.eclipse.emf.compare.util.ModelUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI

laurent Goubet wrote:

> Mark,

> You will need to save the merged model. Simply put the following line
> before the end of your try/catch :

> model2.save(Collections.emptyMap());

> Laurent Goubet
> Obeo

> Mark Melia a écrit :
>> Hi Laurent,
>>
>> Ok - I think I am nearly there - and thanks again for all your help. I
>> have the code running ok (well appears to be), but the models do not
>> change - there is no merge of one model into another (am I missing
>> something)?
>>
>> I have pasted the code below and I think it should work as when i
>> iterate the diffElements I get:
>> org.eclipse.emf.compare.diff.metamodel.impl.DiffGroupImpl@12b3d53
>> (conflicting: false, kind: Addition)
>>
>> Any ideas - thanks :)?
>>
>> Mark
>>
>> ps If you want to see the models I can paste the XMI in.
>>
>> public static void main(String[] args) {
>> try {
>> EPackage model = (EPackage)ModelUtils.load(new
>> File("/home/mmelia/workspace3/AATest/model/A.ecore"), new
>> ResourceSetImpl());
>> EPackage.Registry.INSTANCE.put("http://dcu.ie/#A", model);
>> Resource model1 = ModelUtils.load(new
>> File("/home/mmelia/workspace3/AATest/model/B.ecore"), new
>> ResourceSetImpl()).eResource(); Resource model2 =
>>
ModelUtils.load(URI.createFileURI("/home/mmelia/workspace3/AATest/model/C.ecore "),new
>> ResourceSetImpl()).eResource();
>>
>> final MatchModel match =
>> MatchService.doResourceMatch(model1, model2, null);
>> // Detects differences
>> final DiffModel diff = DiffService.doDiff(match);
>> // Merges all differences from model1 to model2
>> EList<DiffElement> el = new BasicEList
>> <DiffElement>(diff.getOwnedElements());
>> MergeService.merge(el, true);
>> Iterator itr = el.iterator();
>> while(itr.hasNext()){
>>
>> Object diffElement = itr.next();
>> DiffElement d =
>> (org.eclipse.emf.compare.diff.metamodel.DiffElement) diffElement;
>> System.out.println("here "+ d);
>> while(d.eContents().iterator().hasNext()){
>> EObject o = (EObject)d.eContents().iterator().next();
>> System.out.println(o);
>> }
>> }
>>
>> } catch (Exception exception) {
>> exception.printStackTrace();
>>
>>
>> laurent Goubet wrote:
>>
>>> Mark,
>>
>>> Here is the javadoc for MergeService#merge(List, boolean) which you
>>> are calling in your code :
>>
>>> /**
>>> * Merges a list of DiffElements in the direction specified by
>>> <code>leftToRight</code>.
>>> * <p>
>>> * Will notify the list of its merge listeners before, and after the
>>> operation.
>>> * </p>
>>> *
>>> * @param elements
>>> * {@link DiffElement}s containing the information to merge.
>>> * @param leftToRight
>>> * <code>True</code> if the changes must be applied from
>>> the left to the right model,
>>> * <code>False</code> when they have to be applied the
>>> other way around.
>>> * @throws ConcurrentModificationException
>>> * Could be thrown if the list you give is directly a
>>> reference from the meta model such as
>>> * {@link DiffModel#getOwnedElements()} or {@link
>>> DiffElement#getSubDiffElements()}. Copy the
>>> * list before merging it.
>>> */
>>
>>> So yes, a ConcurrentModificationException *can* be thrown as the model
>>> will be modified when using merge operations. Simply create a new List
>>> containing all the elements to be merged to avoid these exceptions.
>>
>>> Laurent Goubet
>>> Obeo
>>
>>> Mark Melia a écrit :
>>>> Hi Sam, Cedric,
>>>>
>>>> I was having the same problem, and got the latest from the EMFT site.
>>>> I now have a new error, a ConcurrentModificationException which is a
>>>> bit of a mystery as there is nothing concurrent in what I am doing?
>>>> The error is below, I am working with EMF Compare 0.8.0v20080506. Any
>>>> ideas?
>>>>
>>>> Mark
>>>>
>>>> java.util.ConcurrentModificationException
>>>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.checkModCou nt(BasicEList.java:1378)
>>
>>>>
>>>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.doNext(Basi cEList.java:1332)
>>
>>>>
>>>> at
>>>>
org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicE List.java:1312)
>>>>
>>>> at
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:132)
>>
>>>>
>>>> at test.Test.main(Test.java:39)
>>>>
>>>> Cédric Brun wrote:
>>>>
>>>>> Hi Sam,
>>>>
>>>>> The new build is available here :
>>>>
>>>>> http://www.eclipse.org/modeling/emft/downloads/?project=comp are
>>>>
>>>>> regards,
>>>>
>>>>> Cédric
>>>>
>>>>> Sam Sabra wrote:
>>>>
>>>>>> Laurent,
>>>>>>
>>>>>> Thank you for handling this quickly, excellent response time! Looking
>>>>>> forward to the next integration build.
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Sam
>>>>>>
>>>>>> laurent Goubet wrote:
>>>>>>> Sam,
>>>>>>>
>>>>>>> Thanks for the feedback, this was indeed a bug on our side. This has
>>>>>>> been fixed on CVS and will be included in the next integration build.
>>>>>>>
>>>>>>> Laurent Goubet
>>>>>>> Obeo
>>>>>>>
>>>>>>> Sam Sabra a écrit :
>>>>>>>> Laurent,
>>>>>>>>
>>>>>>>> Thanks for the reply.
>>>>>>>>
>>>>>>>> I've updated to the latest build and I got the same error with
>>>>>>>> different line numbers. Please see
>>>>>>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Sam
>>>>>>>>
>>>>>>>> laurent Goubet wrote:
>>>>>>>>> Sam,
>>>>>>>>>
>>>>>>>>> I wonder... Are you using EMF Compare's latest build or the code
>>>>>>>>> from
>>>>>>>>> CVS? We fixed some problems within the merging API and some of the
>>>>>>>>> lines from your stack no longer match with code lines so this issue
>>>>>>>>> could already be fixed.
>>>>>>>>>
>>>>>>>>> Could you update to the latest version of EMF Compare (we have a
>>>>>>>>> new
>>>>>>>>> build ready if you use the built version) and check if the problem
>>>>>>>>> still happens?
>>>>>>>>>
>>>>>>>>> If the exception is still thrown, could you provide us the
>>>>>>>>> models you
>>>>>>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>>>>>>> potential problem of the generic differencing engine and we'd
>>>>>>>>> need to
>>>>>>>>> confirm it.
>>>>>>>>>
>>>>>>>>> Laurent Goubet
>>>>>>>>> Obeo
>>>>>>>>>
>>>>>>>>> Sam Sabra a écrit :
>>>>>>>>>> Good day,
>>>>>>>>>>
>>>>>>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>>>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to
>>>>>>>>>> get
>>>>>>>>>> it to output the result.emfdiff difference file (while ignoring
>>>>>>>>>> XMI
>>>>>>>>>> IDs). When I try to merge, I get a
>>>>>>>>>> java.lang.NullPointerException at
>>>>>>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>>>>>>> below). Any ideas?
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>>
>>>>>>>>>> Sam
>>>>>>>>>>
>>>>>>>>>> Here's the error:
>>>>>>>>>>
>>>>>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Here's the essential code:
>>>>>>>>>>
>>>>>>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>>>>>>> File(args[1]).canRead()) {
>>>>>>>>>> // Creates the resourceSet where we'll load the models
>>>>>>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>>>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>>>>>>
>>>>>>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>>>>>>> umlPackage);
>>>>>>>>>>
>>>>>>>>>> try {
>>>>>>>>>> // Loads the two models passed as arguments
>>>>>>>>>> final EObject model1 = ModelUtils.load(new
>>>>>>>>>> File(args[0]), resourceSet);
>>>>>>>>>> final EObject model2 = ModelUtils.load(new
>>>>>>>>>> File(args[1]), resourceSet);
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Map<String,Object> options = new
>>>>>>>>>> HashMap<String,Object>();
>>>>>>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID,
>>>>>>>>>> true);
>>>>>>>>>>
>>>>>>>>>> // Creates the match then the diff model for those
>>>>>>>>>> two models
>>>>>>>>>> final MatchModel match =
>>>>>>>>>> MatchService.doMatch(model1, model2, options);
>>>>>>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>>>>>>> false);
>>>>>>>>>>
>>>>>>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>>>>>>> // line 77: java.lang.NullPointerException
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> // Prints the results
>>>>>>>>>> try {
>>>>>>>>>>
>>>>>>>>>> System.out.println(ModelUtils.serialize(match));
>>>>>>>>>>
>>>>>>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>>>>>>> } catch (IOException e) {
>>>>>>>>>> e.printStackTrace();
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> // Serializes the result as "result.emfdiff" in
>>>>>>>>>> the
>>>>>>>>>> directory this class has been called from.
>>>>>>>>>> System.out.println("saving emfdiff as
>>>>>>>>>> "result.emfdiff""); //$NON-NLS-1$
>>>>>>>>>> final ModelInputSnapshot snapshot =
>>>>>>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>>>>>>>
>>>>>>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>>>>>>> snapshot.setMatch(match);
>>>>>>>>>> snapshot.setDiff(diff);
>>>>>>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>>>>>>> //$NON-NLS-1$
>>>>>>>>>> } catch (IOException e) {
>>>>>>>>>> // shouldn't be thrown
>>>>>>>>>> e.printStackTrace();
>>>>>>>>>> } catch (InterruptedException e) {
>>>>>>>>>> e.printStackTrace();
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>
>>>>
>>
>>
Re: Merging UML models [message #122715 is a reply to message #122710] Tue, 20 May 2008 12:42 Go to previous message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------070007000108040507010903
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit

Mark,

Obviously, if you copy *all* changes from model1 to model2 ... you will
get a copy of model1 as output. You have to filter out the differences
you want merged. If you simply wish to copy additions, only merge
AddModelElements, for deletions, RemoveModelElements... you will have to
take a look at the list of DiffElement you're merging to obtain the
expected result.

Cheers

Laurent Gobet
Obeo

Mark Melia a
Re: Merging UML models [message #617860 is a reply to message #119142] Mon, 21 April 2008 08:15 Go to previous message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------020606000705040607050701
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Sam,

I wonder... Are you using EMF Compare's latest build or the code from
CVS? We fixed some problems within the merging API and some of the
lines from your stack no longer match with code lines so this issue
could already be fixed.

Could you update to the latest version of EMF Compare (we have a new
build ready if you use the built version) and check if the problem still
happens?

If the exception is still thrown, could you provide us the models you
compare (either through bugzilla (preferred) or mail)? This is a
potential problem of the generic differencing engine and we'd need to
confirm it.

Laurent Goubet
Obeo

Sam Sabra a
Re: Merging UML models [message #617866 is a reply to message #119338] Mon, 21 April 2008 19:28 Go to previous message
Sam Sabra is currently offline Sam SabraFriend
Messages: 10
Registered: July 2009
Junior Member
Laurent,

Thanks for the reply.

I've updated to the latest build and I got the same error with different
line numbers. Please see https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087

Regards,

Sam

laurent Goubet wrote:
> Sam,
>
> I wonder... Are you using EMF Compare's latest build or the code from
> CVS? We fixed some problems within the merging API and some of the
> lines from your stack no longer match with code lines so this issue
> could already be fixed.
>
> Could you update to the latest version of EMF Compare (we have a new
> build ready if you use the built version) and check if the problem still
> happens?
>
> If the exception is still thrown, could you provide us the models you
> compare (either through bugzilla (preferred) or mail)? This is a
> potential problem of the generic differencing engine and we'd need to
> confirm it.
>
> Laurent Goubet
> Obeo
>
> Sam Sabra a écrit :
>> Good day,
>>
>> I'm trying to modify the standalone example by Cedric Brun
>> (ExampleLauncher.java) to merge two UML models. I've managed to get it
>> to output the result.emfdiff difference file (while ignoring XMI IDs).
>> When I try to merge, I get a java.lang.NullPointerException at
>> MergeService.merge(diff.getOwnedElements(), true); (see details
>> below). Any ideas?
>>
>> Thanks,
>>
>> Sam
>>
>> Here's the error:
>>
>> Exception in thread "main" java.lang.NullPointerException
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>
>> at
>> org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>
>> at
>> org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>
>>
>> Here's the essential code:
>>
>> if (args.length == 2 && new File(args[0]).canRead() && new
>> File(args[1]).canRead()) {
>> // Creates the resourceSet where we'll load the models
>> final ResourceSet resourceSet = new ResourceSetImpl();
>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>
>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(), umlPackage);
>>
>> try {
>> // Loads the two models passed as arguments
>> final EObject model1 = ModelUtils.load(new
>> File(args[0]), resourceSet);
>> final EObject model2 = ModelUtils.load(new
>> File(args[1]), resourceSet);
>>
>>
>> Map<String,Object> options = new
>> HashMap<String,Object>();
>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>
>> // Creates the match then the diff model for those two
>> models
>> final MatchModel match = MatchService.doMatch(model1,
>> model2, options);
>> final DiffModel diff = DiffService.doDiff(match, false);
>>
>> MergeService.merge(diff.getOwnedElements(), true); //
>> line 77: java.lang.NullPointerException
>>
>>
>> // Prints the results
>> try {
>> System.out.println(ModelUtils.serialize(match));
>> System.out.println(ModelUtils.serialize(diff));
>> } catch (IOException e) {
>> e.printStackTrace();
>> }
>>
>> // Serializes the result as "result.emfdiff" in the
>> directory this class has been called from.
>> System.out.println("saving emfdiff as
>> \"result.emfdiff\""); //$NON-NLS-1$
>> final ModelInputSnapshot snapshot =
>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>> snapshot.setDate(Calendar.getInstance().getTime());
>> snapshot.setMatch(match);
>> snapshot.setDiff(diff);
>> ModelUtils.save(snapshot, "result.emfdiff");
>> //$NON-NLS-1$
>> } catch (IOException e) {
>> // shouldn't be thrown
>> e.printStackTrace();
>> } catch (InterruptedException e) {
>> e.printStackTrace();
>> }
>> }
>>
>>
>>
>>
>>
>
Re: Merging UML models [message #617871 is a reply to message #119414] Tue, 22 April 2008 11:51 Go to previous message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------080609070400090401000107
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Sam,

Thanks for the feedback, this was indeed a bug on our side. This has
been fixed on CVS and will be included in the next integration build.

Laurent Goubet
Obeo

Sam Sabra a
Re: Merging UML models [message #617883 is a reply to message #119478] Wed, 23 April 2008 02:47 Go to previous message
Sam Sabra is currently offline Sam SabraFriend
Messages: 10
Registered: July 2009
Junior Member
Laurent,

Thank you for handling this quickly, excellent response time! Looking
forward to the next integration build.

Best regards,

Sam

laurent Goubet wrote:
> Sam,
>
> Thanks for the feedback, this was indeed a bug on our side. This has
> been fixed on CVS and will be included in the next integration build.
>
> Laurent Goubet
> Obeo
>
> Sam Sabra a écrit :
>> Laurent,
>>
>> Thanks for the reply.
>>
>> I've updated to the latest build and I got the same error with
>> different line numbers. Please see
>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>
>> Regards,
>>
>> Sam
>>
>> laurent Goubet wrote:
>>> Sam,
>>>
>>> I wonder... Are you using EMF Compare's latest build or the code from
>>> CVS? We fixed some problems within the merging API and some of the
>>> lines from your stack no longer match with code lines so this issue
>>> could already be fixed.
>>>
>>> Could you update to the latest version of EMF Compare (we have a new
>>> build ready if you use the built version) and check if the problem
>>> still happens?
>>>
>>> If the exception is still thrown, could you provide us the models you
>>> compare (either through bugzilla (preferred) or mail)? This is a
>>> potential problem of the generic differencing engine and we'd need to
>>> confirm it.
>>>
>>> Laurent Goubet
>>> Obeo
>>>
>>> Sam Sabra a écrit :
>>>> Good day,
>>>>
>>>> I'm trying to modify the standalone example by Cedric Brun
>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>> below). Any ideas?
>>>>
>>>> Thanks,
>>>>
>>>> Sam
>>>>
>>>> Here's the error:
>>>>
>>>> Exception in thread "main" java.lang.NullPointerException
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>>>
>>>> at
>>>> org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>>>
>>>>
>>>> Here's the essential code:
>>>>
>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>> File(args[1]).canRead()) {
>>>> // Creates the resourceSet where we'll load the models
>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>
>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>> umlPackage);
>>>>
>>>> try {
>>>> // Loads the two models passed as arguments
>>>> final EObject model1 = ModelUtils.load(new
>>>> File(args[0]), resourceSet);
>>>> final EObject model2 = ModelUtils.load(new
>>>> File(args[1]), resourceSet);
>>>>
>>>>
>>>> Map<String,Object> options = new
>>>> HashMap<String,Object>();
>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>>>
>>>> // Creates the match then the diff model for those
>>>> two models
>>>> final MatchModel match =
>>>> MatchService.doMatch(model1, model2, options);
>>>> final DiffModel diff = DiffService.doDiff(match,
>>>> false);
>>>>
>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>> // line 77: java.lang.NullPointerException
>>>>
>>>>
>>>> // Prints the results
>>>> try {
>>>> System.out.println(ModelUtils.serialize(match));
>>>> System.out.println(ModelUtils.serialize(diff));
>>>> } catch (IOException e) {
>>>> e.printStackTrace();
>>>> }
>>>>
>>>> // Serializes the result as "result.emfdiff" in the
>>>> directory this class has been called from.
>>>> System.out.println("saving emfdiff as
>>>> \"result.emfdiff\""); //$NON-NLS-1$
>>>> final ModelInputSnapshot snapshot =
>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>> snapshot.setMatch(match);
>>>> snapshot.setDiff(diff);
>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>> //$NON-NLS-1$
>>>> } catch (IOException e) {
>>>> // shouldn't be thrown
>>>> e.printStackTrace();
>>>> } catch (InterruptedException e) {
>>>> e.printStackTrace();
>>>> }
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>
Re: Merging UML models [message #617899 is a reply to message #119638] Thu, 24 April 2008 09:38 Go to previous message
Cedric Brun is currently offline Cedric BrunFriend
Messages: 431
Registered: July 2009
Senior Member
Hi Sam,

The new build is available here :

http://www.eclipse.org/modeling/emft/downloads/?project=comp are

regards,

Cédric

Sam Sabra wrote:

> Laurent,
>
> Thank you for handling this quickly, excellent response time! Looking
> forward to the next integration build.
>
> Best regards,
>
> Sam
>
> laurent Goubet wrote:
>> Sam,
>>
>> Thanks for the feedback, this was indeed a bug on our side. This has
>> been fixed on CVS and will be included in the next integration build.
>>
>> Laurent Goubet
>> Obeo
>>
>> Sam Sabra a écrit :
>>> Laurent,
>>>
>>> Thanks for the reply.
>>>
>>> I've updated to the latest build and I got the same error with
>>> different line numbers. Please see
>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>
>>> Regards,
>>>
>>> Sam
>>>
>>> laurent Goubet wrote:
>>>> Sam,
>>>>
>>>> I wonder... Are you using EMF Compare's latest build or the code from
>>>> CVS? We fixed some problems within the merging API and some of the
>>>> lines from your stack no longer match with code lines so this issue
>>>> could already be fixed.
>>>>
>>>> Could you update to the latest version of EMF Compare (we have a new
>>>> build ready if you use the built version) and check if the problem
>>>> still happens?
>>>>
>>>> If the exception is still thrown, could you provide us the models you
>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>> potential problem of the generic differencing engine and we'd need to
>>>> confirm it.
>>>>
>>>> Laurent Goubet
>>>> Obeo
>>>>
>>>> Sam Sabra a écrit :
>>>>> Good day,
>>>>>
>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>> below). Any ideas?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Sam
>>>>>
>>>>> Here's the error:
>>>>>
>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>>>>
>>>>> at
>>>>>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>>>>
>>>>>
>>>>> Here's the essential code:
>>>>>
>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>> File(args[1]).canRead()) {
>>>>> // Creates the resourceSet where we'll load the models
>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>
>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>> umlPackage);
>>>>>
>>>>> try {
>>>>> // Loads the two models passed as arguments
>>>>> final EObject model1 = ModelUtils.load(new
>>>>> File(args[0]), resourceSet);
>>>>> final EObject model2 = ModelUtils.load(new
>>>>> File(args[1]), resourceSet);
>>>>>
>>>>>
>>>>> Map<String,Object> options = new
>>>>> HashMap<String,Object>();
>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>>>>
>>>>> // Creates the match then the diff model for those
>>>>> two models
>>>>> final MatchModel match =
>>>>> MatchService.doMatch(model1, model2, options);
>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>> false);
>>>>>
>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>> // line 77: java.lang.NullPointerException
>>>>>
>>>>>
>>>>> // Prints the results
>>>>> try {
>>>>> System.out.println(ModelUtils.serialize(match));
>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>> } catch (IOException e) {
>>>>> e.printStackTrace();
>>>>> }
>>>>>
>>>>> // Serializes the result as "result.emfdiff" in the
>>>>> directory this class has been called from.
>>>>> System.out.println("saving emfdiff as
>>>>> \"result.emfdiff\""); //$NON-NLS-1$
>>>>> final ModelInputSnapshot snapshot =
>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>> snapshot.setMatch(match);
>>>>> snapshot.setDiff(diff);
>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>> //$NON-NLS-1$
>>>>> } catch (IOException e) {
>>>>> // shouldn't be thrown
>>>>> e.printStackTrace();
>>>>> } catch (InterruptedException e) {
>>>>> e.printStackTrace();
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>


http://cedric.brun.io news and articles on eclipse and eclipse modeling.
Re: Merging UML models [message #618070 is a reply to message #119844] Mon, 19 May 2008 16:38 Go to previous message
Mark Melia is currently offline Mark MeliaFriend
Messages: 142
Registered: July 2009
Senior Member
Hi Sam, Cedric,

I was having the same problem, and got the latest from the EMFT site. I
now have a new error, a ConcurrentModificationException which is a bit of
a mystery as there is nothing concurrent in what I am doing? The error is
below, I am working with EMF Compare 0.8.0v20080506. Any ideas?

Mark

java.util.ConcurrentModificationException
at
org.eclipse.emf.common.util.BasicEList$EIterator.checkModCou nt(BasicEList.java:1378)
at
org.eclipse.emf.common.util.BasicEList$EIterator.doNext(Basi cEList.java:1332)
at
org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicE List.java:1312)
at
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:132)
at test.Test.main(Test.java:39)

Cédric Brun wrote:

> Hi Sam,

> The new build is available here :

> http://www.eclipse.org/modeling/emft/downloads/?project=comp are

> regards,

> Cédric

> Sam Sabra wrote:

>> Laurent,
>>
>> Thank you for handling this quickly, excellent response time! Looking
>> forward to the next integration build.
>>
>> Best regards,
>>
>> Sam
>>
>> laurent Goubet wrote:
>>> Sam,
>>>
>>> Thanks for the feedback, this was indeed a bug on our side. This has
>>> been fixed on CVS and will be included in the next integration build.
>>>
>>> Laurent Goubet
>>> Obeo
>>>
>>> Sam Sabra a écrit :
>>>> Laurent,
>>>>
>>>> Thanks for the reply.
>>>>
>>>> I've updated to the latest build and I got the same error with
>>>> different line numbers. Please see
>>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>>
>>>> Regards,
>>>>
>>>> Sam
>>>>
>>>> laurent Goubet wrote:
>>>>> Sam,
>>>>>
>>>>> I wonder... Are you using EMF Compare's latest build or the code from
>>>>> CVS? We fixed some problems within the merging API and some of the
>>>>> lines from your stack no longer match with code lines so this issue
>>>>> could already be fixed.
>>>>>
>>>>> Could you update to the latest version of EMF Compare (we have a new
>>>>> build ready if you use the built version) and check if the problem
>>>>> still happens?
>>>>>
>>>>> If the exception is still thrown, could you provide us the models you
>>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>>> potential problem of the generic differencing engine and we'd need to
>>>>> confirm it.
>>>>>
>>>>> Laurent Goubet
>>>>> Obeo
>>>>>
>>>>> Sam Sabra a écrit :
>>>>>> Good day,
>>>>>>
>>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>>> below). Any ideas?
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Sam
>>>>>>
>>>>>> Here's the error:
>>>>>>
>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>>>>>
>>>>>> at
>>>>>>
>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>>>>>
>>>>>>
>>>>>> Here's the essential code:
>>>>>>
>>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>>> File(args[1]).canRead()) {
>>>>>> // Creates the resourceSet where we'll load the models
>>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>>
>>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>>> umlPackage);
>>>>>>
>>>>>> try {
>>>>>> // Loads the two models passed as arguments
>>>>>> final EObject model1 = ModelUtils.load(new
>>>>>> File(args[0]), resourceSet);
>>>>>> final EObject model2 = ModelUtils.load(new
>>>>>> File(args[1]), resourceSet);
>>>>>>
>>>>>>
>>>>>> Map<String,Object> options = new
>>>>>> HashMap<String,Object>();
>>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID, true);
>>>>>>
>>>>>> // Creates the match then the diff model for those
>>>>>> two models
>>>>>> final MatchModel match =
>>>>>> MatchService.doMatch(model1, model2, options);
>>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>>> false);
>>>>>>
>>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>>> // line 77: java.lang.NullPointerException
>>>>>>
>>>>>>
>>>>>> // Prints the results
>>>>>> try {
>>>>>> System.out.println(ModelUtils.serialize(match));
>>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>>> } catch (IOException e) {
>>>>>> e.printStackTrace();
>>>>>> }
>>>>>>
>>>>>> // Serializes the result as "result.emfdiff" in the
>>>>>> directory this class has been called from.
>>>>>> System.out.println("saving emfdiff as
>>>>>> "result.emfdiff""); //$NON-NLS-1$
>>>>>> final ModelInputSnapshot snapshot =
>>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>>> snapshot.setMatch(match);
>>>>>> snapshot.setDiff(diff);
>>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>>> //$NON-NLS-1$
>>>>>> } catch (IOException e) {
>>>>>> // shouldn't be thrown
>>>>>> e.printStackTrace();
>>>>>> } catch (InterruptedException e) {
>>>>>> e.printStackTrace();
>>>>>> }
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
Re: Merging UML models [message #618072 is a reply to message #122682] Tue, 20 May 2008 07:08 Go to previous message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------060403030008040902080707
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit

Mark,

Here is the javadoc for MergeService#merge(List, boolean) which you are
calling in your code :

/**
* Merges a list of DiffElements in the direction specified by
<code>leftToRight</code>.
* <p>
* Will notify the list of its merge listeners before, and after the
operation.
* </p>
*
* @param elements
* {@link DiffElement}s containing the information to merge.
* @param leftToRight
* <code>True</code> if the changes must be applied from the
left to the right model,
* <code>False</code> when they have to be applied the other
way around.
* @throws ConcurrentModificationException
* Could be thrown if the list you give is directly a
reference from the meta model such as
* {@link DiffModel#getOwnedElements()} or {@link
DiffElement#getSubDiffElements()}. Copy the
* list before merging it.
*/

So yes, a ConcurrentModificationException *can* be thrown as the model
will be modified when using merge operations. Simply create a new List
containing all the elements to be merged to avoid these exceptions.

Laurent Goubet
Obeo

Mark Melia a
Re: Merging UML models [message #618073 is a reply to message #122692] Tue, 20 May 2008 11:09 Go to previous message
Mark Melia is currently offline Mark MeliaFriend
Messages: 142
Registered: July 2009
Senior Member
Hi Laurent,

Ok - I think I am nearly there - and thanks again for all your help. I
have the code running ok (well appears to be), but the models do not
change - there is no merge of one model into another (am I missing
something)?

I have pasted the code below and I think it should work as when i iterate
the diffElements I get:
org.eclipse.emf.compare.diff.metamodel.impl.DiffGroupImpl@12b3d53
(conflicting: false, kind: Addition)

Any ideas - thanks :)?

Mark

ps If you want to see the models I can paste the XMI in.

public static void main(String[] args) {
try {
EPackage model = (EPackage)ModelUtils.load(new
File("/home/mmelia/workspace3/AATest/model/A.ecore"), new
ResourceSetImpl());
EPackage.Registry.INSTANCE.put("http://dcu.ie/#A", model);

Resource model1 = ModelUtils.load(new
File("/home/mmelia/workspace3/AATest/model/B.ecore"), new
ResourceSetImpl()).eResource();
Resource model2 =
ModelUtils.load(URI.createFileURI("/home/mmelia/workspace3/AATest/model/C.ecore "),new
ResourceSetImpl()).eResource();

final MatchModel match = MatchService.doResourceMatch(model1, model2,
null);
// Detects differences
final DiffModel diff = DiffService.doDiff(match);
// Merges all differences from model1 to model2
EList<DiffElement> el = new BasicEList
<DiffElement>(diff.getOwnedElements());
MergeService.merge(el, true);
Iterator itr = el.iterator();
while(itr.hasNext()){

Object diffElement = itr.next();
DiffElement d = (org.eclipse.emf.compare.diff.metamodel.DiffElement)
diffElement;
System.out.println("here "+ d);
while(d.eContents().iterator().hasNext()){
EObject o = (EObject)d.eContents().iterator().next();
System.out.println(o);
}
}

} catch (Exception exception) {
exception.printStackTrace();


laurent Goubet wrote:

> Mark,

> Here is the javadoc for MergeService#merge(List, boolean) which you are
> calling in your code :

> /**
> * Merges a list of DiffElements in the direction specified by
> <code>leftToRight</code>.
> * <p>
> * Will notify the list of its merge listeners before, and after the
> operation.
> * </p>
> *
> * @param elements
> * {@link DiffElement}s containing the information to merge.
> * @param leftToRight
> * <code>True</code> if the changes must be applied from the
> left to the right model,
> * <code>False</code> when they have to be applied the other
> way around.
> * @throws ConcurrentModificationException
> * Could be thrown if the list you give is directly a
> reference from the meta model such as
> * {@link DiffModel#getOwnedElements()} or {@link
> DiffElement#getSubDiffElements()}. Copy the
> * list before merging it.
> */

> So yes, a ConcurrentModificationException *can* be thrown as the model
> will be modified when using merge operations. Simply create a new List
> containing all the elements to be merged to avoid these exceptions.

> Laurent Goubet
> Obeo

> Mark Melia a écrit :
>> Hi Sam, Cedric,
>>
>> I was having the same problem, and got the latest from the EMFT site. I
>> now have a new error, a ConcurrentModificationException which is a bit
>> of a mystery as there is nothing concurrent in what I am doing? The
>> error is below, I am working with EMF Compare 0.8.0v20080506. Any ideas?
>>
>> Mark
>>
>> java.util.ConcurrentModificationException
>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.checkModCou nt(BasicEList.java:1378)
>>
>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.doNext(Basi cEList.java:1332)
>>
>> at
>> org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicE List.java:1312)
>> at
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:132)
>>
>> at test.Test.main(Test.java:39)
>>
>> Cédric Brun wrote:
>>
>>> Hi Sam,
>>
>>> The new build is available here :
>>
>>> http://www.eclipse.org/modeling/emft/downloads/?project=comp are
>>
>>> regards,
>>
>>> Cédric
>>
>>> Sam Sabra wrote:
>>
>>>> Laurent,
>>>>
>>>> Thank you for handling this quickly, excellent response time! Looking
>>>> forward to the next integration build.
>>>>
>>>> Best regards,
>>>>
>>>> Sam
>>>>
>>>> laurent Goubet wrote:
>>>>> Sam,
>>>>>
>>>>> Thanks for the feedback, this was indeed a bug on our side. This has
>>>>> been fixed on CVS and will be included in the next integration build.
>>>>>
>>>>> Laurent Goubet
>>>>> Obeo
>>>>>
>>>>> Sam Sabra a écrit :
>>>>>> Laurent,
>>>>>>
>>>>>> Thanks for the reply.
>>>>>>
>>>>>> I've updated to the latest build and I got the same error with
>>>>>> different line numbers. Please see
>>>>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Sam
>>>>>>
>>>>>> laurent Goubet wrote:
>>>>>>> Sam,
>>>>>>>
>>>>>>> I wonder... Are you using EMF Compare's latest build or the code from
>>>>>>> CVS? We fixed some problems within the merging API and some of the
>>>>>>> lines from your stack no longer match with code lines so this issue
>>>>>>> could already be fixed.
>>>>>>>
>>>>>>> Could you update to the latest version of EMF Compare (we have a new
>>>>>>> build ready if you use the built version) and check if the problem
>>>>>>> still happens?
>>>>>>>
>>>>>>> If the exception is still thrown, could you provide us the models you
>>>>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>>>>> potential problem of the generic differencing engine and we'd need to
>>>>>>> confirm it.
>>>>>>>
>>>>>>> Laurent Goubet
>>>>>>> Obeo
>>>>>>>
>>>>>>> Sam Sabra a écrit :
>>>>>>>> Good day,
>>>>>>>>
>>>>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to get
>>>>>>>> it to output the result.emfdiff difference file (while ignoring XMI
>>>>>>>> IDs). When I try to merge, I get a java.lang.NullPointerException at
>>>>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>>>>> below). Any ideas?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Sam
>>>>>>>>
>>>>>>>> Here's the error:
>>>>>>>>
>>>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>
>>>>>>>>
>>>>>>>> at
>>>>>>>>
>>>
>>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Here's the essential code:
>>>>>>>>
>>>>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>>>>> File(args[1]).canRead()) {
>>>>>>>> // Creates the resourceSet where we'll load the models
>>>>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>>>>
>>>>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>>>>> umlPackage);
>>>>>>>>
>>>>>>>> try {
>>>>>>>> // Loads the two models passed as arguments
>>>>>>>> final EObject model1 = ModelUtils.load(new
>>>>>>>> File(args[0]), resourceSet);
>>>>>>>> final EObject model2 = ModelUtils.load(new
>>>>>>>> File(args[1]), resourceSet);
>>>>>>>>
>>>>>>>>
>>>>>>>> Map<String,Object> options = new
>>>>>>>> HashMap<String,Object>();
>>>>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID,
>>>>>>>> true);
>>>>>>>>
>>>>>>>> // Creates the match then the diff model for those
>>>>>>>> two models
>>>>>>>> final MatchModel match =
>>>>>>>> MatchService.doMatch(model1, model2, options);
>>>>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>>>>> false);
>>>>>>>>
>>>>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>>>>> // line 77: java.lang.NullPointerException
>>>>>>>>
>>>>>>>>
>>>>>>>> // Prints the results
>>>>>>>> try {
>>>>>>>> System.out.println(ModelUtils.serialize(match));
>>>>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>>>>> } catch (IOException e) {
>>>>>>>> e.printStackTrace();
>>>>>>>> }
>>>>>>>>
>>>>>>>> // Serializes the result as "result.emfdiff" in the
>>>>>>>> directory this class has been called from.
>>>>>>>> System.out.println("saving emfdiff as
>>>>>>>> "result.emfdiff""); //$NON-NLS-1$
>>>>>>>> final ModelInputSnapshot snapshot =
>>>>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>>>>> snapshot.setMatch(match);
>>>>>>>> snapshot.setDiff(diff);
>>>>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>>>>> //$NON-NLS-1$
>>>>>>>> } catch (IOException e) {
>>>>>>>> // shouldn't be thrown
>>>>>>>> e.printStackTrace();
>>>>>>>> } catch (InterruptedException e) {
>>>>>>>> e.printStackTrace();
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>
>>
Re: Merging UML models [message #618074 is a reply to message #122697] Tue, 20 May 2008 11:24 Go to previous message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------010308070404050207040107
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit

Mark,

You will need to save the merged model. Simply put the following line
before the end of your try/catch :

model2.save(Collections.emptyMap());

Laurent Goubet
Obeo

Mark Melia a
Re: Merging UML models [message #618075 is a reply to message #122704] Tue, 20 May 2008 12:31 Go to previous message
Mark Melia is currently offline Mark MeliaFriend
Messages: 142
Registered: July 2009
Senior Member
Hi Laurent,

Thanks for that, it now saves a new model, but the model seems to just be
model1 copied to model2. I am wondering if I am using the right classes,
as I see there are two MergeService classes for EMF compare. I have copied
my import statements - are all these the correct classes to be using?

Apologies for not getting this - and thanks for your patience.

Mark

import org.eclipse.emf.compare.diff.merge.service.MergeService;
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
import org.eclipse.emf.compare.diff.metamodel.DiffModel;
import org.eclipse.emf.compare.diff.service.DiffService;
import org.eclipse.emf.compare.match.metamodel.MatchModel;
import org.eclipse.emf.compare.match.service.MatchService;
import org.eclipse.emf.compare.util.ModelUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI

laurent Goubet wrote:

> Mark,

> You will need to save the merged model. Simply put the following line
> before the end of your try/catch :

> model2.save(Collections.emptyMap());

> Laurent Goubet
> Obeo

> Mark Melia a écrit :
>> Hi Laurent,
>>
>> Ok - I think I am nearly there - and thanks again for all your help. I
>> have the code running ok (well appears to be), but the models do not
>> change - there is no merge of one model into another (am I missing
>> something)?
>>
>> I have pasted the code below and I think it should work as when i
>> iterate the diffElements I get:
>> org.eclipse.emf.compare.diff.metamodel.impl.DiffGroupImpl@12b3d53
>> (conflicting: false, kind: Addition)
>>
>> Any ideas - thanks :)?
>>
>> Mark
>>
>> ps If you want to see the models I can paste the XMI in.
>>
>> public static void main(String[] args) {
>> try {
>> EPackage model = (EPackage)ModelUtils.load(new
>> File("/home/mmelia/workspace3/AATest/model/A.ecore"), new
>> ResourceSetImpl());
>> EPackage.Registry.INSTANCE.put("http://dcu.ie/#A", model);
>> Resource model1 = ModelUtils.load(new
>> File("/home/mmelia/workspace3/AATest/model/B.ecore"), new
>> ResourceSetImpl()).eResource(); Resource model2 =
>>
ModelUtils.load(URI.createFileURI("/home/mmelia/workspace3/AATest/model/C.ecore "),new
>> ResourceSetImpl()).eResource();
>>
>> final MatchModel match =
>> MatchService.doResourceMatch(model1, model2, null);
>> // Detects differences
>> final DiffModel diff = DiffService.doDiff(match);
>> // Merges all differences from model1 to model2
>> EList<DiffElement> el = new BasicEList
>> <DiffElement>(diff.getOwnedElements());
>> MergeService.merge(el, true);
>> Iterator itr = el.iterator();
>> while(itr.hasNext()){
>>
>> Object diffElement = itr.next();
>> DiffElement d =
>> (org.eclipse.emf.compare.diff.metamodel.DiffElement) diffElement;
>> System.out.println("here "+ d);
>> while(d.eContents().iterator().hasNext()){
>> EObject o = (EObject)d.eContents().iterator().next();
>> System.out.println(o);
>> }
>> }
>>
>> } catch (Exception exception) {
>> exception.printStackTrace();
>>
>>
>> laurent Goubet wrote:
>>
>>> Mark,
>>
>>> Here is the javadoc for MergeService#merge(List, boolean) which you
>>> are calling in your code :
>>
>>> /**
>>> * Merges a list of DiffElements in the direction specified by
>>> <code>leftToRight</code>.
>>> * <p>
>>> * Will notify the list of its merge listeners before, and after the
>>> operation.
>>> * </p>
>>> *
>>> * @param elements
>>> * {@link DiffElement}s containing the information to merge.
>>> * @param leftToRight
>>> * <code>True</code> if the changes must be applied from
>>> the left to the right model,
>>> * <code>False</code> when they have to be applied the
>>> other way around.
>>> * @throws ConcurrentModificationException
>>> * Could be thrown if the list you give is directly a
>>> reference from the meta model such as
>>> * {@link DiffModel#getOwnedElements()} or {@link
>>> DiffElement#getSubDiffElements()}. Copy the
>>> * list before merging it.
>>> */
>>
>>> So yes, a ConcurrentModificationException *can* be thrown as the model
>>> will be modified when using merge operations. Simply create a new List
>>> containing all the elements to be merged to avoid these exceptions.
>>
>>> Laurent Goubet
>>> Obeo
>>
>>> Mark Melia a écrit :
>>>> Hi Sam, Cedric,
>>>>
>>>> I was having the same problem, and got the latest from the EMFT site.
>>>> I now have a new error, a ConcurrentModificationException which is a
>>>> bit of a mystery as there is nothing concurrent in what I am doing?
>>>> The error is below, I am working with EMF Compare 0.8.0v20080506. Any
>>>> ideas?
>>>>
>>>> Mark
>>>>
>>>> java.util.ConcurrentModificationException
>>>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.checkModCou nt(BasicEList.java:1378)
>>
>>>>
>>>> at
>>
org.eclipse.emf.common.util.BasicEList$EIterator.doNext(Basi cEList.java:1332)
>>
>>>>
>>>> at
>>>>
org.eclipse.emf.common.util.BasicEList$EIterator.next(BasicE List.java:1312)
>>>>
>>>> at
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:132)
>>
>>>>
>>>> at test.Test.main(Test.java:39)
>>>>
>>>> Cédric Brun wrote:
>>>>
>>>>> Hi Sam,
>>>>
>>>>> The new build is available here :
>>>>
>>>>> http://www.eclipse.org/modeling/emft/downloads/?project=comp are
>>>>
>>>>> regards,
>>>>
>>>>> Cédric
>>>>
>>>>> Sam Sabra wrote:
>>>>
>>>>>> Laurent,
>>>>>>
>>>>>> Thank you for handling this quickly, excellent response time! Looking
>>>>>> forward to the next integration build.
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Sam
>>>>>>
>>>>>> laurent Goubet wrote:
>>>>>>> Sam,
>>>>>>>
>>>>>>> Thanks for the feedback, this was indeed a bug on our side. This has
>>>>>>> been fixed on CVS and will be included in the next integration build.
>>>>>>>
>>>>>>> Laurent Goubet
>>>>>>> Obeo
>>>>>>>
>>>>>>> Sam Sabra a écrit :
>>>>>>>> Laurent,
>>>>>>>>
>>>>>>>> Thanks for the reply.
>>>>>>>>
>>>>>>>> I've updated to the latest build and I got the same error with
>>>>>>>> different line numbers. Please see
>>>>>>>> https://bugs.eclipse.org/bugs/show_bug.cgi?id=228087
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Sam
>>>>>>>>
>>>>>>>> laurent Goubet wrote:
>>>>>>>>> Sam,
>>>>>>>>>
>>>>>>>>> I wonder... Are you using EMF Compare's latest build or the code
>>>>>>>>> from
>>>>>>>>> CVS? We fixed some problems within the merging API and some of the
>>>>>>>>> lines from your stack no longer match with code lines so this issue
>>>>>>>>> could already be fixed.
>>>>>>>>>
>>>>>>>>> Could you update to the latest version of EMF Compare (we have a
>>>>>>>>> new
>>>>>>>>> build ready if you use the built version) and check if the problem
>>>>>>>>> still happens?
>>>>>>>>>
>>>>>>>>> If the exception is still thrown, could you provide us the
>>>>>>>>> models you
>>>>>>>>> compare (either through bugzilla (preferred) or mail)? This is a
>>>>>>>>> potential problem of the generic differencing engine and we'd
>>>>>>>>> need to
>>>>>>>>> confirm it.
>>>>>>>>>
>>>>>>>>> Laurent Goubet
>>>>>>>>> Obeo
>>>>>>>>>
>>>>>>>>> Sam Sabra a écrit :
>>>>>>>>>> Good day,
>>>>>>>>>>
>>>>>>>>>> I'm trying to modify the standalone example by Cedric Brun
>>>>>>>>>> (ExampleLauncher.java) to merge two UML models. I've managed to
>>>>>>>>>> get
>>>>>>>>>> it to output the result.emfdiff difference file (while ignoring
>>>>>>>>>> XMI
>>>>>>>>>> IDs). When I try to merge, I get a
>>>>>>>>>> java.lang.NullPointerException at
>>>>>>>>>> MergeService.merge(diff.getOwnedElements(), true); (see details
>>>>>>>>>> below). Any ideas?
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>>
>>>>>>>>>> Sam
>>>>>>>>>>
>>>>>>>>>> Here's the error:
>>>>>>>>>>
>>>>>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.getB estMerger(MergeFactory.java:109)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeFactory.crea teMerger(MergeFactory.java:79)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.doMe rge(MergeService.java:143)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.diff.merge.service.MergeService.merg e(MergeService.java:109)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>> at
>>>>>>>>>>
>>>>>
>>>>
>>
org.eclipse.emf.compare.examples.standalone.ExampleLauncher. main(ExampleLauncher.java:77)
>>
>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Here's the essential code:
>>>>>>>>>>
>>>>>>>>>> if (args.length == 2 && new File(args[0]).canRead() && new
>>>>>>>>>> File(args[1]).canRead()) {
>>>>>>>>>> // Creates the resourceSet where we'll load the models
>>>>>>>>>> final ResourceSet resourceSet = new ResourceSetImpl();
>>>>>>>>>> UMLPackage umlPackage = UMLPackage.eINSTANCE;
>>>>>>>>>>
>>>>>>>>>> resourceSet.getPackageRegistry().put(umlPackage.getNsURI(),
>>>>>>>>>> umlPackage);
>>>>>>>>>>
>>>>>>>>>> try {
>>>>>>>>>> // Loads the two models passed as arguments
>>>>>>>>>> final EObject model1 = ModelUtils.load(new
>>>>>>>>>> File(args[0]), resourceSet);
>>>>>>>>>> final EObject model2 = ModelUtils.load(new
>>>>>>>>>> File(args[1]), resourceSet);
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Map<String,Object> options = new
>>>>>>>>>> HashMap<String,Object>();
>>>>>>>>>> options.put(MatchOptions.OPTION_IGNORE_XMI_ID,
>>>>>>>>>> true);
>>>>>>>>>>
>>>>>>>>>> // Creates the match then the diff model for those
>>>>>>>>>> two models
>>>>>>>>>> final MatchModel match =
>>>>>>>>>> MatchService.doMatch(model1, model2, options);
>>>>>>>>>> final DiffModel diff = DiffService.doDiff(match,
>>>>>>>>>> false);
>>>>>>>>>>
>>>>>>>>>> MergeService.merge(diff.getOwnedElements(), true);
>>>>>>>>>> // line 77: java.lang.NullPointerException
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> // Prints the results
>>>>>>>>>> try {
>>>>>>>>>>
>>>>>>>>>> System.out.println(ModelUtils.serialize(match));
>>>>>>>>>>
>>>>>>>>>> System.out.println(ModelUtils.serialize(diff));
>>>>>>>>>> } catch (IOException e) {
>>>>>>>>>> e.printStackTrace();
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> // Serializes the result as "result.emfdiff" in
>>>>>>>>>> the
>>>>>>>>>> directory this class has been called from.
>>>>>>>>>> System.out.println("saving emfdiff as
>>>>>>>>>> "result.emfdiff""); //$NON-NLS-1$
>>>>>>>>>> final ModelInputSnapshot snapshot =
>>>>>>>>>> DiffFactory.eINSTANCE.createModelInputSnapshot();
>>>>>>>>>>
>>>>>>>>>> snapshot.setDate(Calendar.getInstance().getTime());
>>>>>>>>>> snapshot.setMatch(match);
>>>>>>>>>> snapshot.setDiff(diff);
>>>>>>>>>> ModelUtils.save(snapshot, "result.emfdiff");
>>>>>>>>>> //$NON-NLS-1$
>>>>>>>>>> } catch (IOException e) {
>>>>>>>>>> // shouldn't be thrown
>>>>>>>>>> e.printStackTrace();
>>>>>>>>>> } catch (InterruptedException e) {
>>>>>>>>>> e.printStackTrace();
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>
>>>>
>>
>>
Re: Merging UML models [message #618076 is a reply to message #122710] Tue, 20 May 2008 12:42 Go to previous message
Laurent Goubet is currently offline Laurent GoubetFriend
Messages: 1902
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------070007000108040507010903
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit

Mark,

Obviously, if you copy *all* changes from model1 to model2 ... you will
get a copy of model1 as output. You have to filter out the differences
you want merged. If you simply wish to copy additions, only merge
AddModelElements, for deletions, RemoveModelElements... you will have to
take a look at the list of DiffElement you're merging to obtain the
expected result.

Cheers

Laurent Gobet
Obeo

Mark Melia a
Previous Topic:RE: EMF Compare of two Domain Specific Models
Next Topic:ClassCastException to EList
Goto Forum:
  


Current Time: Sun Nov 24 00:13:49 GMT 2024

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

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

Back to the top