### Eclipse Workspace Patch 1.0 #P org.eclipse.ui.workbench.texteditor Index: src/org/eclipse/ui/texteditor/AbstractTextEditor.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java,v retrieving revision 1.192 diff -u -r1.192 AbstractTextEditor.java --- src/org/eclipse/ui/texteditor/AbstractTextEditor.java 15 Feb 2006 11:50:36 -0000 1.192 +++ src/org/eclipse/ui/texteditor/AbstractTextEditor.java 14 Mar 2006 23:09:41 -0000 @@ -145,6 +145,8 @@ import org.eclipse.ui.IPartListener; import org.eclipse.ui.IPartService; import org.eclipse.ui.IReusableEditor; +import org.eclipse.ui.ISaveableModel; +import org.eclipse.ui.ISaveableModelSource; import org.eclipse.ui.IWindowListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; @@ -188,7 +190,7 @@ * If no id is set while in compatibility mode, the menu is registered under * DEFAULT_RULER_CONTEXT_MENU_ID.

*/ -public abstract class AbstractTextEditor extends EditorPart implements ITextEditor, IReusableEditor, ITextEditorExtension, ITextEditorExtension2, ITextEditorExtension3, ITextEditorExtension4, INavigationLocationProvider { +public abstract class AbstractTextEditor extends EditorPart implements ITextEditor, IReusableEditor, ITextEditorExtension, ITextEditorExtension2, ITextEditorExtension3, ITextEditorExtension4, INavigationLocationProvider, ISaveableModelSource { /** * Tag used in xml configuration files to specify editor action contributions. @@ -5686,4 +5688,94 @@ public void showRevisionInformation(RevisionInformation info, String quickDiffProviderId) { // no implementation } + + private ISaveableModel fSaveableModel; + + /* + * @since 3.2 + */ + public ISaveableModel[] getModels() { + // TODO need to react when the document provider or the editor input changes. + if (fSaveableModel == null) { + fSaveableModel = new TextEditorSaveableModel(getDocumentProvider(), getEditorInput()); + } + return new ISaveableModel[] { fSaveableModel }; + } + + /* + * @since 3.2 + */ + public ISaveableModel[] getActiveModels() { + return getModels(); + } + + private static class TextEditorSaveableModel implements ISaveableModel { + private IDocumentProvider documentProvider; + private IEditorInput editorInput; + + /** + * @param documentProvider + * @param editorInput + */ + public TextEditorSaveableModel(IDocumentProvider documentProvider, IEditorInput editorInput) { + this.documentProvider = documentProvider; + this.editorInput = editorInput; + } + + public String getName() { + return editorInput.getName(); + } + + public String getToolTipText() { + return editorInput.getToolTipText(); + } + + public ImageDescriptor getImageDescriptor() { + return editorInput.getImageDescriptor(); + } + + public void doSave(IProgressMonitor monitor) throws CoreException { + documentProvider.aboutToChange(editorInput); + documentProvider.saveDocument(monitor, editorInput, documentProvider.getDocument(editorInput), false); + } + + public boolean isDirty() { + return documentProvider.canSaveDocument(editorInput); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + final int PRIME = 31; + int result = 1; + result = PRIME * result + ((documentProvider == null) ? 0 : documentProvider.hashCode()); + result = PRIME * result + ((editorInput == null) ? 0 : editorInput.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final TextEditorSaveableModel other = (TextEditorSaveableModel) obj; + if (documentProvider == null) { + if (other.documentProvider != null) + return false; + } else if (!documentProvider.equals(other.documentProvider)) + return false; + if (editorInput == null) { + if (other.editorInput != null) + return false; + } else if (!editorInput.equals(other.editorInput)) + return false; + return true; + } + } }