/*******************************************************************************
* Copyright (c) 2000, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Andrew Ferguson (Symbian) - [api] enable document setup participants to customize behavior based on resource being opened - https://bugs.eclipse.org/bugs/show_bug.cgi?id=208881
*******************************************************************************/
package org.eclipse.core.internal.filebuffers;
import org.eclipse.core.filebuffers.IFileBuffer;
import org.eclipse.core.filebuffers.IFileBufferListener;
import org.eclipse.core.filebuffers.IFileBufferStatusCodes;
import org.eclipse.core.filebuffers.ISynchronizationContext;
import org.eclipse.core.filebuffers.ITextFileBuffer;
import org.eclipse.core.filebuffers.ITextFileBufferManager;
import org.eclipse.core.filebuffers.LocationKind;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentExtension4;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @since 3.0
*/
public class TextFileBufferManager implements ITextFileBufferManager {
private static abstract class SafeNotifier implements ISafeRunnable {
public void handleException(Throwable ex) {
// NOTE: Logging is done by SafeRunner
}
}
// protected static final IContentType TEXT_CONTENT_TYPE= Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT);
private Map fFilesBuffers= new HashMap();
private Map fFileStoreFileBuffers= new HashMap();
private List fFileBufferListeners= new ArrayList();
protected ExtensionsRegistry fRegistry;
private ISynchronizationContext fSynchronizationContext;
public TextFileBufferManager() {
fRegistry= new ExtensionsRegistry();
}
/**
* {@inheritDoc}
*
* @deprecated As of 3.3, replaced by {@link #connect(IPath, LocationKind, IProgressMonitor)}
*/
public void connect(IPath location, IProgressMonitor monitor) throws CoreException {
connect(location, LocationKind.NORMALIZE, monitor);
}
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#connect(org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.IFileBufferManager.LocationKind, org.eclipse.core.runtime.IProgressMonitor)
* @since 3.3
*/
public void connect(IPath location, LocationKind locationKind, IProgressMonitor monitor) throws CoreException {
Assert.isNotNull(location);
if (locationKind == LocationKind.NORMALIZE)
location= normalizeLocation(location);
AbstractFileBuffer fileBuffer= null;
synchronized (fFilesBuffers) {
fileBuffer= internalGetFileBuffer(location);
if (fileBuffer != null) {
fileBuffer.connect();
return;
}
}
fileBuffer= createFileBuffer(location, locationKind);
if (fileBuffer == null)
throw new CoreException(new Status(IStatus.ERROR, FileBuffersPlugin.PLUGIN_ID, IFileBufferStatusCodes.CREATION_FAILED, FileBuffersMessages.FileBufferManager_error_canNotCreateFilebuffer, null));
fileBuffer.create(location, monitor);
synchronized (fFilesBuffers) {
AbstractFileBuffer oldFileBuffer= internalGetFileBuffer(location);
if (oldFileBuffer != null) {
fileBuffer.disconnect();
fileBuffer.dispose();
oldFileBuffer.connect();
return;
}
fileBuffer.connect();
fFilesBuffers.put(location, fileBuffer);
}
// Do notification outside synchronized block
fireBufferCreated(fileBuffer);
}
/*
// * @see org.eclipse.core.filebuffers.IFileBufferManager#connectFileStore(org.eclipse.core.filesystem.IFileStore, org.eclipse.core.runtime.IProgressMonitor)
// * @since 3.3
// */
// public void connectFileStore(IFileStore fileStore, IProgressMonitor monitor) throws CoreException {
// Assert.isLegal(fileStore != null);
//
// FileStoreFileBuffer fileBuffer= null;
// synchronized (fFileStoreFileBuffers) {
// fileBuffer= internalGetFileBuffer(fileStore);
// if (fileBuffer != null) {
// fileBuffer.connect();
// return;
// }
// }
//
// fileBuffer= createFileBuffer(fileStore);
// if (fileBuffer == null)
// throw new CoreException(new Status(IStatus.ERROR, FileBuffersPlugin.PLUGIN_ID, IFileBufferStatusCodes.CREATION_FAILED, FileBuffersMessages.FileBufferManager_error_canNotCreateFilebuffer, null));
//
// fileBuffer.create(fileStore, monitor);
//
// synchronized (fFileStoreFileBuffers) {
// AbstractFileBuffer oldFileBuffer= internalGetFileBuffer(fileStore);
// if (oldFileBuffer != null) {
// fileBuffer.disconnect();
// fileBuffer.dispose();
// oldFileBuffer.connect();
// return;
// }
// fileBuffer.connect();
// fFileStoreFileBuffers.put(fileStore, fileBuffer);
// }
//
// // Do notification outside synchronized block
// fireBufferCreated(fileBuffer);
// }
/**
* {@inheritDoc}
*
* @deprecated As of 3.3, replaced by {@link #disconnect(IPath, LocationKind, IProgressMonitor)}
*/
public void disconnect(IPath location, IProgressMonitor monitor) throws CoreException {
disconnect(location, LocationKind.NORMALIZE, monitor);
}
/*
* @since 3.3
*/
protected IPath normalizeLocation(IPath location) {
return location;
}
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#disconnect(org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.IFileBufferManager.LocationKind, org.eclipse.core.runtime.IProgressMonitor)
* @since 3.3
*/
public void disconnect(IPath location, LocationKind locationKind, IProgressMonitor monitor) throws CoreException {
Assert.isNotNull(location);
if (locationKind == LocationKind.NORMALIZE)
location= normalizeLocation(location);
AbstractFileBuffer fileBuffer;
synchronized (fFilesBuffers) {
fileBuffer= internalGetFileBuffer(location);
if (fileBuffer == null)
return;
fileBuffer.disconnect();
if (!fileBuffer.isDisconnected())
return;
fFilesBuffers.remove(location);
}
// Do notification outside synchronized block
fireBufferDisposed(fileBuffer);
fileBuffer.dispose();
}
// /*
// * @see org.eclipse.core.filebuffers.IFileBufferManager#disconnectFileStore(org.eclipse.core.filesystem.IFileStore, org.eclipse.core.runtime.IProgressMonitor)
// * @since 3.3
// */
// public void disconnectFileStore(IFileStore fileStore, IProgressMonitor monitor) throws CoreException {
// Assert.isLegal(fileStore != null);
//
// AbstractFileBuffer fileBuffer;
// synchronized (fFileStoreFileBuffers) {
// fileBuffer= internalGetFileBuffer(fileStore);
// if (fileBuffer == null)
// return;
//
// fileBuffer.disconnect();
// if (!fileBuffer.isDisconnected())
// return;
//
// fFileStoreFileBuffers.remove(fileStore);
// }
//
// // Do notification outside synchronized block
// fireBufferDisposed(fileBuffer);
// fileBuffer.dispose();
// }
// /**
// * {@inheritDoc}
// *
// * @deprecated As of 3.2, replaced by {@link #isTextFileLocation(IPath, boolean)}
// */
// public boolean isTextFileLocation(IPath location) {
// return isTextFileLocation(location, false);
// }
//
// /**
// * Returns whether a file store at the given location is or can be considered a
// * text file. If the file store exists, the concrete content type of the file store is
// * checked. If the concrete content type for the existing file store can not be
// * determined, this method returns <code>!strict</code>. If the file store does
// * not exist, it is checked whether a text content type is associated with
// * the given location. If no content type is associated with the location,
// * this method returns <code>!strict</code>.
// * <p>
// * The provided location is either a full path of a workspace resource or an
// * absolute path in the local file system. The file buffer manager does not
// * resolve the location of workspace resources in the case of linked
// * resources.
// * </p>
// *
// * @param fileStore file store to check
// * @param strict <code>true</code> if a file with unknown content type
// * is not treated as text file, <code>false</code> otherwise
// * @return <code>true</code> if the location is a text file location
// * @since 3.3
// */
// protected boolean isTextFileLocation(IFileStore fileStore, boolean strict) {
// if (fileStore == null)
// return false;
//
// IContentTypeManager manager= Platform.getContentTypeManager();
// IFileInfo fileInfo= fileStore.fetchInfo();
// if (fileInfo.exists()) {
// InputStream is= null;
// try {
// is= fileStore.openInputStream(EFS.NONE, null);
// IContentDescription description= manager.getDescriptionFor(is, fileStore.getName(), IContentDescription.ALL);
// if (description != null) {
// IContentType type= description.getContentType();
// if (type != null)
// return type.isKindOf(TEXT_CONTENT_TYPE);
// }
// } catch (CoreException ex) {
// // ignore: API specification tells return true if content type can't be determined
// } catch (IOException ex) {
// // ignore: API specification tells return true if content type can't be determined
// } finally {
// if (is != null ) {
// try {
// is.close();
// } catch (IOException e) {
// // ignore: API specification tells to return true if content type can't be determined
// }
// }
// }
//
// return !strict;
//
// }
//
// IContentType[] contentTypes= manager.findContentTypesFor(fileStore.getName());
// if (contentTypes != null && contentTypes.length > 0) {
// for (int i= 0; i < contentTypes.length; i++)
// if (contentTypes[i].isKindOf(TEXT_CONTENT_TYPE))
// return true;
// return false;
// }
// return !strict;
// }
/*
* @see org.eclipse.core.filebuffers.ITextFileBufferManager#isTextFileLocation(org.eclipse.core.runtime.IPath, boolean)
* @since 3.2
*/
public boolean isTextFileLocation(IPath location, boolean strict) {
// Assert.isNotNull(location);
// location= normalizeLocation(location);
// try {
// return isTextFileLocation(lo, strict);
// } catch (CoreException ex) {
// return false;
// }
return true;
}
/**
* {@inheritDoc}
*
* @deprecated As of 3.3, replaced by {@link #getFileBuffer(IPath, LocationKind)}
*/
public IFileBuffer getFileBuffer(IPath location) {
return getFileBuffer(location, LocationKind.NORMALIZE);
}
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#getFileBuffer(org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.IFileBufferManager.LocationKind)
* @since 3.3
*/
public IFileBuffer getFileBuffer(IPath location, LocationKind locationKind) {
if (locationKind == LocationKind.NORMALIZE)
location= normalizeLocation(location);
return internalGetFileBuffer(location);
}
// /*
// * @see org.eclipse.core.filebuffers.IFileBufferManager#getFileStoreFileBuffer(org.eclipse.core.filesystem.IFileStore)
// * @since 3.3
// */
// public IFileBuffer getFileStoreFileBuffer(IFileStore fileStore) {
// Assert.isLegal(fileStore != null);
// return internalGetFileBuffer(fileStore);
// }
private AbstractFileBuffer internalGetFileBuffer(IPath location) {
synchronized (fFilesBuffers) {
return (AbstractFileBuffer)fFilesBuffers.get(location);
}
}
// private FileStoreFileBuffer internalGetFileBuffer(IFileStore fileStore) {
// synchronized (fFileStoreFileBuffers) {
// return (FileStoreFileBuffer)fFileStoreFileBuffers.get(fileStore);
// }
// }
/**
* {@inheritDoc}
*
* @deprecated As of 3.3, replaced by {@link #getTextFileBuffer(IPath, LocationKind)}
*/
public ITextFileBuffer getTextFileBuffer(IPath location) {
return getTextFileBuffer(location, LocationKind.NORMALIZE);
}
/*
* @see org.eclipse.core.filebuffers.ITextFileBufferManager#getTextFileBuffer(org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.IFileBufferManager.LocationKind)
* @since 3.3
*/
public ITextFileBuffer getTextFileBuffer(IPath location, LocationKind locationKind) {
return (ITextFileBuffer)getFileBuffer(location, locationKind);
}
//
// /*
// * @see org.eclipse.core.filebuffers.ITextFileBufferManager#getFileStoreTextFileBuffer(org.eclipse.core.filesystem.IFileStore)
// * @since 3.3
// */
// public ITextFileBuffer getFileStoreTextFileBuffer(IFileStore fileStore) {
// Assert.isLegal(fileStore != null);
// return (ITextFileBuffer)getFileStoreFileBuffer(fileStore);
// }
/*
* @see org.eclipse.core.filebuffers.ITextFileBufferManager#getTextFileBuffer(org.eclipse.jface.text.IDocument)
* @since 3.3
*/
public ITextFileBuffer getTextFileBuffer(IDocument document) {
Assert.isLegal(document != null);
Iterator iter;
synchronized (fFilesBuffers) {
iter= new ArrayList(fFilesBuffers.values()).iterator();
}
while (iter.hasNext()) {
Object buffer= iter.next();
if (buffer instanceof ITextFileBuffer) {
ITextFileBuffer textFileBuffer= (ITextFileBuffer)buffer;
if (textFileBuffer.getDocument() == document) {
if (!((AbstractFileBuffer)textFileBuffer).isDisconnected())
return textFileBuffer;
return null;
}
}
}
synchronized (fFileStoreFileBuffers) {
iter= new ArrayList(fFileStoreFileBuffers.values()).iterator();
}
while (iter.hasNext()) {
Object buffer= iter.next();
if (buffer instanceof ITextFileBuffer) {
ITextFileBuffer textFileBuffer= (ITextFileBuffer)buffer;
if (textFileBuffer.getDocument() == document) {
if (!((AbstractFileBuffer)textFileBuffer).isDisconnected())
return textFileBuffer;
}
}
}
return null;
}
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#getFileBuffers()
* @since 3.4
*/
public IFileBuffer[] getFileBuffers() {
synchronized (fFilesBuffers) {
Collection values= fFilesBuffers.values();
return (IFileBuffer[])values.toArray(new IFileBuffer[values.size()]);
}
}
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#getFileStoreFileBuffers()
* @since 3.4
*/
public IFileBuffer[] getFileStoreFileBuffers() {
synchronized (fFileStoreFileBuffers) {
Collection values= fFileStoreFileBuffers.values();
return (IFileBuffer[])values.toArray(new IFileBuffer[values.size()]);
}
}
/*
* @see org.eclipse.core.buffer.text.IBufferedFileManager#getDefaultEncoding()
*/
public String getDefaultEncoding() {
return System.getProperty("file.encoding"); //$NON-NLS-1$;
}
/**
* {@inheritDoc}
*
* @deprecated As of 3.3, replaced by {@link #createEmptyDocument(IPath, LocationKind)}
*/
public IDocument createEmptyDocument(IPath location) {
return createEmptyDocument(location, LocationKind.NORMALIZE);
}
/*
* @see org.eclipse.core.filebuffers.ITextFileBufferManager#createEmptyDocument(org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.LocationKind)
* @since 3.3
*/
public IDocument createEmptyDocument(final IPath location, final LocationKind locationKind) {
// IDocument documentFromFactory= createDocumentFromFactory(location, locationKind);
final IDocument document;
// if (documentFromFactory != null)
// document= documentFromFactory;
// else
document= new SynchronizableDocument();
if (location == null)
return document;
// Set the initial line delimiter
if (document instanceof IDocumentExtension4) {
String initalLineDelimiter= getLineDelimiterPreference(location, locationKind);
if (initalLineDelimiter != null)
((IDocumentExtension4)document).setInitialLineDelimiter(initalLineDelimiter);
}
// final IDocumentSetupParticipant[] participants= fRegistry.getDocumentSetupParticipants(location, locationKind);
// if (participants != null) {
// for (int i= 0; i < participants.length; i++) {
// final IDocumentSetupParticipant participant= participants[i];
// ISafeRunnable runnable= new ISafeRunnable() {
// public void run() throws Exception {
// if (participant instanceof IDocumentSetupParticipantExtension)
// ((IDocumentSetupParticipantExtension)participant).setup(document, location, locationKind);
// else
// participant.setup(document);
//
// if (document.getDocumentPartitioner() != null) {
// String message= NLSUtility.format(FileBuffersMessages.TextFileBufferManager_warning_documentSetupInstallsDefaultPartitioner, participant.getClass());
// IStatus status= new Status(IStatus.WARNING, FileBuffersPlugin.PLUGIN_ID, IStatus.OK, message, null);
// FileBuffersPlugin.getDefault().log(status);
// }
// }
// public void handleException(Throwable t) {
// IStatus status= new Status(IStatus.ERROR, FileBuffersPlugin.PLUGIN_ID, IStatus.OK, FileBuffersMessages.TextFileBufferManager_error_documentSetupFailed, t);
// FileBuffersPlugin.getDefault().log(status);
// }
// };
// SafeRunner.run(runnable);
// }
// }
return document;
}
// /**
// * Helper to get rid of deprecation warnings.
// *
// * @param location the location of the file to be connected
// * @param locationKind the kind of the given location
// * @return the created empty document or <code>null</code> if none got created
// * @since 3.5
// * @deprecated As of 3.5
// */
// private IDocument createDocumentFromFactory(final IPath location, final LocationKind locationKind) {
// final IDocument[] runnableResult= new IDocument[1];
// if (location != null) {
// final org.eclipse.core.filebuffers.IDocumentFactory factory= fRegistry.getDocumentFactory(location, locationKind);
// if (factory != null) {
// ISafeRunnable runnable= new ISafeRunnable() {
// public void run() throws Exception {
// runnableResult[0]= factory.createDocument();
// }
// public void handleException(Throwable t) {
// IStatus status= new Status(IStatus.ERROR, FileBuffersPlugin.PLUGIN_ID, IStatus.OK, FileBuffersMessages.TextFileBufferManager_error_documentFactoryFailed, t);
// FileBuffersPlugin.getDefault().log(status);
// }
// };
// SafeRunner.run(runnable);
// }
// }
// return runnableResult[0];
// }
// /**
// * {@inheritDoc}
// *
// * @deprecated As of 3.3, replaced by {@link #createAnnotationModel(IPath, LocationKind)}
// */
// public IAnnotationModel createAnnotationModel(IPath location) {
// return createAnnotationModel(location, LocationKind.NORMALIZE);
// }
// /*
// * @see org.eclipse.core.filebuffers.ITextFileBufferManager#createAnnotationModel(org.eclipse.core.runtime.IPath, org.eclipse.core.filebuffers.LocationKind)
// * @since 3.3
// */
// public IAnnotationModel createAnnotationModel(IPath location, LocationKind locationKind) {
// Assert.isNotNull(location);
// IAnnotationModelFactory factory= fRegistry.getAnnotationModelFactory(location, locationKind);
// if (factory != null)
// return factory.createAnnotationModel(location);
// return null;
// }
//
// /*
// * @see org.eclipse.core.filebuffers.IFileBufferManager#addFileBufferListener(org.eclipse.core.filebuffers.IFileBufferListener)
// */
// public void addFileBufferListener(IFileBufferListener listener) {
// Assert.isNotNull(listener);
// synchronized (fFileBufferListeners) {
// if (!fFileBufferListeners.contains(listener))
// fFileBufferListeners.add(listener);
// }
// }
//
// /*
// * @see org.eclipse.core.filebuffers.IFileBufferManager#removeFileBufferListener(org.eclipse.core.filebuffers.IFileBufferListener)
// */
// public void removeFileBufferListener(IFileBufferListener listener) {
// Assert.isNotNull(listener);
// synchronized (fFileBufferListeners) {
// fFileBufferListeners.remove(listener);
// }
// }
//
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#setSynchronizationContext(org.eclipse.core.filebuffers.ISynchronizationContext)
*/
public void setSynchronizationContext(ISynchronizationContext context) {
fSynchronizationContext= context;
}
/**
* {@inheritDoc}
*
* @deprecated As of 3.1, replaced by
* {@link org.eclipse.core.filebuffers.IFileBuffer#requestSynchronizationContext()}
*/
public void requestSynchronizationContext(IPath location) {
Assert.isNotNull(location);
location= normalizeLocation(location);
AbstractFileBuffer fileBuffer= internalGetFileBuffer(location);
if (fileBuffer != null)
fileBuffer.requestSynchronizationContext();
}
/**
* {@inheritDoc}
*
* @deprecated As of 3.1, replaced by {@link IFileBuffer#releaseSynchronizationContext()}
*/
public void releaseSynchronizationContext(IPath location) {
Assert.isNotNull(location);
location= normalizeLocation(location);
AbstractFileBuffer fileBuffer= internalGetFileBuffer(location);
if (fileBuffer != null)
fileBuffer.releaseSynchronizationContext();
}
@Override
public void addFileBufferListener(IFileBufferListener listener) {
throw new UnsupportedOperationException();
}
@Override
public void removeFileBufferListener(IFileBufferListener listener) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*/
public void execute(Runnable runnable) {
if (fSynchronizationContext != null)
fSynchronizationContext.run(runnable);
else
runnable.run();
}
private AbstractFileBuffer createFileBuffer(IPath location, LocationKind locationKind) {
/*
* XXX: the following code is commented out for performance
* reasons and because we do not yet create a special binary
* file buffer.
*/
// if (isTextFileLocation(location, false))
// return createTextFileBuffer(location);
// return createBinaryFileBuffer(location, locationKind);
return createTextFileBuffer(location, locationKind);
}
/**
* Creates a text file buffer for the given path.
*
* @param location the location of the file to be connected
* @param locationKind the kind of the given location
* @return the text file buffer
* @since 3.3
*/
protected AbstractFileBuffer createTextFileBuffer(IPath location, LocationKind locationKind) {
// Assert.isLegal(locationKind != LocationKind.IFILE);
return new FileStoreTextFileBuffer(this);
}
// private AbstractFileBuffer createBinaryFileBuffer(IPath location, LocationKind locationKind) {
// // XXX: should return a binary file buffer - using text file buffer for now
// return createTextFileBuffer(location, locationKind);
// }
// private FileStoreFileBuffer createFileBuffer(IFileStore location) {
// /*
// * XXX: the following code is commented out for performance
// * reasons and because we do not yet create a special binary
// * file buffer.
// */
//// if (isTextFileLocation(location, false))
//// return createTextFileBuffer(location);
//// return createBinaryFileBuffer(location);
// return createTextFileBuffer(location);
//
// }
// /**
// * Creates a text file buffer for the given file store.
// *
// * @param location the file store
// * @return the text file buffer
// * @since 3.3
// */
// protected FileStoreFileBuffer createTextFileBuffer(IFileStore location) {
// return new FileStoreTextFileBuffer(this);
// }
// private FileStoreFileBuffer createBinaryFileBuffer(FileStore location) {
// // XXX: should return a binary file buffer - using text file buffer for now
// return createTextFileBuffer(location);
// }
private Iterator getFileBufferListenerIterator() {
synchronized (fFileBufferListeners) {
return new ArrayList(fFileBufferListeners).iterator();
}
}
protected void fireDirtyStateChanged(final IFileBuffer buffer, final boolean isDirty) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.dirtyStateChanged(buffer, isDirty);
}
});
}
}
protected void fireBufferContentAboutToBeReplaced(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.bufferContentAboutToBeReplaced(buffer);
}
});
}
}
protected void fireBufferContentReplaced(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.bufferContentReplaced(buffer);
}
});
}
}
protected void fireUnderlyingFileMoved(final IFileBuffer buffer, final IPath target) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.underlyingFileMoved(buffer, target);
}
});
}
}
protected void fireUnderlyingFileDeleted(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.underlyingFileDeleted(buffer);
}
});
}
}
protected void fireStateValidationChanged(final IFileBuffer buffer, final boolean isStateValidated) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.stateValidationChanged(buffer, isStateValidated);
}
});
}
}
protected void fireStateChanging(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.stateChanging(buffer);
}
});
}
}
protected void fireStateChangeFailed(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.stateChangeFailed(buffer);
}
});
}
}
protected void fireBufferCreated(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.bufferCreated(buffer);
}
});
}
}
protected void fireBufferDisposed(final IFileBuffer buffer) {
Iterator e= getFileBufferListenerIterator();
while (e.hasNext()) {
final IFileBufferListener l= (IFileBufferListener) e.next();
SafeRunner.run(new SafeNotifier() {
public void run() {
l.bufferDisposed(buffer);
}
});
}
}
/*
* @see org.eclipse.core.filebuffers.IFileBufferManager#validateState(org.eclipse.core.filebuffers.IFileBuffer[], org.eclipse.core.runtime.IProgressMonitor, java.lang.Object)
* @since 3.1
*/
public void validateState(final IFileBuffer[] fileBuffers, IProgressMonitor monitor, final Object computationContext) throws CoreException {
}
/**
* Returns the line delimiter to be used by the given location.
*
* @param location the location of the file to be connected
* @param locationKind the kind of the given location
* @return the line delimiter
* @since 3.3
*/
protected String getLineDelimiterPreference(IPath location, LocationKind locationKind) {
return System.getProperty("line.separator"); //$NON-NLS-1$
}
}