|
Eclipse Platform 2.0 |
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.eclipse.compare.CompareEditorInput
A compare operation which can present its results in a special editor. Running the compare operation and presentating the results in a compare editor are combined in one interface because it allows a client to keep the implementation all in one place while separating it from the innards of a specific UI implementation of compare/merge.
A CompareEditorInput
defines methods for the following sequence steps:
openCompareEditor
method takes an ICompareEditorInput
and starts sequencing through the above steps. If the compare result is not empty a new compare editor
is opened and takes over the sequence until eventually closed.
The prepareInput
method should contain the
code of the compare operation. It is executed under control of a progress monitor
and can be canceled. If the result of the compare is not empty, that is if there are differences
that needs to be presented, the ICompareEditorInput
should hold onto them and return them with
the getCompareResult
method.
If the value returned from getCompareResult
is not null
a compare editor is opened on the ICompareEditorInput
with title and title image initialized by the
corresponding methods of the ICompareEditorInput
.
Creation of the editor's SWT controls is delegated to the createContents
method.
Here the SWT controls must be created and initialized with the result of the compare operation.
If merging is allowed, the modification state of the compared constituents must be tracked and the dirty
state returned from method isSaveNeeded
. The value true
triggers a subsequent call
to save
where the modified resources can be saved.
The most important part of this implementation is the setup of the compare/merge UI. The UI uses a simple browser metaphor to present compare results. The top half of the layout shows the structural compare results (e.g. added, deleted, and changed files), the bottom half the content compare results (e.g. textual differences between two files). A selection in the top pane is fed to the bottom pane. If a content viewer is registered for the type of the selected object, this viewer is installed in the pane. In addition if a structure viewer is registered for the selection type the top pane is split horizontally to make room for another pane and the structure viewer is installed in it. When comparing Java files this second structure viewer would show the structural differences within a Java file, e.g. added, deleted or changed methods and fields.
Subclasses provide custom setups, e.g. for a Catchup/Release operation
by passing a subclass of CompareConfiguration
and by implementing the prepareInput
method.
If a subclass cannot use the DiffTreeViewer
which is installed by default in the
top left pane, method createDiffViewer
can be overridden.
CompareUI
,
CompareEditorInput
Field Summary | |
static String |
DIRTY_STATE
The name of the "dirty" property (value "DIRTY_STATE" ). |
Constructor Summary | |
CompareEditorInput(CompareConfiguration configuration)
Creates a CompareEditorInput which is initialized with the given
compare configuration. |
Method Summary | |
void |
addPropertyChangeListener(IPropertyChangeListener listener)
Adds a listener for property changes to this notifier. |
void |
contributeToToolBar(ToolBarManager toolBarManager)
Adds standard actions to the given ToolBarManager . |
Control |
createContents(Composite parent)
Create the SWT controls that are used to display the result of the compare operation. |
Viewer |
createDiffViewer(Composite parent)
Factory method for creating a differences viewer for the top left pane. |
boolean |
exists()
Returns false to indicate that this input
should not appear in the "File Most Recently Used" menu. |
Viewer |
findContentViewer(Viewer oldViewer,
ICompareInput input,
Composite parent)
Implements the dynamic viewer switching for content viewers. |
Viewer |
findStructureViewer(Viewer oldViewer,
ICompareInput input,
Composite parent)
Implements the dynamic viewer switching for structure viewers. |
Object |
getAdapter(Class adapter)
Returns an object which is an instance of the given class associated with this object. |
CompareConfiguration |
getCompareConfiguration()
Returns the configuration object for the viewers within the compare editor. |
Object |
getCompareResult()
Returns the compare result computed by the most recent call to the run method. |
ImageDescriptor |
getImageDescriptor()
Returns the image descriptor for this input. |
String |
getMessage()
|
String |
getName()
Returns the name of this editor input for display purposes. |
IPersistableElement |
getPersistable()
Returns null since this editor cannot be persisted. |
String |
getTitle()
Returns the title which will be used in the compare editor's title bar. |
Image |
getTitleImage()
Returns the title image which will be used in the compare editor's title bar. |
String |
getToolTipText()
Returns the tool tip text for this editor input. |
boolean |
isSaveNeeded()
Returns true if there are unsaved changes. |
protected abstract Object |
prepareInput(IProgressMonitor monitor)
Runs the compare operation and returns the compare result. |
void |
removePropertyChangeListener(IPropertyChangeListener listener)
Removes the given content change listener from this notifier. |
void |
run(IProgressMonitor monitor)
Runs the compare operation and stores the compare result. |
void |
save(IProgressMonitor pm)
Deprecated. Override method saveChanges instead. |
void |
saveChanges(IProgressMonitor pm)
Save any unsaved changes. |
void |
setDirty(boolean dirty)
Sets the dirty state of this input to the given value and sends out a PropertyChangeEvent if the new value differs from the old value. |
void |
setFocus()
Asks this input to take focus within its container (editor). |
protected void |
setMessage(String message)
|
void |
setTitle(String title)
Sets the title which will be used when presenting the compare result. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
public static final String DIRTY_STATE
"DIRTY_STATE"
).
Constructor Detail |
public CompareEditorInput(CompareConfiguration configuration)
CompareEditorInput
which is initialized with the given
compare configuration.
The compare configuration is passed to subsequently created viewers.
configuration
- the compare configurationMethod Detail |
public Object getAdapter(Class adapter)
IAdaptable
null
if
no such object can be found.
getAdapter
in interface IAdaptable
adapter
- the adapter class to look up
null
if this object does not
have an adapter for the given classpublic ImageDescriptor getImageDescriptor()
IEditorInput
getImageDescriptor
in interface IEditorInput
public String getToolTipText()
IEditorInput
The format of the path will vary with each input type. For instance,
if the editor input is of type IFileEditorInput
this method
should return the fully qualified resource path. For editor input of
other types it may be different.
getToolTipText
in interface IEditorInput
public String getName()
IEditorInput
For instance, if the fully qualified input name is
"a\b\MyFile.gif"
, the return value would be just
"MyFile.gif"
.
getName
in interface IEditorInput
public IPersistableElement getPersistable()
null
since this editor cannot be persisted.
getPersistable
in interface IEditorInput
null
because this editor cannot be persistedpublic boolean exists()
false
to indicate that this input
should not appear in the "File Most Recently Used" menu.
exists
in interface IEditorInput
false
protected void setMessage(String message)
public String getMessage()
public String getTitle()
setTitle
.
public void setTitle(String title)
title
- the title to use for the CompareEditorpublic Image getTitleImage()
null
if nonepublic CompareConfiguration getCompareConfiguration()
public void contributeToToolBar(ToolBarManager toolBarManager)
ToolBarManager
.
Subclasses may override to add their own actions.
toolBarManager
- the ToolBarManager
to which to contributepublic void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException
run
in interface IRunnableWithProgress
monitor
- the progress monitor to use to display progress and receive
requests for cancelation
InvocationTargetException
- if the prepareInput
method must propagate a checked exception,
it should wrap it inside an InvocationTargetException
; runtime exceptions are automatically
wrapped in an InvocationTargetException
by the calling context
InterruptedException
- if the operation detects a request to cancel,
using IProgressMonitor.isCanceled()
, it should exit by throwing
InterruptedException
IRunnableContext.run(boolean, boolean, org.eclipse.jface.operation.IRunnableWithProgress)
protected abstract Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException
null
is returned no differences were found and no compare editor needs to be opened.
Progress should be reported to the given progress monitor.
A request to cancel the operation should be honored and acknowledged
by throwing InterruptedException
.
Note: this method is typically called in a modal context thread which doesn't have a Display assigned. Implementors of this method shouldn't therefore allocated any SWT resources in this method.
monitor
- the progress monitor to use to display progress and receive
requests for cancelation
null
if there are no differences
InvocationTargetException
- if the prepareInput
method must propagate a checked exception,
it should wrap it inside an InvocationTargetException
; runtime exceptions are automatically
wrapped in an InvocationTargetException
by the calling context
InterruptedException
- if the operation detects a request to cancel,
using IProgressMonitor.isCanceled()
, it should exit by throwing
InterruptedException
public Object getCompareResult()
run
method. Returns null
if no
differences were found.
prepareInput
or null
if there were no differencespublic Control createContents(Composite parent)
Subclasses may override if they need to change the layout or wiring between panes.
parent
- the parent control under which the control must be created
public void setFocus()
Clients should not call this method but they may override if they implement a different layout with different visual components. Clients are free to call the inherited method.
public Viewer createDiffViewer(Composite parent)
createContents
and returns a DiffTreeViewer
.
Subclasses may override if they need a different viewer.
parent
- the SWT parent control under which to create the viewer's SWT controls
public Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent)
null
can be returned to indicate that no viewer could be found.
This implementation forwards the request to CompareUI.findStructureViewer
.
Subclasses may override to implement a different strategy.
null
public Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent)
null
can be returned to indicate that no viewer could be found.
This implementation forwards the request to CompareUI.findContentViewer
.
Subclasses may override to implement a different strategy.
null
public boolean isSaveNeeded()
true
if there are unsaved changes.
The value returned is the value of the DIRTY_STATE
property of this input object.
Returns true
if this input has unsaved changes,
that is if setDirty(true)
has been called.
Subclasses don't have to override if the functionality provided by
true
if there are changes that need to be savedpublic void setDirty(boolean dirty)
PropertyChangeEvent
if the new value differs from the old value.
dirty
- the dirty state for this compare inputpublic void addPropertyChangeListener(IPropertyChangeListener listener)
IPropertyChangeNotifier
addPropertyChangeListener
in interface IPropertyChangeNotifier
listener
- a property change listenerpublic void removePropertyChangeListener(IPropertyChangeListener listener)
IPropertyChangeNotifier
removePropertyChangeListener
in interface IPropertyChangeNotifier
listener
- a property change listenerpublic void save(IProgressMonitor pm)
public void saveChanges(IProgressMonitor pm) throws CoreException
ISavable.save
on them.
CoreException
|
Eclipse Platform 2.0 |
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |