Package org.eclipse.graphiti.features.impl

## Class AbstractFeature

- java.lang.Object
- - org.eclipse.graphiti.features.impl.AbstractFeature

All Implemented Interfaces:
  `IFeature`, `IFeatureProviderHolder`, `IDescription`, `IName`

Direct Known Subclasses:
  `AbstractAddFeature`, `AbstractCopyFeature`, `AbstractCreateConnectionFeature`, `AbstractCreateFeature`, `AbstractCustomFeature`, `AbstractDirectEditingFeature`, `AbstractLayoutFeature`, `AbstractMoveShapeFeature`, `AbstractPasteFeature`, `AbstractPrintFeature`, `AbstractSaveImageFeature`, `AbstractUpdateFeature`, `DefaultAddBendpointFeature`, `DefaultDeleteFeature`, `DefaultMoveAnchorFeature`, `DefaultMoveBendpointFeature`, `DefaultMoveConnectionDecoratorFeature`, `DefaultReconnectionFeature`, `DefaultRemoveBendpointFeature`, `DefaultRemoveFeature`, `DefaultResizeShapeFeature`, `ReconnectionFeatureForPattern`

    public abstract class AbstractFeature
    extends java.lang.Object
    implements IFeature

Abstract base class for all features. Prefer extending this class over inheriting interface `IFeature`.

### Constructor Summary

Constructors
`AbstractFeature​(IFeatureProvider fp)` Creates a new `AbstractFeature`.

### Method Summary

All Methods Instance Methods Concrete Methods
`protected PictogramElement` `addGraphicalRepresentation​(IAreaContext context, java.lang.Object newObject)` Adds the graphical representation.
`boolean` `canUndo​(IContext context)` Decides if the current feature can be undone - this is the undo of the execute operation.
`protected java.lang.Object[]` `getAllBusinessObjectsForPictogramElement​(PictogramElement pe)` Gets the all business objects for pictogram element.
`protected java.lang.Object` `getBusinessObjectForPictogramElement​(PictogramElement pe)` Gets the business object for pictogram element.
`java.lang.String` `getDescription()` Gets the description.
`protected Diagram` `getDiagram()` Gets the diagram.
`protected IDiagramBehavior` `getDiagramBehavior()` Gets the diagram behavior.
`IFeatureProvider` `getFeatureProvider()` Gets the feature provider.
`java.lang.String` `getName()` Gets the name.
`protected IProgress` `getProgressCallback()` Gets the progress callback.
`protected boolean` `getUserDecision()` Gets the user decision.
`boolean` `hasDoneChanges()` Is queried by the framework after a feature has been executed to find out if this feature should appear in the undo stack of e.g.
`boolean` `isAvailable​(IContext context)` Decides if the current feature is available with the given context.
`protected IReason` `layoutPictogramElement​(PictogramElement pe)` Layouts the given `PictogramElement`.
`protected void` `link​(PictogramElement pe, java.lang.Object businessObject)` Links the given `PictogramElement` to the given business or domain object.
`protected void` `link​(PictogramElement pe, java.lang.Object[] businessObjects)` Links the given `PictogramElement` to the given business or domain objects.
`protected Color` `manageColor​(int red, int green, int blue)` Manage color.
`protected Color` `manageColor​(IColorConstant colorConstant)` Manage color.
`protected Font` `manageDefaultFont​(Diagram diagram)` Provides the font instance for the default font (Arial in size 8) by either creating a new one and aggregating it to the diagram or finding it in the diagrams list of fonts.
`Font` `manageFont​(Diagram diagram, java.lang.String name, int size)` Provides a font instance by either creating a new one and aggregating it to the diagram or finding it in the diagrams list of fonts.
`Font` `manageFont​(Diagram diagram, java.lang.String name, int size, boolean isItalic, boolean isBold)` Provides a font instance by either creating a new one and aggregating it to the diagram or finding it in the diagrams list of fonts.
`void` `setProgressCallback​(IProgress progress)` Sets the progress callback.
`java.lang.String` `toString()`
`protected void` `updatePictogramElement​(PictogramElement pe)` Updates the given pictogram element.

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

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

