package net.sourceforge.phpeclipse.builder; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.editors.text.StorageDocumentProvider; /** * @author ed * @version 1.0, May 19, 2003 */ public class ExternalStorageDocumentProvider extends StorageDocumentProvider { /* (non-Javadoc) * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#doSaveDocument(org.eclipse.core.runtime.IProgressMonitor, java.lang.Object, org.eclipse.jface.text.IDocument, boolean) */ protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException { if (element instanceof ExternalEditorInput) { ExternalEditorInput external = (ExternalEditorInput) element; FileStorage storage = (FileStorage)external.getStorage(); String encoding = getEncoding(element); if (encoding == null) encoding = getDefaultEncoding(); try { InputStream stream = new ByteArrayInputStream(document.get().getBytes(encoding)); try { // inform about the upcoming content change fireElementStateChanging(element); storage.setContents(stream, overwrite, true, monitor); } catch (RuntimeException e) { // inform about failure fireElementStateChangeFailed(element); throw e; } } catch (IOException e) { IStatus s = new Status(IStatus.ERROR, PHPeclipsePlugin.PLUGIN_ID, IStatus.OK, e.getMessage(), e); throw new CoreException(s); } } else { super.doSaveDocument(monitor, element, document, overwrite); } } }