org.eclipse.graphiti.ui.editor
Class DiagramEditor

java.lang.Object
  extended by GraphicalEditorWithFlyoutPalette
      extended by org.eclipse.graphiti.ui.editor.DiagramEditor
All Implemented Interfaces:
IDiagramContainer, IDiagramContainerUI

public class DiagramEditor
extends GraphicalEditorWithFlyoutPalette
implements IDiagramContainerUI

This is the main class for the Graphiti diagram editor. It represents the editor to Eclipse and therefore implements IEditorPart. The implementation is based upon a GEF editor implementation ( GraphicalEditorWithFlyoutPalette) and enhances it with Graphiti-specific stuff.
This editor is registered as an Eclipse editor using the extension point org.eclipse.ui.editors. Therefore the Eclipse standard methods can be used to open a new diagram editor. The associated IEditorInput object is a subclass of DiagramEditorInput, but using another type of input is also ok as long as it can be adapted to an IFile that can be reolved within the workspace of is a URIEditorInput. These types of input objects will be converted to a corresponding DiagramEditorInput when the editor is initialized (see init(IEditorSite, IEditorInput)).
Any clients extending this class should also contribute their editor to the Eclipse editor extension point to gain full advantage of the Eclipse editor integration of Graphiti.
There are a lot of aspects this class needs to deal with; the larger aspects are separated into other classes which share the lifecycle with the DiagramEditor instance. This means they are instantiated when a new diagram editor is created and exist until the editor is closed again. There are default implementations for all of these aspects, see the Default*Behavior classes in this package. The following aspects are separated:

All the other aspects are dealt with directly within this class. One of the larger aspects implemented here is selection handling, which would have been awkward if separated out.

Since:
0.10

Field Summary
private  String contributorId
           
static String DIAGRAM_EDITOR_ID
          The ID of the DiagramEditor as it is registered with the org.eclipse.ui.editors extension point.
private  DiagramBehavior diagramBehavior
           
 
Fields inherited from interface org.eclipse.graphiti.ui.editor.IDiagramContainerUI
DIAGRAM_CONTEXT_ID
 
Constructor Summary
DiagramEditor()
          Creates a new diagram editor and cares about the creation of the different behavior extensions by delegating to the various create*Behavior() methods.
 
Method Summary
 void close()
          Notify the container that it should shut down or clear it's state.
 void commandStackChanged(EventObject event)
          Notification that the command stack changed.
 void configureGraphicalViewer()
          Called to configure the editor, before it receives its content.
protected  DiagramEditorInput convertToDiagramEditorInput(IEditorInput input)
          Is called by the init(IEditorSite, IEditorInput) method in case the IEditorInput instance passed is no DiagramEditorInput .
protected  DiagramBehavior createDiagramBehavior()
          Creates the behavior object that cares about the common (behavioral) coding shared between editors, views and other composites.
protected  void createGraphicalViewer(Composite parent)
          Creates the GraphicalViewer on the specified Composite and initializes it.
protected  PaletteViewerProvider createPaletteViewerProvider()
          Delegates to the method (or the method in a subclass of) #createPaletteViewerProvider() to create the PaletteViewerProvider used inside the GEF editor.
 void createPartControl(Composite parent)
          Creates the UI of the editor by delegating to the super.createPartControl method.
 void dispose()
          Disposes this DiagramEditor instance and frees all used resources and clears all references.
 void doSave(IProgressMonitor monitor)
          Called to perform the saving of the editor.
 ActionRegistry getActionRegistry()
          Returns the GEF action registry for the container.
 Object getAdapter(Class type)
          Implements the Eclipse IAdaptable interface.
 String getContributorId()
          Returns the ID for contributions in the tabbed property sheets by delegating to the method IToolBehaviorProvider.getContributorId() .
 DiagramBehavior getDiagramBehavior()
          Returns the associated DiagramSupport instance to this editor.
 IDiagramEditorInput getDiagramEditorInput()
          Returns the IDiagramEditorInput instance used for this container.
 IDiagramTypeProvider getDiagramTypeProvider()
          Returns the IDiagramTypeProvider instance associated with this DiagramEditor.
 DefaultEditDomain getEditDomain()
          Returns the GEF edit domain as needed for some of the feature functionality in Graphiti; simply a public rewrite of the GEF editor super method.
 TransactionalEditingDomain getEditingDomain()
          Returns the EMF TransactionalEditingDomain used within this editor by delegating to the update behavior extension, by default DefaultUpdateBehavior.getEditingDomain().
 GraphicalViewer getGraphicalViewer()
          Returns the GEF GraphicalViewer as it is needed in some Graphiti feature implementations.