### Methods inherited from interface org.eclipse.graphiti.features.IFeature

`canExecute, execute`

### Constructor Detail

#### AbstractFeature

    public AbstractFeature​(IFeatureProvider fp)

Creates a new `AbstractFeature`.

Parameters:
  `fp` - the fp

### Method Detail

#### canUndo

    public boolean canUndo​(IContext context)

Description copied from interface: `IFeature`
Decides if the current feature can be undone - this is the undo of the execute operation.

Specified by:
  `canUndo` in interface `IFeature`
Parameters:
  `context` - this is the general input for this method
Returns:
  true if the feature can be undone, false if not
See Also:
  `IContext`

#### hasDoneChanges

    public boolean hasDoneChanges()

Description copied from interface: `IFeature`
Is queried by the framework after a feature has been executed to find out if this feature should appear in the undo stack of e.g. an editor. By default all features should appear there (see implementation in `AbstractFeature`), but features may decide to override this behavior. Note that this is a dynamic attribute of the feature that is queried each time after the feature has been executed.

IMPORTANT NOTE: The implementor of the feature is responsible for correctly implementing this method! It might lead to inconsistencies in the command stack if this method returns `false` although the feature did changes.

Specified by:
  `hasDoneChanges` in interface `IFeature`
Returns:
  `true` if the feature should appear in the undo stack, `false` otherwise

#### getDescription

    public java.lang.String getDescription()

Description copied from interface: `IDescription`
Gets the description.

Specified by:
  `getDescription` in interface `IDescription`
Returns:
  the description

#### getFeatureProvider

    public IFeatureProvider getFeatureProvider()

Description copied from interface: `IFeatureProviderHolder`
Gets the feature provider.

Specified by:
  `getFeatureProvider` in interface `IFeatureProviderHolder`
Returns:
  the feature provider

#### getName

    public java.lang.String getName()

Description copied from interface: `IName`
Gets the name.

Specified by:
  `getName` in interface `IName`
Returns:
  the name

#### isAvailable

    public boolean isAvailable​(IContext context)

Description copied from interface: `IFeature`
Decides if the current feature is available with the given context.

Specified by:
  `isAvailable` in interface `IFeature`
Parameters:
  `context` - this is the general input for this method
Returns:
  true if it is available, false if not
See Also:
  `IContext`

#### setProgressCallback

    public void setProgressCallback​(IProgress progress)

Sets the progress callback.

Parameters:
  `progress` - the new progress callback

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### addGraphicalRepresentation

    protected PictogramElement addGraphicalRepresentation​(IAreaContext context,
                                                          java.lang.Object newObject)

Adds the graphical representation.

Parameters:
  `context` - the context
  `newObject` - the new object
Returns:
  the added pictogram element

#### getAllBusinessObjectsForPictogramElement

    protected java.lang.Object[] getAllBusinessObjectsForPictogramElement​(PictogramElement pe)

Gets the all business objects for pictogram element.

Parameters:
  `pe` - the pe
Returns:
  the all business objects for pictogram element

#### getBusinessObjectForPictogramElement

    protected java.lang.Object getBusinessObjectForPictogramElement​(PictogramElement pe)

Gets the business object for pictogram element.

Parameters:
  `pe` - the pe
Returns:
  the business object for pictogram element

#### getDiagram

    protected Diagram getDiagram()

Gets the diagram.

Returns:
  the diagram

#### getDiagramBehavior

    protected IDiagramBehavior getDiagramBehavior()

Gets the diagram behavior.

Returns:
  the diagram behavior
Since:
  0.10

#### getProgressCallback

    protected IProgress getProgressCallback()

Gets the progress callback.

Returns:
  the progress callback

#### getUserDecision

    protected boolean getUserDecision()

Gets the user decision.

Returns:
  the user decision

#### layoutPictogramElement

    protected IReason layoutPictogramElement​(PictogramElement pe)

Layouts the given `PictogramElement`. This implementation asks the feature provider for available layout features and processes the first one.

Parameters:
  `pe` - the `PictogramElement` to layout
