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 Object implements IFeature
Abstract base class for all features. Prefer extending this class over inheriting interface `IFeature`.

## Constructor Summary

Constructors
Constructor
Description
`AbstractFeature(IFeatureProvider fp)`
Creates a new `AbstractFeature`.

## Method Summary

Modifier and Type
Method
Description
`protected PictogramElement`
`addGraphicalRepresentation(IAreaContext context, 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 Object[]`
`getAllBusinessObjectsForPictogramElement(PictogramElement pe)`
Gets the all business objects for pictogram element.
`protected Object`
`getBusinessObjectForPictogramElement(PictogramElement pe)`
Gets the business object for pictogram element.
`String`
`getDescription()`
Gets the description.
`protected Diagram`
`getDiagram()`
Gets the diagram.
`protected IDiagramBehavior`
`getDiagramBehavior()`
Gets the diagram behavior.
`IFeatureProvider`
`getFeatureProvider()`
Gets the feature provider.
`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, Object businessObject)`
Links the given `PictogramElement` to the given business or domain object.
`protected void`
`link(PictogramElement pe, 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, 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, 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.
`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 Details

### AbstractFeature

public AbstractFeature(IFeatureProvider fp)
Creates a new `AbstractFeature`.

Parameters:
  `fp` - the fp

## Method Details

### 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 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 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 String toString()

Overrides:
  `toString` in class `Object`

### addGraphicalRepresentation

protected PictogramElement addGraphicalRepresentation(IAreaContext context, Object newObject)
Adds the graphical representation.

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

### getAllBusinessObjectsForPictogramElement

protected 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 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, 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, 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, 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, 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