Как расширить модель на основе EMF со слушателями для использования в редакторе GEF? - PullRequest
1 голос
/ 22 марта 2012

Я создаю 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)?

Я буду очень благодарен за любые указатели в правильном направлении ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

EMF имеет свой собственный механизм уведомлений, нет необходимости добавлять другой механизм слушателя, быстрый поиск в Google дал мне еще один учебник Ларса с хорошим примером, демонстрирующим этот механизм

0 голосов
/ 05 апреля 2012

Существует мало или нет причин для совместного использования ЭДС и ГЭФ. Если вы моделируете в EMF и используете GEF в качестве среды редактирования, вам следует рассмотреть возможность использования GMF http://www.eclipse.org/modeling/gmp/ insted. GMF предоставляет расширение для Draw2D, GEF и EMF, которое без проблем склеивает их вместе. А если вы просто строите узлы и ребра, рассматривая возможность использования Graphity в качестве гораздо более простой среды, то GEF of EMF, которая очень скоро даст вам быстрые и хорошие результаты.

...