У нас есть FormEditor, содержащий четыре страницы: три FormPages и четвертая страница XTextEditor в качестве исходной страницы.
Всякий раз, когда пользователь вносит какие-либо изменения (например, изменяет значение в текстовом поле) на FormPages, мы изменяем содержимое модели EMF внутри метода XTextDocument.modify(), как показано ниже:
xtextEditor.getDocument().modify(new IUnitOfWork.Void<XtextResource>() {
@Override
public void process(XtextResource state) throws Exception {
IParseResult parseResult = state.getParseResult();
Assert.isNotNull(parseResult);
EObject rootASTElement = parseResult.getRootASTElement();
if (rootASTElement instanceof MyModel) {
XyzType t = ((MyModel) rootASTElement).getXyzType();
t.setName(name); <- ‘name’ is the new value entered on FormPage text box
}
}
});
Теперь мы хотим получать уведомления в FormPages всякий раз, когда модель EMF изменяется, когда пользователь вносит некоторые изменения на исходной странице, например XTextEditor.
Мы попытались добавить IXtextModelListener и IXtextDocumentContentObserver в IXtextDocument; но они вызываются для каждого символа, введенного в XTextEditor.
Наше требование — получать уведомления только при изменении значений в модели EMF (а не для форматирования текста, например, при вставке/удалении пробелов).
Может кто-нибудь, пожалуйста, дать несколько указателей?
С уважением, Ахил.
org.eclipse.emf.common.notify.Notifier
? - person SpaceTrucker   schedule 10.02.2014EObject
, я подумал, что предложить его было бы хорошей идеей. Вам нужно будет зарегистрировать один и тот жеorg.eclipse.emf.common.notify.Adapter
для каждого объекта в вашей модели. Этот адаптер будет получать уведомления при изменении вашей модели. Но для того, чтобы это работало, редактор xtext не должен каждый раз создавать новую модель, а должен модифицировать существующую. - person SpaceTrucker   schedule 11.02.2014