[EMF Transaction] How to correctly handle changes on the file level in EMF? [message #1756269] |
Tue, 14 March 2017 18:19 |
Jens Rabe Messages: 81 Registered: September 2013 |
Member |
|
|
Suppose I have a simple model like this (Xcore syntax):
class A {
// several attributes
refers B[] bs
}
class B {
// several attributes
}
Suppose I have 100 objects of type B and one object of type A. All objects are persisted via default XMI, nothing fancy.
What I now want, is:
- When I move the A to another folder (only inside the same project), all references to the Bs should update
- When I move a B to another folder inside the same project, the reference in the A should update
- Any "dirty" changes (only reflecting the attributes I omitted here for simplicity) the dirty state should stay, but the references in the corresponding A should update
My editors are custom, no generated EMF Edit or Xtext stuff, but they do use a global editing domain as pointed out in this tutorial.
My naive thought is the following:
- Use a listener on the editing domain that tracks when a resource is loaded / unloaded
- Use another listener that fires when a file in the workspace changes (is moved, removed etc.)
- Have that listener figure out the dependent, affected objects
- update the URIs to the new values
Is this the way to go? If yes, I have two issues about that:
1. When affected objects are not currently loaded in the editing domain, loading them when the referenced object was moved will cause errors resolving it - how to adjust the URI? Can I also have a listener fired before a resource changes in the workspace?
2. If any of the changed or affected objects is currently open in an editor and the editor is dirty, how do I handle saving the "old" state before edits and keeping the edits?
If I am completely wrong, please tell me about some more tutorials like the one I found (and posted here) I can use to figure it out.
|
|
|
Re: [EMF Transaction] How to correctly handle changes on the file level in EMF? [message #1756302 is a reply to message #1756269] |
Wed, 15 March 2017 08:54 |
Ed Merks Messages: 33217 Registered: July 2009 |
Senior Member |
|
|
This is definitely a complex and tricky problem. There is the possibility to register so call refactoring participants, but I don't know much about that; I'd have to Google. I don't think there are tutorials to cover this subject. And of course the underlying file system could be changed while the IDE is not running, and then the problem is even harder.
I'm not sure why you'd need a listener to know when resources are loaded and unloaded. The generated editor listens to the workspace for resource deltas and unloads and reloads resources based on processing those deltas. You could have a look at how that works. I'm not sure if EMF transaction is already automatically doing similar things. If someone changes the underlying resource in the file system/workspace will the editor is open it's not clear which change is more important to preserve.
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Powered by
FUDForum. Page generated in 0.04561 seconds