# Class CompareEditor

java.lang.Object
org.eclipse.core.commands.common.EventManager
org.eclipse.ui.part.WorkbenchPart
org.eclipse.ui.part.EditorPart
org.eclipse.compare.internal.CompareEditor

All Implemented Interfaces:
  `EventListener, IAdaptable, IExecutableExtension, IPropertyChangeListener, IEditorPart, IReusableEditor, ISaveablePart, ISaveablesLifecycleListener, ISaveablesSource, IWorkbenchPart, IWorkbenchPart2, IWorkbenchPart3, IWorkbenchPartOrientation`

public class CompareEditor extends EditorPart implements IReusableEditor, ISaveablesSource, IPropertyChangeListener, ISaveablesLifecycleListener
A CompareEditor takes a ICompareEditorInput as input. Most functionality is delegated to the ICompareEditorInput.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`CONFIRM_SAVE_PROPERTY`

### Fields inherited from interface IEditorPart

`PROP_DIRTY, PROP_INPUT`

### Fields inherited from interface IWorkbenchPart

`PROP_TITLE`

## Constructor Summary

Constructors
Constructor
Description
`CompareEditor()`
No-argument constructor required for extension points.

## Method Summary

Modifier and Type
Method
Description
`void`
`createPartControl(Composite parent)`
Creates the SWT controls for this workbench part.
`void`
`dispose()`
The `WorkbenchPart` implementation of this `IWorkbenchPart` method disposes the title image loaded by `setInitializationData`.
`void`
`doSave(IProgressMonitor progressMonitor)`
Saves the contents of this part.
`void`
`doSaveAs()`
Saves the contents of this part to another object.
`IActionBars`
`getActionBars()`
`Saveable[]`
`getActiveSaveables()`
Returns the saveables currently active in the workbench part.
`<T> T`
`getAdapter(Class<T> key)`
Returns an object which is an instance of the given class associated with this object.
`Saveable[]`
`getSaveables()`
Returns the saveables presented by the workbench part.
`void`
`handleLifecycleEvent(SaveablesLifecycleEvent event)`
Handle the given event.
`void`
`init(IEditorSite site, IEditorInput input)`
Initializes this editor with the given editor site and input.
`protected void`
`initializeInBackground(CompareEditorInput cei, boolean hadPreviousInput)`
`boolean`
`isDirty()`
Returns whether the contents of this part have changed since the last save operation.
`boolean`
`isSaveAsAllowed()`
Returns whether the "Save As" operation is supported by this part.
`void`
`propertyChange(PropertyChangeEvent event)`
Notification that a property has changed.
`void`
`refreshActionBarsContributor()`
`void`
`setFocus()`
Asks this part to take focus within the workbench.
`void`
`setInput(IEditorInput input)`
Sets the input to this editor.

### Methods inherited from class EditorPart

`checkSite, getEditorInput, getEditorSite, getTitleToolTip, isSaveOnCloseNeeded, setContentDescription, setInitializationData, setInputWithNotify, setPartName`

### Methods inherited from class WorkbenchPart

`addPartPropertyListener, addPropertyListener, firePartPropertyChanged, firePropertyChange, getConfigurationElement, getContentDescription, getDefaultImage, getOrientation, getPartName, getPartProperties, getPartProperty, getSite, getTitle, getTitleImage, removePartPropertyListener, removePropertyListener, setPartProperty, setSite, setTitle, setTitleImage, setTitleToolTip, showBusy`

### Methods inherited from class EventManager

`addListenerObject, clearListeners, getListeners, isListenerAttached, removeListenerObject`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface IEditorPart

`getEditorInput, getEditorSite`

### Methods inherited from interface ISaveablePart

`isSaveOnCloseNeeded`

### Methods inherited from interface IWorkbenchPart

`addPropertyListener, getSite, getTitle, getTitleImage, getTitleToolTip, removePropertyListener`

## Field Details

### CONFIRM_SAVE_PROPERTY

public static final String CONFIRM_SAVE_PROPERTY

See Also:
  - Constant Field Values

## Constructor Details

### CompareEditor

public CompareEditor()
No-argument constructor required for extension points.

## Method Details

### getAdapter

public <T> T getAdapter(Class<T> key)
Description copied from class: `WorkbenchPart`
Returns an object which is an instance of the given class associated with this object. Returns `null` if no such object can be found.

