EMF에서 생성 된 편집기는 commandstacklistener를 사용하여 PROP_DIRTY를 실행합니다. 이 속성이 실행되면 기본 프레임 워크는 편집자 #isDirty 메서드에 더티 상태를 묻습니다. 이것은 당신이 당신의 논리를 구현할 수있는 장소입니다.
@Override
public boolean isDirty() {
Diagnostic diagnostic = validateMyModel();
return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded() && diagnostic.getSeverity() == Diagnostic.OK;
}
이 경우
은 사용자가 모델에없는-유효 편집을 할 때 에디터가 이미 오염되었을 수는 유스 케이스를 포함하지 않습니다.
하지만 IMHO가 최선의 방법은 아닙니다. 사용자가 편집기를 닫으면 아무런 알림도없이 모델의 모든 변경 사항이 손실되기 때문에 (더티 플래그가 없기 때문에). 그래서 그는 아마도 100 건의 유효 수정을했고, 1 건은 무효가되었고 변경된 모델을 잃어 버렸을 것입니다.
더 좋은 방법은 사용자가 대화 상자를 저장하려는 경우 경고 메시지를 표시하는 것입니다. 이 에디터가 더러운하지 않도록 더러운에서 그 상태를 변경할 수 없습니다 대화 상자에 오류는 사용자가
- 올바른 모든 또는
- 편집기를 종료하는 오류에 가지고 있으며, 그의 모든 changens을 푼다 경우
이를 달성하려면 doSave (IProgressMonitor progressMonitor) 메소드에 오류를 표시하는 대화 상자를 구현해야합니다. 더 까다로운 부분은 더티 에디터 닫기의 기본 동작을 무시하는 것입니다. 워크 벤치에 Yes, No 및 Cancel이 포함 된 대화 상자가 표시됩니다. 이 동작을 재정의하려면 editor에서 promptToSaveOnClose() 메서드를 재정의하려면 org.eclipse.ui.ISaveablePart2 인터페이스를 구현해야합니다. 이 방법에서는 모델의 오류를 검사하는 논리가 다시 있어야합니다. 오류가있는 경우이 메서드는 더티 모델에 오류가있는 한 편집기를 닫을 수 없도록 ISaveablePart2.CANCEL을 반환해야합니다.
HTH Tom
내 질문에 대한 우려로 고맙습니다. – VINEEL