Редактор, созданный EMF, использует команду commandstacklistener для запуска PROP_DIRTY в редактор. Если это свойство уволено, базовая структура спросит редактора #isDirty Method для грязного состояния. Это место, где вы можете реализовать свою логику.
@Override
public boolean isDirty() {
Diagnostic diagnostic = validateMyModel();
return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded() && diagnostic.getSeverity() == Diagnostic.OK;
}
Этот случай не покрывает USECASE, что редактор мог бы уже загрязнен, когда пользователь делает не недействительный редактировать на модели.
Но это не лучший способ ИМХО. Потому что, если пользователь закрывает редактор, все изменения модели теряются без уведомления (из-за отсутствия грязного флага). Поэтому он, вероятно, выполнил 100 действительных модификаций, 1 недействителен и потерял свою измененную модель.
Лучше всего показывать предупреждающее сообщение, если пользователь хочет сохранить диалог. Если есть ошибки в диалоге редактор не может изменить свое состояние от грязной не грязный, и пользователь должен
- исправить все erros или
- закрыть редактор и теряет все свои changens
Чтобы добиться этого, вы должны реализовать в своем doSave (IProgressMonitor progressMonitor) метод для отображения ошибок. Более сложная часть - переопределить поведение по умолчанию для закрытия грязного редактора. Рабочее место отобразит диалог с «Да», «Нет» и «Отмена» . Чтобы переопределить это поведение, вы должны реализовать интерфейс org.eclipse.ui.ISaveablePart2 в своем редакторе, чтобы переопределить метод promptToSaveOnClose(). В этом методе должна быть ваша логика, которая проверяет наличие ошибок в модели. Если есть ошибки, этот метод должен возвращать ISaveablePart2.CANCEL, чтобы редактор не был закрыт, если в грязной модели есть ошибки.
HTH Tom
Спасибо за вашу озабоченность по поводу моего вопроса – VINEEL