/*
* Copyright 2005 by Oracle USA
* 500 Oracle Parkway, Redwood Shores, California, 94065, U.S.A.
* All rights reserved.
*/
package javax.ide.model;
import java.io.IOException;
import javax.swing.undo.UndoableEdit;
public interface Transaction
{
/**
* Used to instruct a model to start a compound edit
* such that all the changes made between this point and when the
* endEdit()
is called should be combined into a single
* UndoableEdit record. This guarantees to the client that the
* buffer will be locked for the duration between
* beginEdit()
and endEdit()
for data
* consistency. This also takes care of locking the buffer, and
* collecting the individual UndoableEdit
objects into
* a larger compound one.
*
* Note that compound edits may not be nested - it is illegal
* to call beginEdit()
twice in a row without calling
* endEdit()
in between.
* @exception ReadOnlyException if the buffer is in read only mode
*/
public void beginEdit() throws IOException;
/**
* Used to indicate to the text buffer to end an in progress
* compound edit. This will end the compound edit and returned the
* single combined UndoableEdit
representing all of the
* changes made between the calls to beginEdit()
and
* endEdit()
. If no modifications were made to the
* buffer since beginEdit()
was called, null will be
* returned.
* @return the UndoableEdit representing all the changes made
*/
public UndoableEdit commitEdit();
/**
* Used to indicate to the text buffer to end an in progress
* compound edit without commiting the changes. The text buffer
* will be left in the same state it was found when the call to
* beginEdit
was made.
*/
public void rollbackEdit();
/**
* This allows the model to be safely updated. The given runnable
* will be executed in a way that allows it to safely write to the model
* (with no changes from other threads) while the runnable is being executed.
* Multiple write calls from the same thread are allowed.
*
* @param runnable a Runnable
used to write to the model.
*/
public void write( Runnable runnable );
}