/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package net.sourceforge.phpdt.core;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* A buffer contains the text contents of a resource. It is not
* language-specific. The contents may be in the process of being edited,
* differing from the actual contents of the underlying resource. A buffer has
* an owner, which is an IOpenable
. If a buffer does not have an
* underlying resource, saving the buffer has no effect. Buffers can be
* read-only.
*
* Note that java model operations that manipulate an IBuffer
* (for example, IType.createMethod(...)
) ensures that the same
* line delimiter (either "\n"
or "\r"
or
* "\r\n"
) is used across the whole buffer. Thus these
* operations may change the line delimiter(s) included in the string to be
* append, or replaced. However implementers of this interface should be aware
* that other clients of IBuffer
might not do such
* transformations beforehand.
*
* This interface may be implemented by clients. *
*/ public interface IBuffer { /** * Adds the given listener for changes to this buffer. Has no effect if an * identical listener is already registered or if the buffer is closed. * * @param listener * the listener of buffer changes */ public void addBufferChangedListener(IBufferChangedListener listener); /** * Appends the given character array to the contents of the buffer. This * buffer will now have unsaved changes. Any client can append to the * contents of the buffer, not just the owner of the buffer. Reports a * buffer changed event. ** Has no effect if this buffer is read-only. *
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param text
* the given character array to append to contents of the buffer
*/
public void append(char[] text);
/**
* Appends the given string to the contents of the buffer. This buffer will
* now have unsaved changes. Any client can append to the contents of the
* buffer, not just the owner of the buffer. Reports a buffer changed event.
*
* Has no effect if this buffer is read-only. *
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param text
* the String
to append to the contents of the
* buffer
*/
public void append(String text);
/**
* Closes the buffer. Any unsaved changes are lost. Reports a buffer changed
* event with a 0 offset and a 0 length. When this event is fired, the
* buffer should already be closed.
*
* Further operations on the buffer are not allowed, except for close. If an * attempt is made to close an already closed buffer, the second attempt has * no effect. */ public void close(); /** * Returns the character at the given position in this buffer. *
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param position
* a zero-based source offset in this buffer
* @return the character at the given position in this buffer
*/
public char getChar(int position);
/**
* Returns the contents of this buffer as a character array, or
* null
if the buffer has not been initialized.
*
* Callers should make no assumption about whether the returned character * array is or is not the genuine article or a copy. In other words, if the * client wishes to change this array, they should make a copy. Likewise, if * the client wishes to hang on to the array in its current state, they * should make a copy. *
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @return the characters contained in this buffer
*/
public char[] getCharacters();
/**
* Returns the contents of this buffer as a String
. Like all
* strings, the result is an immutable value object., It can also answer
* null
if the buffer has not been initialized.
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @return the contents of this buffer as a String
*/
public String getContents();
/**
* Returns number of characters stored in this buffer.
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @return the number of characters in this buffer
*/
public int getLength();
/**
* Returns the Java openable element owning of this buffer.
*
* @return the openable element owning this buffer
*/
public IOpenable getOwner();
/**
* Returns the given range of text in this buffer.
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param offset
* the zero-based starting offset
* @param length
* the number of characters to retrieve
* @return the given range of text in this buffer
*/
public String getText(int offset, int length);
/**
* Returns the underlying resource for which this buffer was opened, or
* null
if this buffer was not opened on a resource.
*
* @return the underlying resource for this buffer, or null
* if none.
*/
public IResource getUnderlyingResource();
/**
* Returns whether this buffer has been modified since it was opened or
* since it was last saved. If a buffer does not have an underlying
* resource, this method always returns true
.
*
* @return a boolean
indicating presence of unsaved changes
* (in the absence of any underlying resource, it will always return
* true
).
*/
public boolean hasUnsavedChanges();
/**
* Returns whether this buffer has been closed.
*
* @return a boolean
indicating whether this buffer is
* closed.
*/
public boolean isClosed();
/**
* Returns whether this buffer is read-only.
*
* @return a boolean
indicating whether this buffer is
* read-only
*/
public boolean isReadOnly();
/**
* Removes the given listener from this buffer. Has no affect if an
* identical listener is not registered or if the buffer is closed.
*
* @param listener
* the listener
*/
public void removeBufferChangedListener(IBufferChangedListener listener);
/**
* Replaces the given range of characters in this buffer with the given
* text. position
and position + length
must
* be in the range [0, getLength()]. length
must not be
* negative.
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param position
* the zero-based starting position of the affected text range in
* this buffer
* @param length
* the length of the affected text range in this buffer
* @param text
* the replacing text as a character array
*/
public void replace(int position, int length, char[] text);
/**
* Replaces the given range of characters in this buffer with the given
* text. position
and position + length
must
* be in the range [0, getLength()]. length
must not be
* negative.
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param position
* the zero-based starting position of the affected text range in
* this buffer
* @param length
* the length of the affected text range in this buffer
* @param text
* the replacing text as a String
*/
public void replace(int position, int length, String text);
/**
* Saves the contents of this buffer to its underlying resource. If
* successful, this buffer will have no unsaved changes. The buffer is left
* open. Saving a buffer with no unsaved changes has no effect - the
* underlying resource is not changed. If the buffer does not have an
* underlying resource or is read-only, this has no effect.
*
* The force
parameter controls how this method deals with
* cases where the workbench is not completely in sync with the local file
* system. If false
is specified, this method will only
* attempt to overwrite a corresponding file in the local file system
* provided it is in sync with the workbench. This option ensures there is
* no unintended data loss; it is the recommended setting. However, if
* true
is specified, an attempt will be made to write a
* corresponding file in the local file system, overwriting any existing one
* if need be. In either case, if this method succeeds, the resource will be
* marked as being local (even if it wasn't before).
*
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param progress
* the progress monitor to notify
* @param force
* a boolean
flag indicating how to deal with
* resource inconsistencies.
*
* @exception JavaModelException
* if an error occurs writing the buffer to the underlying
* resource
*
* @see org.eclipse.core.resources.IFile#setContents(java.io.InputStream,
* boolean, boolean, org.eclipse.core.runtime.IProgressMonitor)
*/
public void save(IProgressMonitor progress, boolean force)
throws JavaModelException;
/**
* Sets the contents of this buffer to the given character array. This
* buffer will now have unsaved changes. Any client can set the contents of
* the buffer, not just the owner of the buffer. Reports a buffer changed
* event.
*
* Equivalent to replace(0,getLength(),contents)
.
*
* Has no effect if this buffer is read-only. *
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param contents
* the new contents of this buffer as a character array
*/
public void setContents(char[] contents);
/**
* Sets the contents of this buffer to the given String
.
* This buffer will now have unsaved changes. Any client can set the
* contents of the buffer, not just the owner of the buffer. Reports a
* buffer changed event.
*
* Equivalent to replace(0,getLength(),contents)
.
*
* Has no effect if this buffer is read-only. *
* A RuntimeException
might be thrown if the buffer is
* closed.
*
* @param contents
* the new contents of this buffer as a String
*/
public void setContents(String contents);
}