Eclipse Modeling Framework: связывание альтернативного представления с моделью - PullRequest
0 голосов
/ 24 июня 2011

У меня есть модель ECore, которую я использую для автоматического создания источника модели и пакета редактирования JFace.Я пытаюсь разработать альтернативное представление для содержимого этой модели, в основном представление графика на основе JFreeChart.Мне удалось создать плагин на основе JFreeChart.Теперь мне нужно связать вид с моделью.Как я могу это сделать?Я хотел бы отредактировать модель с помощью редактора TreeBased и увидеть результаты такого редактирования в графическом представлении.Это возможно?

спасибо

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Если вы открываете свой Graphbased-View, попросите IFile текущего открытого редактора. После того, как вы получили файл, вы можете загрузить модель (см. Сгенерированный редактор, как загрузить модель из базового ресурса), присоединить IResourceChangeListener, чтобы получить уведомление, если базовый IFile вашей модели EMF изменился. После уведомления вы можете перезагрузить модель из вашего файла и показать модель в вашем представлении.

Кроме того, вы должны зарегистрировать PartListener для получения уведомления, если пользователь выводит другой редактор emf наверх или закрывает редактор (вы также должны выгрузить (при закрытии) или обновить (другой редактор с вашей моделью emf) был доведен до вершины).

0 голосов
/ 27 июня 2011

Хорошо, мне удалось сделать это, следуя советам Золтана. В любом случае, я признаю, что предпочел бы более структурированный ответ, и поэтому я отвечаю на свой вопрос с кратким изложением решения.

В основном идея заключается в том, что плагин представления реализует интерфейс ViewPart. Из-за этого он может вызывать следующие методы

getSite().getWorkbenchWindow().getSelectionService()

для получения услуги выбора рабочего места. Поэтому вы можете вызвать метод SelectionService

addSelectionListener(ISelectionListener listener)

передача в качестве параметра вашего собственного ISelectionListener, который может быть тем же ViewPart, который вы реализуете. Вам просто нужно реализовать интерфейс ISelectionListener и, таким образом, обеспечить реализацию метода selectionChanged

public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection)
0 голосов
/ 24 июня 2011

Да, так как сгенерированный код EMF обеспечивает уровень уведомлений: используйте EObject.eAdapters для добавления нового адаптера, который уведомляется об изменении модели.

    object.eAdapters().add(new Adapter() {

        public void setTarget(Notifier newTarget) {
            // TODO Auto-generated method stub

        }

        public void notifyChanged(Notification notification) {
            // TODO Auto-generated method stub

        }

        public boolean isAdapterForType(Object type) {
            // TODO Auto-generated method stub
            return false;
        }

        public Notifier getTarget() {
            // TODO Auto-generated method stub
            return null;
        }
    });
...