protected  FlyoutPreferences getPalettePreferences()
          Delegates to the method (or the method in a subclass of) DefaultPaletteBehavior.getPalettePreferences().
protected  PaletteRoot getPaletteRoot()
          Returns the PaletteRoot to use in the GEF editor by delegating to DefaultPaletteBehavior.getPaletteRoot().
 PictogramElement[] getSelectedPictogramElements()
          Returns the PictogramElements that are currently selected in the diagram editor.
 List getSelectionActions()
          Returns the actions used for selection of the parent GEF editor, for an editor based upon the GEF editor this simply returns the standard GEF selection actions by delegating to the super editor class.
 String getTitleToolTip()
          Returns the tooltip that shall be displayed when hovering over the editor title tab.
private  IToolBehaviorProvider getToolBehaviorProvider()
           
 IWorkbenchPart getWorkbenchPart()
          Returns the IWorkbenchPart for this container.
 void hookGraphicalViewer()
          Hooks the GraphicalViewer to be used inside the container.
 void init(IEditorSite site, IEditorInput input)
          Does the initialization of the editor.
 void initializeGraphicalViewer()
          Called to initialize the editor with its content.
 boolean isDirty()
          Returns if the editor is currently dirty and needs to be saved or not.
 void refreshTitle()
          Refreshes the editor title to show the name of the diagram
 void refreshTitleToolTip()
          Refreshes the tooltip displayed for the editor title tab according to what is returned in getTitleToolTip().
 void selectionChanged(IWorkbenchPart part, ISelection selection)
          Handles a selection changed event that is triggered by any selection source, e.g.
 void selectPictogramElements(PictogramElement[] pictogramElements)
          Selects the given PictogramElements in the diagram.
 void setEditDomain(DefaultEditDomain editDomain)
          Sets the GEF edit domain to the container.
 void setFocus()
          Sets the focus by delegating to the super class implementation in the GEF editor and additionally triggers a update of the diagram by delegating to DefaultUpdateBehavior.handleActivate().
 void setGraphicalViewer(GraphicalViewer viewer)
          Sets the GraphicalViewer to be used inside the container.
protected  void setInput(IEditorInput input)
          Sets the given IEditorInput object as the input for this editor.
 void setPictogramElementForSelection(PictogramElement pictogramElement)
          Sets one PictogramElement for later selection.
 void setPictogramElementsForSelection(PictogramElement[] pictogramElements)
          Sets PictogramElements for later selection.
 void updateDirtyState()
          Updates the UI to correctly reflect the dirty state of the editor.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.eclipse.graphiti.ui.editor.IDiagramContainerUI
getSite
 
Methods inherited from interface org.eclipse.graphiti.platform.IDiagramContainer
getTitle
 

Field Detail

contributorId

private String contributorId

diagramBehavior

private DiagramBehavior diagramBehavior

DIAGRAM_EDITOR_ID

public static final String DIAGRAM_EDITOR_ID
The ID of the DiagramEditor as it is registered with the org.eclipse.ui.editors extension point.

See Also:
Constant Field Values
Constructor Detail

DiagramEditor

public DiagramEditor()
Creates a new diagram editor and cares about the creation of the different behavior extensions by delegating to the various create*Behavior() methods.