Clients may implement this method but should generally call `Adapters.adapt(Object, Class, boolean)` rather than invoking it directly. Subclasses may override this method (however, if they do so, they should invoke the method on their superclass to ensure that the Platform's adapter manager is consulted).

Specified by:
  `getAdapter` in interface `IAdaptable`
Overrides:
  `getAdapter` in class `WorkbenchPart`
Type Parameters:
  `T` - the class type
Parameters:
  `key` - the adapter class to look up
Returns:
  a object of the given class, or `null` if this object does not have an adapter for the given class

### init

public void init(IEditorSite site, IEditorInput input) throws PartInitException
Description copied from interface: `IEditorPart`
Initializes this editor with the given editor site and input.

This method is automatically called shortly after the part is instantiated. It marks the start of the part's lifecycle. The `IWorkbenchPart.dispose` method will be called automically at the end of the lifecycle. Clients must not call this method.

Implementors of this method must examine the editor input object type to determine if it is understood. If not, the implementor must throw a `PartInitException`

Specified by:
  `init` in interface `IEditorPart`
Specified by:
  `init` in class `EditorPart`
Parameters:
  `site` - the editor site
  `input` - the editor input
Throws:
  `PartInitException` - if this editor was not initialized successfully

### setInput

public void setInput(IEditorInput input)
Description copied from class: `EditorPart`
Sets the input to this editor. This method simply updates the internal member variable.

Unlike most of the other set methods on this class, this method does not fire a property change. Clients that call this method from a subclass must ensure that they fire an IWorkbenchPartConstants.PROP_INPUT property change after calling this method but before leaving whatever public method they are in. Clients that expose this method as public API must fire the property change within their implementation of setInput.

Note that firing a property change may cause listeners to immediately reach back and call methods on this editor. Care should be taken not to fire the property change until the editor has fully updated its internal state to reflect the new input.

Specified by:
  `setInput` in interface `IReusableEditor`
Overrides:
  `setInput` in class `EditorPart`
Parameters:
  `input` - the editor input
See Also:
  - `EditorPart.setInputWithNotify(IEditorInput)`

### refreshActionBarsContributor

public void refreshActionBarsContributor()

### initializeInBackground

protected void initializeInBackground(CompareEditorInput cei, boolean hadPreviousInput)

### getActionBars

public IActionBars getActionBars()

### createPartControl

public void createPartControl(Composite parent)
Description copied from interface: `IWorkbenchPart`
Creates the SWT controls for this workbench part.

Clients should not call this method (the workbench calls this method when it needs to, which may be never).

For implementors this is a multi-step process:

1. Create one or more controls within the parent.
2. Set the parent layout as needed.
3. Register any global actions with the site's `IActionBars`.
4. Register any context menus with the site.
5. Register a selection provider with the site, to make it available to the workbench's `ISelectionService` (optional).

Specified by:
  `createPartControl` in interface `IWorkbenchPart`
Specified by:
  `createPartControl` in class `WorkbenchPart`
Parameters:
  `parent` - the parent control

### dispose

public void dispose()
Description copied from class: `WorkbenchPart`
The `WorkbenchPart` implementation of this `IWorkbenchPart` method disposes the title image loaded by `setInitializationData`. Subclasses may extend.

Specified by:
  `dispose` in interface `IWorkbenchPart`
Overrides:
  `dispose` in class `EditorPart`

### setFocus

public void setFocus()
Description copied from interface: `IWorkbenchPart`
Asks this part to take focus within the workbench. Parts must assign focus to one of the controls contained in the part's parent composite.

Clients should not call this method (the workbench calls this method at appropriate times). To have the workbench activate a part, use `IWorkbenchPage.activate(IWorkbenchPart) instead`.

Specified by:
  `setFocus` in interface `IWorkbenchPart`
Specified by:
  `setFocus` in class `WorkbenchPart`

### isSaveAsAllowed

public boolean isSaveAsAllowed()
Description copied from interface: `ISaveablePart`
Returns whether the "Save As" operation is supported by this part.

Specified by:
  `isSaveAsAllowed` in interface `ISaveablePart`
Specified by:
  `isSaveAsAllowed` in class `EditorPart`
Returns:
  `true` if "Save As" is supported, and `false` if not supported

### doSaveAs

public void doSaveAs()
Description copied from interface: `ISaveablePart`
Saves the contents of this part to another object.

Implementors are expected to open a "Save As" dialog where the user will be able to select a new name for the contents. After the selection is made, the contents should be saved to that new name. During this operation a `IProgressMonitor` should be used to indicate progress.

If the save is successful, the part fires a property changed event reflecting the new dirty state (`PROP_DIRTY` property).

Specified by:
  `doSaveAs` in interface `ISaveablePart`
Specified by:
  `doSaveAs` in class `EditorPart`

### doSave

public void doSave(IProgressMonitor progressMonitor)
Description copied from interface: `ISaveablePart`
Saves the contents of this part.

If the save is successful, the part should fire a property changed event reflecting the new dirty state (`PROP_DIRTY` property).

If the save is cancelled through user action, or for any other reason, the part should invoke `setCancelled` on the `IProgressMonitor` to inform the caller.

This method is long-running; progress and cancellation are provided by the given progress monitor.

Specified by:
  `doSave` in interface `ISaveablePart`
Specified by:
  `doSave` in class `EditorPart`
Parameters:
  `progressMonitor` - the progress monitor

### isDirty

public boolean isDirty()
Description copied from interface: `ISaveablePart`
Returns whether the contents of this part have changed since the last save operation. If this value changes the part must fire a property listener event with `PROP_DIRTY`.

Note: this method is called often on a part open or part activation switch, for example by actions to determine their enabled status.

Specified by:
  `isDirty` in interface `ISaveablePart`
Specified by:
  `isDirty` in class `EditorPart`
Returns:
  `true` if the contents have been modified and need saving, and `false` if they have not changed since the last save

### propertyChange

public void propertyChange(PropertyChangeEvent event)
Description copied from interface: `IPropertyChangeListener`
Notification that a property has changed.

This method gets called when the observed object fires a property change event.

Specified by:
  `propertyChange` in interface `IPropertyChangeListener`
Parameters:
  `event` - the property change event object describing which property changed and how

### getSaveables

public Saveable[] getSaveables()
Description copied from interface: `ISaveablesSource`
Returns the saveables presented by the workbench part. If the return value of this method changes during the lifetime of this part (i.e. after initialization and control creation but before disposal) the part must notify an implicit listener using `ISaveablesLifecycleListener.handleLifecycleEvent(SaveablesLifecycleEvent)`.

Additions of saveables to the list of saveables of this part are announced using an event of type `SaveablesLifecycleEvent.POST_OPEN`. Removals are announced in a two-stage process, first using an event of type `SaveablesLifecycleEvent.PRE_CLOSE` followed by an event of type `SaveablesLifecycleEvent.POST_CLOSE`. Since firing the `PRE_CLOSE` event may trigger prompts to save dirty saveables, the cancellation status of the event must be checked by the part after the notification. When removing only non-dirty saveables, `POST_CLOSE` notification is sufficient.

The listener is obtained from the part site by calling `partSite.getService(ISaveablesLifecycleListener.class)`.

The part must not notify from its initialization methods (e.g. `init` or `createPartControl`), or from its dispose method. Parts that implement `IReusableEditor` must notify when their input is changed through `IReusableEditor.setInput(IEditorInput)`.

Specified by:
  `getSaveables` in interface `ISaveablesSource`
Returns:
  the saveables presented by the workbench part
See Also:
  - `ISaveablesLifecycleListener`

### getActiveSaveables

public Saveable[] getActiveSaveables()
Description copied from interface: `ISaveablesSource`
Returns the saveables currently active in the workbench part.

Certain workbench actions, such as Save, target only the active saveables in the active part. For example, the active saveables could be determined based on the current selection in the part.

Specified by:
  `getActiveSaveables` in interface `ISaveablesSource`
Returns:
  the saveables currently active in the workbench part

### handleLifecycleEvent

public void handleLifecycleEvent(SaveablesLifecycleEvent event)
Description copied from interface: `ISaveablesLifecycleListener`
Handle the given event. This method must be called on the UI thread.

Specified by:
  `handleLifecycleEvent` in interface `ISaveablesLifecycleListener`
Parameters:
  `event` - the event