org.eclipse.graphiti.ui.editor

## Class DiagramBehavior

- java.lang.Object
- - org.eclipse.graphiti.ui.editor.DiagramBehavior

All Implemented Interfaces:
  IDiagramBehavior, IDiagramBehaviorUI

    public class DiagramBehavior
    extends java.lang.Object
    implements IDiagramBehaviorUI

Provides the common functionality needed to display and manage diagrams. Diagrams can be displayed either in a simple SWT `Composite`, in a `ViewPart` or in an `IEditorPart`, so it's not possible to provide common functionality through sub-classing.

Since:
  0.10

### Constructor Summary

Constructors
Constructor and Description
`DiagramBehavior(IDiagramContainerUI diagramContainer)`

### Method Summary

All Methods Instance Methods Concrete Methods
`org.eclipse.draw2d.geometry.Point` `calculateRealMouseLocation(org.eclipse.draw2d.geometry.Point nativeLocation)` Calculates the mouse location depending on scrollbars and zoom factor.
`void` `disableAdapters()` Should be called (e.g.
`void` `enableAdapters()` Should be called by the various behavior instances after mass EMF resource operations have been triggered (e.g.
`java.lang.Object` `executeFeature(IFeature feature, IContext context)` Executes the given `IFeature` with the given `IContext` in the scope of this `DiagramBehavior`, meaning within its `TransactionalEditingDomain` and on its `CommandStack`.
`java.lang.Object` `getAdapter(java.lang.Class type)` Implements the Eclipse `IAdaptable` interface.
`IConfigurationProvider` `getConfigurationProvider()` Returns the `ConfigurationProvider` for this behavior.
`org.eclipse.gef.EditPart` `getContentEditPart()` Returns the contents `EditPart` of this behavior.
`IDiagramContainerUI` `getDiagramContainer()` Returns the associated container displaying the diagram of this behavior object.
`IDiagramTypeProvider` `getDiagramTypeProvider()` Returns the `IDiagramTypeProvider` instance associated with this `DiagramBehavior`.
`org.eclipse.gef.DefaultEditDomain` `getEditDomain()` Delegation method to retrieve the GEF edit domain also here.
`org.eclipse.emf.transaction.TransactionalEditingDomain` `getEditingDomain()` Returns the EMF `TransactionalEditingDomain` used within this behavior object by delegating to the update behavior extension, by default `DefaultUpdateBehavior.getEditingDomain()`.
`org.eclipse.gef.GraphicalEditPart` `getEditPartForPictogramElement(PictogramElement pe)` Method to retrieve the GEF `EditPart` for a given `PictogramElement`.
`org.eclipse.draw2d.IFigure` `getFigureForPictogramElement(PictogramElement pe)` Method to retrieve the Draw2D `IFigure` for a given `PictogramElement`.
`org.eclipse.draw2d.geometry.Point` `getMouseLocation()` Gets the current mouse location as a `Point`.
`DefaultRefreshBehavior` `getRefreshBehavior()` Returns the instance of the refresh behavior that is used with this behavior.
`org.eclipse.jface.resource.ResourceManager` `getResourceManager()`
`org.eclipse.emf.ecore.resource.ResourceSet` `getResourceSet()` The EMF `ResourceSet` used within this `DiagramBehavior`.
`PictogramElement[]` `getSelectedPictogramElements()` Returns the `PictogramElement`s that are currently selected in the diagram.
`DefaultUpdateBehavior` `getUpdateBehavior()` Returns the instance of the update behavior that is used with this behavior.
`double` `getZoomLevel()` Returns the zoom level currently used in the diagram.
`boolean` `isAlive()` Checks if this behavior is alive.
`boolean` `isDirectEditingActive()` Returns if direct editing is currently active for this behavior.
`void` `refresh()` Triggers a complete refresh of the behavior visualization (content, title, tooltip, palette and decorators) by delegating to `DefaultRefreshBehavior.refresh()`.
`void` `refreshContent()` Refreshes the content of the editor (what's shown inside the diagram itself).
`void` `refreshPalette()` Refreshes the palette to correctly reflect all available creation tools for the available create features and the currently enabled selection tools.
`void` `refreshRenderingDecorators(PictogramElement pe)` Refreshes the rendering decorators (image decorators and the like) by delegating to `DefaultRefreshBehavior.refreshRenderingDecorators(PictogramElement)` for the given `PictogramElement`.
`void` `selectBufferedPictogramElements()` Triggers the selection for the `PictogramElement`s that are stored for later selection.
`void` `setDirectEditingActive(boolean directEditingActive)` Sets that direct editing is now active in the behavior or not.
`void` `setPictogramElementForSelection(PictogramElement pictogramElement)` Sets one `PictogramElement` for later selection.

### Methods inherited from class java.lang.Object

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

### Constructor Detail

#### DiagramBehavior

    public DiagramBehavior(IDiagramContainerUI diagramContainer)

### Method Detail

#### getDiagramContainer

    public IDiagramContainerUI getDiagramContainer()

Returns the associated container displaying the diagram of this behavior object.

Specified by:
  `getDiagramContainer` in interface `IDiagramBehavior`
Returns:
  The associated `IDiagramContainerUI` instance.

#### getUpdateBehavior

    public DefaultUpdateBehavior getUpdateBehavior()

Returns the instance of the update behavior that is used with this behavior. To change the behavior override `createUpdateBehavior()` .

Returns:
  the used instance of the marker behavior, by default a `DefaultUpdateBehavior`.

#### getRefreshBehavior

    public DefaultRefreshBehavior getRefreshBehavior()

Returns the instance of the refresh behavior that is used with this behavior. To change the behavior override `createRefreshBehavior()` .

Returns:
  the used instance of the refresh behavior, by default a `DefaultRefreshBehavior`.

#### refresh

    public void refresh()

Triggers a complete refresh of the behavior visualization (content, title, tooltip, palette and decorators) by delegating to `DefaultRefreshBehavior.refresh()`.

Specified by:
  `refresh` in interface `IDiagramBehavior`

#### refreshRenderingDecorators

    public void refreshRenderingDecorators(PictogramElement pe)

Refreshes the rendering decorators (image decorators and the like) by delegating to `DefaultRefreshBehavior.refreshRenderingDecorators(PictogramElement)` for the given `PictogramElement`.

Specified by:
  `refreshRenderingDecorators` in interface `IDiagramBehavior`
Parameters:
  `pe` - the `PictogramElement` for which the decorators shall be refreshed.

#### refreshPalette

    public void refreshPalette()

Refreshes the palette to correctly reflect all available creation tools for the available create features and the currently enabled selection tools.

Specified by:
  `refreshPalette` in interface `IDiagramBehavior`

#### refreshContent

    public void refreshContent()

Refreshes the content of the editor (what's shown inside the diagram itself).

Specified by:
  `refreshContent` in interface `IDiagramBehavior`

#### getSelectedPictogramElements

    public PictogramElement[] getSelectedPictogramElements()

Returns the `PictogramElement`s that are currently selected in the diagram.

Returns:
  an array of `PictogramElement`s.

#### setPictogramElementForSelection

    public void setPictogramElementForSelection(PictogramElement pictogramElement)

Sets one `PictogramElement` for later selection.

The methods `getPictogramElementsForSelection()`, `setPictogramElementForSelection(PictogramElement)`, `setPictogramElementsForSelection(PictogramElement[])` and `selectBufferedPictogramElements()` offer the possibility to use a deferred selection mechanism: via the setters, `PictogramElement`s can be stored for a selection operation that is triggered lateron during a general refresh via the method `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.

Parameters:
  `pictogramElement` - the `PictogramElement` that shall be stored for later selection

#### selectBufferedPictogramElements

    public void selectBufferedPictogramElements()

Triggers the selection for the `PictogramElement`s that are stored for later selection. Can be called e.g during a general refresh of the editor or after another operation needing another selection is finished (an example in the framework is direct editing).

The methods `getPictogramElementsForSelection()`, `setPictogramElementForSelection(PictogramElement)`, `setPictogramElementsForSelection(PictogramElement[])` and `selectBufferedPictogramElements()` offer the possibility to use a deferred selection mechanism: via the setters, `PictogramElement`s can be stored for a selection operation that is triggered later on during a general refresh via the method `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.

#### getEditingDomain

    public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain()

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

Specified by:
  `getEditingDomain` in interface `IDiagramBehavior`
Returns:
  the `TransactionalEditingDomain` instance used in the behavior

#### getResourceSet

    public org.eclipse.emf.ecore.resource.ResourceSet getResourceSet()

The EMF `ResourceSet` used within this `DiagramBehavior`. The resource set is always associated in a 1:1 relation to the `TransactionalEditingDomain`.

Returns:
  the resource set used within this behavior object

#### getDiagramTypeProvider

    public IDiagramTypeProvider getDiagramTypeProvider()

Returns the `IDiagramTypeProvider` instance associated with this `DiagramBehavior`. There is always a 1:1 relation between the behavior and the provider.

Returns:
  the associated `IDiagramTypeProvider` instance.

#### executeFeature

    public java.lang.Object executeFeature(IFeature feature,
                                           IContext context)

Executes the given `IFeature` with the given `IContext` in the scope of this `DiagramBehavior`, meaning within its `TransactionalEditingDomain` and on its `CommandStack`.

Specified by:
  `executeFeature` in interface `IDiagramBehavior`
Parameters:
  `feature` - the feature to execute
  `context` - the context to use. In case the passed feature is a `IAddFeature` this context needs to be an instance of `IAddContext`, otherwise an `AssertionFailedException` will be thrown.
Returns:
  in case of an `IAddFeature` being passed as feature the newly added `PictogramElement` will be returned (in case the add method returning it), in all other cases `null`
Since:
  0.9

#### disableAdapters

    public void disableAdapters()

Should be called (e.g. by the various behavior instances) before mass EMF resource operations are triggered (e.g. saving all resources). Can be used to disable eventing for performance reasons. See `enableAdapters()` as well.
Important note: make sure that you re-enable eventing using `enableAdapters()` after the operation has finished (best in a finally clause to do that also in case of exceptions), otherwise strange errors may happen.

Since:
  0.12

#### enableAdapters

    public void enableAdapters()

Should be called by the various behavior instances after mass EMF resource operations have been triggered (e.g. saving all resources). Can be used to re-enable eventing after it was disabled for performance reasons. See `disableAdapters()` as well.
Must be called after `disableAdapters()` has been called and the operation has finshed (best in a finally clause to also enable the exception case), otherwise strange errors may occur within the editor.

Since:
  0.12

#### isAlive

    public boolean isAlive()

Checks if this behavior is alive.

Returns:
  `true`, if editor contains a model connector and a valid Diagram, `false` otherwise.

#### getAdapter

    public java.lang.Object getAdapter(java.lang.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

#### getConfigurationProvider

    public IConfigurationProvider getConfigurationProvider()

Returns the `ConfigurationProvider` for this behavior. It is mainly a wrapper around various objects that are connected to the diagram behavior.

Returns:
  an `IConfigurationProvider` instance.
Since:
  0.12

#### getContentEditPart

    public org.eclipse.gef.EditPart getContentEditPart()

Returns the contents `EditPart` of this behavior. This is the topmost EditPart in the `GraphicalViewer`.

Returns:
  The contents `EditPart` of this behavior.

#### getEditPartForPictogramElement

    public org.eclipse.gef.GraphicalEditPart getEditPartForPictogramElement(PictogramElement pe)

Method to retrieve the GEF `EditPart` for a given `PictogramElement`.

Specified by:
  `getEditPartForPictogramElement` in interface `IDiagramBehaviorUI`
Parameters:
  `pe` - the `PictogramElement` to retrieve the GEF representation for
Returns:
  the GEF `GraphicalEditPart` that represents the given `PictogramElement`.

#### getMouseLocation

    public org.eclipse.draw2d.geometry.Point getMouseLocation()

Gets the current mouse location as a `Point`.

Returns:
  the mouse location

#### calculateRealMouseLocation

    public org.eclipse.draw2d.geometry.Point calculateRealMouseLocation(org.eclipse.draw2d.geometry.Point nativeLocation)

Calculates the mouse location depending on scrollbars and zoom factor.

Specified by:
  `calculateRealMouseLocation` in interface `IDiagramBehaviorUI`
Parameters:
  `nativeLocation` - the native location given as `Point`
Returns:
  the `Point` of the real mouse location

#### isDirectEditingActive

    public boolean isDirectEditingActive()

Returns if direct editing is currently active for this behavior.

Returns:
  `true` in case direct editing is currently active within this editor, `false` otherwise.

#### setDirectEditingActive

    public void setDirectEditingActive(boolean directEditingActive)

Sets that direct editing is now active in the behavior or not. Note that this flag set to `true` does not actually start direct editing it is simply an indication that prevents certain operations from running (e.g. refresh)

Parameters:
  `directEditingActive` - `true` to set the flag to direct editing currently active, `false` otherwise.

#### getZoomLevel

    public double getZoomLevel()

Returns the zoom level currently used in the diagram.

Returns:
  the zoom level

#### getFigureForPictogramElement

    public org.eclipse.draw2d.IFigure getFigureForPictogramElement(PictogramElement pe)

Method to retrieve the Draw2D `IFigure` for a given `PictogramElement`.

Specified by:
  `getFigureForPictogramElement` in interface `IDiagramBehaviorUI`
Parameters:
  `pe` - the `PictogramElement` to retrieve the Draw2D representation for
Returns:
  the Draw2D `IFigure` that represents the given `PictogramElement`.

#### getEditDomain

    public org.eclipse.gef.DefaultEditDomain getEditDomain()

Delegation method to retrieve the GEF edit domain also here. Simply delegates to the container.

Specified by:
  `getEditDomain` in interface `IDiagramBehaviorUI`
Returns:
  The GEF edit domain used used in the container
See Also:
  `GraphicalEditor.getEditDomain()`

#### getResourceManager

    public org.eclipse.jface.resource.ResourceManager getResourceManager()

Returns:
  the JFace `ResourceManager` to be used to create images, fonts etc for an open diagram.
Since:
  0.14