Method Detail

getDiagramBehavior

public DiagramBehavior getDiagramBehavior()
Returns the associated DiagramSupport instance to this editor.

Specified by:
getDiagramBehavior in interface IDiagramContainer
Specified by:
getDiagramBehavior in interface IDiagramContainerUI
Returns:
The associated DiagramSupport instance
Since:
0.10

init

public void init(IEditorSite site,
                 IEditorInput input)
          throws PartInitException
Does the initialization of the editor. The default implementation cares about:
  1. converting the passed IEditorInput to a DiagramEditorInput. In case this fails, a PartInitException is thrown.
  2. creating the editing domain by delegating to the update behavior extension, see DefaultUpdateBehavior.createEditingDomain(IDiagramEditorInput) for details
  3. initializing the underlying GEF editor by delegating to super
  4. initializing the update behavior extension (the order is important here as this must happen after initializing the GEF editor!)
  5. triggering the migration of diagram data if necessary
Any clients overriding this method have to make sure that they they always call super.init(site, input).

Parameters:
site - the Eclipse IEditorSite that will host this editor
input - the editor input that shall be used. Note that this method will exchange the input instance in case it is no DiagramEditorInput.
Throws:
PartInitException
See Also:
org.eclipse.ui.IEditorPart#init(IEditorSite, IEditorInput)

createDiagramBehavior

protected DiagramBehavior createDiagramBehavior()
Creates the behavior object that cares about the common (behavioral) coding shared between editors, views and other composites. See DiagramBehavior for details and the default implementation. Override to change the behavior.

Returns:
a new instance of DiagramBehavior
Since:
0.10

convertToDiagramEditorInput

protected DiagramEditorInput convertToDiagramEditorInput(IEditorInput input)
                                                  throws PartInitException
Is called by the init(IEditorSite, IEditorInput) method in case the IEditorInput instance passed is no DiagramEditorInput . This method should try to convert the passed input object to a DiagramEditorInput or throw an PartInitException in case the conversion can (or should) not be done for any reason. The default implementation uses the EditorInputAdapter.adaptToDiagramEditorInput(IEditorInput) method to do the conversion. Clients may adapt to do additional conversions or to prohibit any conversion by simply throwing a PartInitException .

Parameters:
input - the original input
Returns:
a DiagramEditorInput corresponding to the passed input instance in case a conversion is possible. This method must not return null, otherwise the editor initialization will fail.
Throws:
PartInitException - in case the passed input object cannot or should not be converted to a DiagramEditorInput instance.
Since:
0.9

setInput

