2011-01-29 2 views
0

Мы используем API Eclipse в нашем приложении RAP. Это использует Eclipse Modeling Frame Work. Когда страница редактируется, модель становится грязной, а в результате результат сохраняется кнопка «Сохранить».Отключение кнопки сохранения при ошибках проверки в приложении Eclipse-RAP

На страницах нашего редактора, когда на странице появляется ошибка, мы устанавливаем флаг Validation на странице Editor на false, что в свою очередь отображает красные цветные метки на странице. Затем обычно кнопка сохранения также становится включен.

Но я хочу изменить это поведение. Когда на странице появляется ошибка, я не хочу, чтобы кнопка сохранения была активирована. Это не должно позволять пользователю сохранять модель на этапе ошибки , Кнопка сохранения должна быть отключена, как я могу это достичь. Прошу прощения.

ответ

1

Редактор, созданный 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

+0

Спасибо за вашу озабоченность по поводу моего вопроса – VINEEL

Смежные вопросы