Class 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
    • Method Detail

      • setDiagramContainer

        protected void setDiagramContainer​(IDiagramContainerUI diagramContainer)
        Setter for the associated container displaying the diagram of this behavior. Note that once the container has been set it must not be changed any more.
        Parameters:
        diagramContainer - the diagramContainer to set
        Since:
        0.12
      • initDiagramTypeProvider

        protected IDiagramTypeProvider initDiagramTypeProvider​(Diagram diagram)
        Creates and initializes a new IDiagramTypeProvider for the given Diagram and diagram type provider ID.
        Parameters:
        diagram - The diagram
        providerId - The diagram type provider ID
        Since:
        0.12
      • getDiagramTypeProviderId

        protected java.lang.String getDiagramTypeProviderId​(Diagram diagram)
        Gets the diagram type provider ID for the diagram. The default implementation checks if the input defines one and will use that that, otherwise it will retrieve the ID of the first diagram type provider that is registered for the type of the passed diagram. In case no ID is found this method will set the editor initialization error and throw an AssertionFailedException.
        Parameters:
        diagram - The diagram to find the ID for.
        Since:
        0.12
      • addGefListeners

        protected void addGefListeners()
        Adds the needed GEF listeners after the edit domain is initialized
      • createGraphicalViewer

        protected void createGraphicalViewer​(org.eclipse.swt.widgets.Composite parent)
        Creates the GraphicalViewer on the specified Composite and initializes it.
        Parameters:
        parent - the parent composite
      • configureGraphicalViewer

        protected void configureGraphicalViewer()
        Called to configure the behavior viewer, 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 IConfigurationProvider.
        See Also:
        GraphicalEditor.configureGraphicalViewer()
      • initializeGraphicalViewer

        protected void initializeGraphicalViewer()
        Called to initialize the behavior viewer with its content. Here everything is done, which is dependent of the IConfigurationProvider.
        See Also:
        GraphicalEditorWithFlyoutPalette.initializeGraphicalViewer()
      • createPaletteDropTargetListener

        protected org.eclipse.jface.util.TransferDropTargetListener createPaletteDropTargetListener()
        Creates the drop target listener that is used for adding new objects from the palette via drag and drop. Clients may change the default behavior by providing their own drop target listener or disable drag and drop from the palette by returning null.
        Returns:
        An instance of the TransferDropTargetListener that handles dropping new objects from the palette or null to disable dropping from the palette.
        Since:
        0.10
      • createBusinessObjectDropTargetListeners

        protected java.util.List<org.eclipse.jface.util.TransferDropTargetListener> createBusinessObjectDropTargetListeners()
        Creates a list of drop target listeners that enable dropping domain objects into the diagram, e.g. from the project explorer. By adding additional listeners other sources may be enabled, simply returning an empty list will disable drag and drop into the editor.
        Returns:
        a List containing all the TransferDropTargetListener that shall be registered in the editor.
        Since:
        0.10
      • getEditorInitializationError

        protected java.lang.String getEditorInitializationError()
        Returns the error text of the error that occurred while initializing this behavior and its components. In case this method reports the error text and error UI may be shown instead of the normal diagram viewer.
        Returns:
        The error text in case an error has occurred, null otherwise
      • setEditorInitializationError

        protected void setEditorInitializationError​(java.lang.String editorInitializationError)
        Sets the error text for an error that occured during the initialization of this DiagramEditor. Setting a non-null value indicates an error has occurred, setting null indicates everything went fine.
        Parameters:
        editorInitializationError - The error message
        Since:
        0.12
      • createErrorPartControl

        protected void createErrorPartControl​(org.eclipse.swt.widgets.Composite parent)
        Creates the default error page in case an error occurred while initializing this behavior.
        Parameters:
        parent - The parent Composite to add the UI to
      • isDirty

        protected boolean isDirty()
        Returns the dirty state of this behavior object
        Returns:
        true in case the stored saved command is different from the next undo command.
      • createPaletteViewerProvider

        protected final org.eclipse.gef.ui.palette.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 org.eclipse.gef.ui.palette.FlyoutPaletteComposite.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 org.eclipse.gef.palette.PaletteRoot getPaletteRoot()
        Returns the PaletteRoot to use in the GEF editor by delegating to DefaultPaletteBehavior.getPaletteRoot().
        Returns:
        the PaletteRoot to use
      • 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
      • 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
      • 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.
      • editingDomainInitialized

        protected void editingDomainInitialized()
        Hook that is called by the holder of the TransactionalEditingDomain (DefaultUpdateBehavior or a subclass of it) after the editing domain has been initialized. Can be used to e.g. register additional listeners on the domain.
        The default implementation notifies the marker behavior extension to register its listeners.
      • 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
      • 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.
      • 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
      • createContextMenuProvider

        protected org.eclipse.gef.ContextMenuProvider createContextMenuProvider()
        Returns a new ContextMenuProvider. Clients can return null, if no context-menu shall be displayed.
        Returns:
        A new instance of ContextMenuProvider.
      • shouldRegisterContextMenu

        protected boolean shouldRegisterContextMenu()
        Allows subclasses to prevent that the diagram context menu should be registered for extensions at Eclipse. By default others can provide extensions to the menu (default return value of this method is true). By returning false any extension of the context menu can be prevented.

        For details see Bugzilla 345347 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=345347).

        Returns:
        true in case extensions shall be allowed (default), false otherwise.
        Since:
        0.9
      • registerAction

        protected void registerAction​(org.eclipse.jface.action.IAction action)
        Registers the given action with the Eclipse ActionRegistry.
        Parameters:
        action - the action to register
        Since:
        0.9
      • initActionRegistry

        protected void initActionRegistry​(org.eclipse.gef.editparts.ZoomManager zoomManager)
        Initializes the action registry with the predefined actions (update, remove, delete, copy, paste, zooming, direct editing, alignment and toggling actions for the diagram grip and hiding of the context button pad.
        Parameters:
        zoomManager - the GEF zoom manager to use
      • getCommonKeyHandler

        protected org.eclipse.gef.KeyHandler getCommonKeyHandler()
        Returns the KeyHandler with common bindings to be used for both the Outline and the Graphical Viewer.
        Returns:
        The KeyHandler with common bindings for both the Outline and the Graphical Viewer.
        Since:
        0.9
      • unregisterDiagramResourceSetListener

        protected void unregisterDiagramResourceSetListener()
        Hook to unregister the listeners for diagram changes.
        See Also:
        registerDiagramResourceSetListener()
      • unregisterBusinessObjectsListener

        protected void unregisterBusinessObjectsListener()
        Hook that is called to unregister the listeners for changes of the business objects (domain objects).
        See Also:
        registerBusinessObjectsListener()
      • registerDiagramResourceSetListener

        protected void registerDiagramResourceSetListener()
        Hook to register listeners for diagram changes. The listener will be notified with all events and has to filter for the ones regarding the diagram.
        Note that additional listeners registered here should also be unregistered in unregisterDiagramResourceSetListener().
      • registerBusinessObjectsListener

        protected void registerBusinessObjectsListener()
        Hook that is called to register listeners for changes of the business objects (domain objects) in the resource set of the editor. The default implementation registers the DomainModelChangeListener.
        Note that additional listeners registered here should also be unregistered in unregisterBusinessObjectsListener().
      • setDiagramEditorInput

        protected void setDiagramEditorInput​(IDiagramEditorInput diagramEditorInput)
        Setter for the field storing the editor input.
        Parameters:
        diagramEditorInput - The new input
        Since:
        0.12
      • disposeBeforeGefDispose

        protected void disposeBeforeGefDispose()
        The part of the dispose that should happen before the GEF dispose. Disposes this DiagramBehavior 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!
      • disposeAfterGefDispose

        protected void disposeAfterGefDispose()
        The part of the dispose that should happen after the GEF dispose. Empties the command stack of the edit domain. Always delegate to super.dispose() in case you override this method!
      • migrateDiagramModelIfNecessary

        protected void migrateDiagramModelIfNecessary()
        We provide migration from 0.8.0 to 0.9.0. You can override if you want to migrate manually. WARNING: If your diagram is under version control, this method can cause a check out dialog to be opened etc.
        Since:
        0.9
      • 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()
      • setParentPart

        protected void setParentPart​(org.eclipse.ui.IWorkbenchPart parentPart)
        Sets the parent IWorkbenchPart for this behavior. Can be used to embed this behavior in various UIs.
        Parameters:
        parentPart -
      • getParentPart

        protected org.eclipse.ui.IWorkbenchPart getParentPart()
        Returns the parent IWorkbenchPart this behavior is embedded into. May be null in case the behavior is embedded in a non part UI, like a popup.
        Returns:
        The parent IWorkbenchPart or null in case it does not exist
      • createResourceManager

        protected org.eclipse.jface.resource.ResourceManager createResourceManager()
        Creates a new instance of a ResourceManager implementation.

        By default this creates a LocalResourceManager instance. Subclasses may override this method to enforce the usage of another implementation.

        Returns:
        A new instance of a ResourceManager.
        Since:
        0.14
      • 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