protected void setInput(IEditorInput input)
Sets the given IEditorInput object as the input for this editor. It must be of type DiagramEditorInput otherwise an IllegalArgumentException is thrown.
The default implementation here cares about loading the diagram from the EMF Resource the input points to, sets the ID of the IDiagramTypeProvider for the diagram given in the input, registers listeners (by delegating to #registerDiagramResourceSetListener() and #registerBusinessObjectsListener()) and does the refreshing of the editor UI.

Parameters:
input - the DiagramEditorInput instance to use within this editor.

createPartControl

public void createPartControl(Composite parent)
Creates the UI of the editor by delegating to the super.createPartControl method. The default implementation here also registers the command stack listener to correctly reflect the dirty state of the editor.


createGraphicalViewer

protected void createGraphicalViewer(Composite parent)
Creates the GraphicalViewer on the specified Composite and initializes it. This method needs to be implemented here to fulfill the interface of the underlying GEF editor but only delegates to DiagramSupport#createGraphicalViewer(Composite).

Parameters:
parent - The parent composite

initializeGraphicalViewer

public void initializeGraphicalViewer()
Called to initialize the editor with its content. Here everything is done, which is dependent of the IConfigurationProviderInternal.

Specified by:
initializeGraphicalViewer in interface IDiagramContainerUI
Since:
0.10
See Also:
org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#initializeGraphicalViewer()

configureGraphicalViewer

public void configureGraphicalViewer()
Called to configure the editor, before it receives its content. The default-implementation is for example doing the following: configure the ZoomManager, registering Actions... Here everything is done, which is independent of the IConfigurationProviderInternal.

Specified by:
configureGraphicalViewer in interface IDiagramContainerUI
Since:
0.12
See Also:
org.eclipse.gef.ui.parts.GraphicalEditor#configureGraphicalViewer()

updateDirtyState

public void updateDirtyState()
Updates the UI to correctly reflect the dirty state of the editor. The default implementation does this by firing a IEditorPart#PROP_DIRTY property change.

Specified by:
updateDirtyState in interface IDiagramContainer
Since:
0.9

doSave

public void doSave(IProgressMonitor monitor)
Called to perform the saving of the editor. The default implementation delegates via DiagramSupport to DefaultPersistencyBehavior.saveDiagram(IProgressMonitor).

Specified by:
doSave in interface IDiagramContainer
Parameters:
monitor - the Eclipse progress monitor to report progress with.

isDirty

public boolean isDirty()
Returns if the editor is currently dirty and needs to be saved or not. The default implementation delegates to DiagramSupport#isDirty().

Specified by:
isDirty in interface IDiagramContainer
Returns:
true in case the editor is dirty, false otherwise.

createPaletteViewerProvider

protected final PaletteViewerProvider createPaletteViewerProvider()
Delegates to the method (or the method in a subclass of) #createPaletteViewerProvider() to create the PaletteViewerProvider used inside the GEF editor.

Returns:
the PaletteViewerProvider to use

getPalettePreferences

protected final FlyoutPreferences getPalettePreferences()
Delegates to the method (or the method in a subclass of) DefaultPaletteBehavior.getPalettePreferences(). To change the palette override the behavior there.

Returns:
the PaletteViewerProvider preferences to use.

getPaletteRoot

protected final PaletteRoot getPaletteRoot()
Returns the PaletteRoot to use in the GEF editor by delegating to DefaultPaletteBehavior.getPaletteRoot().

Returns:
the PaletteRoot to use

refreshTitle

public void refreshTitle()
Refreshes the editor title to show the name of the diagram

Specified by:
refreshTitle in interface IDiagramContainer
Since:
0.9

refreshTitleToolTip

public void refreshTitleToolTip()
Refreshes the tooltip displayed for the editor title tab according to what is returned in getTitleToolTip().

Specified by:
refreshTitleToolTip in interface IDiagramContainer
Since:
0.9

getAdapter

public Object getAdapter(Class type)
Implements the Eclipse IAdaptable interface. This implementation first delegates to the IToolBehaviorProvider.getAdapter(Class) method and checks if something is returned. In case the return value is null it returns adapters for ZoomManager, IPropertySheetPage, Diagram, KeyHandler, SelectionSynchronizer and IContextButtonManager. It also delegates to the super implementation in GraphicalEditorWithFlyoutPalette#getAdapter(Class).

Parameters:
type - the type to which shall be adapted
Returns:
the adapter instance

dispose

public void dispose()
Disposes this DiagramEditor instance and frees all used resources and clears all references. Also delegates to all the behavior extensions to also free their resources (e.g. and most important is the TransactionalEditingDomain held by the DefaultPersistencyBehavior. Always delegate to super.dispose() in case you override this method!


setFocus

public void setFocus()
Sets the focus by delegating to the super class implementation in the GEF editor and additionally triggers a update of the diagram by delegating to DefaultUpdateBehavior.handleActivate().


getSelectedPictogramElements

public PictogramElement[] getSelectedPictogramElements()
Returns the PictogramElements that are currently selected in the diagram editor.

Specified by:
getSelectedPictogramElements in interface IDiagramContainer
Returns:
an array of PictogramElements.
Since:
0.9

selectionChanged

public void selectionChanged(IWorkbenchPart part,
                             ISelection selection)
Handles a selection changed event that is triggered by any selection source, e.g. a browser with "Link to Editor" enabled.
Checks if the currently active editor is a MultiPageEditorPart with an opened diagram editor inside, tries to find any PictogramElement for the objects in the selection and selects them in the diagram.
Note that in case of the CommonNavigator as event source, its editor linking mechanism must be enabled.

Parameters:
part - the source IWorkbenchPart that triggered the event
selection - the new selection (mostly a IStructuredSelection instance.
Since:
0.9

selectPictogramElements

public void selectPictogramElements(PictogramElement[] pictogramElements)
Selects the given PictogramElements in the diagram.

Specified by:
selectPictogramElements in interface IDiagramContainer
Parameters:
pictogramElements - an array of PictogramElements to select.
Since:
0.9

setPictogramElementForSelection

public void setPictogramElementForSelection(PictogramElement pictogramElement)
Sets one PictogramElement for later selection.

The methods #getPictogramElementsForSelection(), setPictogramElementForSelection(PictogramElement), setPictogramElementsForSelection(PictogramElement[]) and DiagramSupport#selectBufferedPictogramElements() offer the possibility to use a deferred selection mechanism: via the setters, PictogramElements can be stored for a selection operation that is triggered lateron during a general refresh via the method DiagramSupport#selectBufferedPictogramElements(). This mechanism is used e.g. in the Graphiti framework in direct editing to restore the previous selection, but can also be used by clients.

Specified by:
setPictogramElementForSelection in interface IDiagramContainer
Parameters:
pictogramElement - the PictogramElement that shall be stored for later selection
Since:
0.9

setPictogramElementsForSelection

public void setPictogramElementsForSelection(PictogramElement[] pictogramElements)
Sets PictogramElements for later selection.

The methods #getPictogramElementsForSelection(), setPictogramElementForSelection(PictogramElement), setPictogramElementsForSelection(PictogramElement[]) and DiagramSupport#selectBufferedPictogramElements() offer the possibility to use a deferred selection mechanism: via the setters, PictogramElements can be stored for a selection operation that is triggered lateron during a general refresh via the method DiagramSupport#selectBufferedPictogramElements(). This mechanism is used e.g. in the Graphiti framework in direct editing to restore the previous selection, but can also be used by clients.

Specified by:
setPictogramElementsForSelection in interface IDiagramContainer
Parameters:
pictogramElements - the PictogramElements that shall be stored for later selection
Since:
0.9

getContributorId

public String getContributorId()
Returns the ID for contributions in the tabbed property sheets by delegating to the method IToolBehaviorProvider.getContributorId() .

Returns:
the contributor id as a String
Since:
0.9

getDiagramTypeProvider

public IDiagramTypeProvider getDiagramTypeProvider()
Returns the IDiagramTypeProvider instance associated with this DiagramEditor. There is always a 1:1 relation between the editor and the provider.

Note that this is a pure delegation method. Overrides should happen in DiagramBehavior.

Specified by:
getDiagramTypeProvider in interface IDiagramContainer
Returns:
the associated IDiagramTypeProvider instance.
Since:
0.9

getEditDomain

public DefaultEditDomain getEditDomain()
Returns the GEF edit domain as needed for some of the feature functionality in Graphiti; simply a public rewrite of the GEF editor super method.

Specified by:
getEditDomain in interface IDiagramContainerUI
Returns:
the DefaultEditDomain used in this editor
Since:
0.9
See Also:
GraphicalEditor#getEditDomain()

getGraphicalViewer

public GraphicalViewer getGraphicalViewer()
Returns the GEF GraphicalViewer as it is needed in some Graphiti feature implementations. This is simply a public rewrite of the according super method.

Specified by:
getGraphicalViewer in interface IDiagramContainerUI
Returns:
the GraphicalViewer used within this editor instance
See Also:
GraphicalEditor#getGraphicalViewer()

getTitleToolTip

public String getTitleToolTip()
Returns the tooltip that shall be displayed when hovering over the editor title tab.

Specified by:
getTitleToolTip in interface IDiagramContainer
Returns:
the tooltip as a String

getToolBehaviorProvider

private IToolBehaviorProvider getToolBehaviorProvider()

getEditingDomain

public TransactionalEditingDomain getEditingDomain()
Returns the EMF TransactionalEditingDomain used within this editor by delegating to the update behavior extension, by default DefaultUpdateBehavior.getEditingDomain().

Returns:
the TransactionalEditingDomain instance used in the editor
Since:
0.9

getDiagramEditorInput

public IDiagramEditorInput getDiagramEditorInput()
Description copied from interface: IDiagramContainerUI
Returns the IDiagramEditorInput instance used for this container. Basically it is used as an Eclipse IEditorInput object only in case the container is an editor; for other types of containers the input is simply used as a holder for a URI pointing to a diagram.

Specified by:
getDiagramEditorInput in interface IDiagramContainerUI
Returns:
The input containing the URI for the diagram
Since:
0.10

getWorkbenchPart

public IWorkbenchPart getWorkbenchPart()
Returns the IWorkbenchPart for this container. Since this editor itself is already a part the default implementation simply returns this.

Specified by:
getWorkbenchPart in interface IDiagramContainerUI
Returns:
This part
Since:
0.10

close

public void close()
Description copied from interface: IDiagramContainer
Notify the container that it should shut down or clear it's state.

Specified by:
close in interface IDiagramContainer
Since:
0.10

setEditDomain

public void setEditDomain(DefaultEditDomain editDomain)
Description copied from interface: IDiagramContainerUI
Sets the GEF edit domain to the container. Needed for initializing the container from the DiagramBehavior instance.

Specified by:
setEditDomain in interface IDiagramContainerUI
Parameters:
editDomain - The DefaultEditDomain to set
Since:
0.10
See Also:
GraphicalEditor#setEditDomain()

getActionRegistry

public ActionRegistry getActionRegistry()
Description copied from interface: IDiagramContainerUI
Returns the GEF action registry for the container.

Specified by:
getActionRegistry in interface IDiagramContainerUI
Returns:
The ActionRegistry

getSelectionActions

public List getSelectionActions()
Description copied from interface: IDiagramContainerUI
Returns the actions used for selection of the parent GEF editor, for an editor based upon the GEF editor this simply returns the standard GEF selection actions by delegating to the super editor class.

Specified by:
getSelectionActions in interface IDiagramContainerUI
Returns:
A List containing the selection actions
See Also:
GraphicalEditor#getSelectionActions()

commandStackChanged

public void commandStackChanged(EventObject event)
Description copied from interface: IDiagramContainerUI
Notification that the command stack changed. This might e.g. trigger an update of the dirty state of the container.

Specified by:
commandStackChanged in interface IDiagramContainerUI
Parameters:
event - An event instance describing what happened
See Also:
GraphicalEditor#commandStackChanged(EventObject event)

setGraphicalViewer

public void setGraphicalViewer(GraphicalViewer viewer)
Description copied from interface: IDiagramContainerUI
Sets the GraphicalViewer to be used inside the container. The viewer is created by the DiagramBehavior instance and needs to be set in the GEF container.

Specified by:
setGraphicalViewer in interface IDiagramContainerUI
Parameters:
viewer - The viewer to use.
See Also:
GraphicalEditor#setGraphicalViewer(GraphicalViewer viewer)

hookGraphicalViewer

public void hookGraphicalViewer()
Description copied from interface: IDiagramContainerUI
Hooks the GraphicalViewer to be used inside the container.

Specified by:
hookGraphicalViewer in interface IDiagramContainerUI
See Also:
GraphicalEditor#hookGraphicalViewer(GraphicalViewer viewer)


Copyright (c) SAP AG 2005, 2012.