Package org.eclipse.graphiti.pattern

## Interface ICustomUndoRedoPattern

All Known Subinterfaces:
  `ICustomAbortableUndoRedoPattern`

    public interface ICustomUndoRedoPattern

This interface can by used and implemented by customers within any pattern to signal the need for additional work that needs to be done before or after undo and redo. When a pattern implements this interface, and the framework performs an undo or a redo, the framework will call the contained methods.

Implementing this interface is especially helpful if customers want to implement undo/redo functionality for non-EMF changes, e.g. for non-EMF domain models. Note that any EMF-model change (including the changes done to the graphical representation (Graphiti `PictogramElement`s and `GraphicsAlgorithm`s will by handled automatically by the Graphiti framework no matter if this interface is implemented by a pattern or not. The pattern may use the context and feature objects (e.g. the contained properties set) passed to the contained methods while executing the pattern in order to collect any information needed for undo.

In case you want to cancel undo/redo operations in `#preUndo(IContext)`/`#preRedo(IContext)`, you need to implement `ICustomAbortableUndoRedoPattern` which offers an `ICustomAbortableUndoRedoPattern.isAbort()` method that causes the cancellation of undo/redo operation in case `true` is returned.

Since:
  0.12
See Also:
  `ICustomAbortableUndoRedoPattern`

### Method Summary

All Methods Instance Methods Abstract Methods
`boolean` `canRedo​(IFeature feature, IContext context)` Decides if the processed feature can be re-done.
`boolean` `canUndo​(IFeature feature, IContext context)` Decides if the changes done by a processed pattern functionality can be undone.
`void` `postRedo​(IFeature feature, IContext context)` This method will be called by the Graphiti framework after the EMF undo has finished.
`void` `postUndo​(IFeature feature, IContext context)` This method will be called by the Graphiti framework after the EMF undo is finished.
`void` `preRedo​(IFeature feature, IContext context)` This method will be called by the Graphiti framework before the EMF undo has triggered.
`void` `preUndo​(IFeature feature, IContext context)` This method will be called by the Graphiti framework before the EMF undo is triggered.

### Method Detail

#### canUndo

    boolean canUndo​(IFeature feature,
                    IContext context)

Decides if the changes done by a processed pattern functionality can be undone. This method is called once by the Graphiti framework just before any undo work is started, e.g. before `#preUndo(IContext)`.

Note that as soon as any pattern reports `false` here, also all previous entries in the command stack are no longer reachable for undo.

Parameters:
  `feature` - this is the instance of the `IFeature` object that was in use when executing the pattern functionality
  `context` - this is the instance of the `IContext` object that was in use when executing the feature.
Returns:
  true if the feature can be undone, false if not

#### preUndo

    void preUndo​(IFeature feature,
                 IContext context)

This method will be called by the Graphiti framework before the EMF undo is triggered. Customers may revert their non-EMF changes done by the pattern functionality here or in `#postUndo(IContext)`.

Parameters:
  `feature` - this is the instance of the `IFeature` object that was in use when executing the pattern functionality
  `context` - this is the instance of the `IContext` object that was in use when executing the feature

#### postUndo

    void postUndo​(IFeature feature,
                  IContext context)

This method will be called by the Graphiti framework after the EMF undo is finished. Customers may revert their non-EMF changes done by the pattern functionality here or in `#preUndo(IContext)`.

Parameters:
  `feature` - this is the instance of the `IFeature` object that was in use when executing the pattern functionality
  `context` - this is the instance of the `IContext` object that was in use when executing the feature

#### canRedo

    boolean canRedo​(IFeature feature,
                    IContext context)

Decides if the processed feature can be re-done. This method is called once by the Graphiti framework just before any redo work is started, e.g. before `#preRedo(IContext)`.

Note that as soon as any pattern reports `false` here, also all consecutive entries in the command stack are no longer reachable for redo.

Parameters:
  `feature` - this is the instance of the `IFeature` object that was in use when executing the pattern functionality
  `context` - this is the instance of the `IContext` object that was in use when executing the feature
Returns:
  true if the feature can be re-done, false if not

#### preRedo

    void preRedo​(IFeature feature,
                 IContext context)

This method will be called by the Graphiti framework before the EMF undo has triggered. Customers may re-apply their non-EMF changes done by the pattern functionality here or in `#postRedo(IContext)`. (Usually it might be sufficient to delegate to the execution method of the feature.)

Parameters:
  `feature` - this is the instance of the `IFeature` object that was in use when executing the pattern functionality
  `context` - this is the instance of the `IContext` object that was in use when executing the feature

#### postRedo

    void postRedo​(IFeature feature,
                  IContext context)

This method will be called by the Graphiti framework after the EMF undo has finished. Customers may re-apply their non-EMF changes done by the pattern functionality here or in `#preRedo(IContext)`. (Usually it might be sufficient to delegate to the execution method of the feature.)

Parameters:
  `feature` - this is the instance of the `IFeature` object that was in use when executing the pattern functionality
  `context` - this is the instance of the `IContext` object that was in use when executing the feature