Returns:
  a `IReason` object that indicates if a layout operation has been performed (`IReason.toBoolean()` is `true`)
Since:
  0.9 this method returns now the `IReason` object, before it simply returned null

#### link

    protected void link​(PictogramElement pe,
                        java.lang.Object businessObject)

Links the given `PictogramElement` to the given business or domain object. After doing that, the domain object can be retrieved from the `PictogramElement` using the methods `getBusinessObjectForPictogramElement(PictogramElement)` and `getAllBusinessObjectsForPictogramElement(PictogramElement)`; also `ILinkService.getPictogramElements(Diagram, org.eclipse.emf.ecore.EObject)` and `ILinkService.getPictogramElements(Diagram, java.util.List, boolean)` will return the `PictogramElement` for the domain object.
Note: Identity of domain or business objects is determined by default using the method `EcoreUtil.equals(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject)` , which relies on the compared EMF objects having different IDs or attributes. The way Graphiti used to compare EMF business objects can be changed by overriding `IToolBehaviorProvider.equalsBusinessObjects(Object, Object)`.

Parameters:
  `pe` - the `PictogramElement` to link to the domain object
  `businessObject` - the business object to link to the `PictogramElement`

#### link

    protected void link​(PictogramElement pe,
                        java.lang.Object[] businessObjects)

Links the given `PictogramElement` to the given business or domain objects. After doing that, the domain object can be retrieved from the `PictogramElement` using the methods `getBusinessObjectForPictogramElement(PictogramElement)` and `getAllBusinessObjectsForPictogramElement(PictogramElement)`; also `ILinkService.getPictogramElements(Diagram, org.eclipse.emf.ecore.EObject)` and `ILinkService.getPictogramElements(Diagram, java.util.List, boolean)` will return the `PictogramElement` for the domain object.
Note: Identity of domain or business objects is determined by default using the method `EcoreUtil.equals(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EObject)` , which relies on the compared EMF objects having different IDs or attributes. The way Graphiti used to compare EMF business objects can be changed by overriding `IToolBehaviorProvider.equalsBusinessObjects(Object, Object)`.

Parameters:
  `pe` - the `PictogramElement` to link to the domain object
  `businessObjects` - the business objects to link to the `PictogramElement`

#### manageColor

    protected Color manageColor​(IColorConstant colorConstant)

Manage color.

Parameters:
  `colorConstant` - the color constant
Returns:
  the color

#### manageColor

    protected Color manageColor​(int red,
                                int green,
                                int blue)

Manage color.

Parameters:
  `red` - the red
  `green` - the green
  `blue` - the blue
Returns:
  the color

#### manageDefaultFont

    protected Font manageDefaultFont​(Diagram diagram)

Provides the font instance for the default font (Arial in size 8) by either creating a new one and aggregating it to the diagram or finding it in the diagrams list of fonts.

Parameters:
  `diagram` - the diagram that aggregates the fonts
Returns:
  the font instance
Since:
  0.10

#### manageFont

    public Font manageFont​(Diagram diagram,
                           java.lang.String name,
                           int size)

Provides a font instance by either creating a new one and aggregating it to the diagram or finding it in the diagrams list of fonts.

Parameters:
  `diagram` - the diagram that aggregates the fonts
  `name` - the name of the font
  `size` - the size of the font
Returns:
  the font instance
Since:
  0.10

#### manageFont

    public Font manageFont​(Diagram diagram,
                           java.lang.String name,
                           int size,
                           boolean isItalic,
                           boolean isBold)

Provides a font instance by either creating a new one and aggregating it to the diagram or finding it in the diagrams list of fonts.

Parameters:
  `diagram` - the diagram that aggregates the fonts
  `name` - the name of the font
  `size` - the size of the font
  `isItalic` - the is italic
  `isBold` - the is bold
Returns:
  the font instance
Since:
  0.10

#### updatePictogramElement

    protected void updatePictogramElement​(PictogramElement pe)

Updates the given pictogram element. This implementation asks the feature provider for available update features and processes the first one.

Parameters:
  `pe` - the pe