I am creating an Eclipse RCP with a GEF editor and an EMF-based model.
One thing that is mentioned about the model in the GEF Book is
The model should broadcast all state changes via listeners so that the
view can be updated without the model having any direct knowledge of
the controller or view.
In the book’s example, each model element class, e.g., Person, Marriage, etc. (the example is a genealogy editor), has methods to add and remove the respective listener, e.g., for Person the are:
public void addPersonListener(PersonListener l) {
listeners.add(l);
}
public void removePersonListener(PersonListener l) {
listeners.remove(l);
}
Unfortunately, the model I use doesn’t have these add/removeListener methods. Now I need a way to extend the model and implement the methods. I have no idea where to start really, as I don’t know much about EMF.
The model is graph-based, so it has nodes and edges (“relations”). Elements are added to the graph via calling, e.g., MyNode node = ExampleFactory.eINSTANCE.createMyNode() and adding the new node to the graph, e.g., graph.addMyNode(node).
What I don’t understand due to my lack of knowldege concerning EMF is where the “extension point” in the model would be.
The model structure is approximately as follows:
org.example.structure.MyGraph:
public interface MyGraph {
...
MyRelation addMyNode(MyNode sourceMyNode, MyNode targetMyNode,
MYTYPE_NAME myRelationType);
...
}
Then there is als a class MyGraphImpl
org.example.structure.impl.MyGraphImpl:
public class MyGraphImpl extends Graph implements MyGraph {
...
protected MyGraphImpl() {
super();
this.init();
}
...
private void init()
{
//creates indexes
}
...
@Override
public void addMyNode(MyNode myNode)
{
super.addNode(myNode);
}
...
}
Do I have to – to put it like that for want of knowledge – extend the single model classes with EMF (as described, e.g., on Lars Vogel’s website), or can I extend the model “per hand”?
And: Do I have to extend the **interface**s of the model (e.g., MyGraph), or their implementation classes (e.g., MyGraphImpl)?
I’ll be very thankful for any pointers in the right direction…
Thanks!
EMF has its own Notification mechanism, there is no need to add another listener-mechanism, a quick google-search gave me another tutorial of Lars with a nice example that demonstrates this mechanism