Я создаю Eclipse RCP с GEF редактором и моделью EMF .
Одна вещь, которая упоминается о модели в GEF Book is
Модель должна транслировать все изменения состояния через слушателей , чтобы представление можно было обновлять без непосредственного знания модели контроллера или представления..
В примере книги каждый класс элементов модели, например, Person
, Marriage
и т. Д. (Пример - редактор генеалогии), имеет методы для добавления и удаления соответствующего слушателя.Например, для Person
есть:
public void addPersonListener(PersonListener l) {
listeners.add(l);
}
public void removePersonListener(PersonListener l) {
listeners.remove(l);
}
К сожалению, модель, которую я использую , не имеет этих add/removeListener
методов .Теперь мне нужен способ расширить модель и реализовать методы.Я понятия не имею, с чего начать, так как я мало знаю об EMF.
Модель основана на графике, поэтому у нее есть узлы и ребра ("отношения").Элементы добавляются в график с помощью вызова, например, MyNode node = ExampleFactory.eINSTANCE.createMyNode()
и добавления нового узла в график, например, graph.addMyNode(node)
.
. Что я не понимаю из-за недостатка знаний об EMF, так этогде "точка расширения" в модели была бы.
Структура модели примерно следующая:
org.example.structure.MyGraph
:
public interface MyGraph {
...
MyRelation addMyNode(MyNode sourceMyNode, MyNode targetMyNode,
MYTYPE_NAME myRelationType);
...
}
Тогда есть такжекласс 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);
}
...
}
Должен ли я - если говорить об этом из-за недостатка знаний - расширить классы одной модели с помощью EMF (как описано, например, на сайте Ларса Фогеля ), или я могу расширить модель «на руку»?
И: Нужно ли мне расширять **interface**
смодель (например, MyGraph
) или их реализация классы (например, MyGraphImpl
)?
Я буду очень благодарен за любые указатели в правильном направлении ...
Спасибо!