blob: 313f61a2802aa551eef56d365c334792b6ee1948 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2011 SAP AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* mwenz - Bug 324859 - initial API, implementation and documentation
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.pattern;
import org.eclipse.graphiti.features.IFeature;
import org.eclipse.graphiti.features.context.IContext;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
/**
* This interface can by used by customers and implemented within any pattern to
* signal the need for additional undo or redo work. When a pattern implements
* this interface, and the framework performs an undo or a redo, the framework
* will call the contained methods.
* <p>
* 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 changes (including the changes done to
* the graphical representation (Graphiti {@link PictogramElement}s and
* {@link GraphicsAlgorithm}s will by handled automatically by the Graphiti
* framework no matter if this interface is implemented by a pattern or not.
*
* @since 0.8.0
*/
public interface ICustomUndoablePattern {
/**
* Decides if the processed pattern functionality can be undone.
*
* @param feature
* this is the instance of the {@link IFeature} object that was
* in use when executing the pattern functionality
* @param context
* this is the instance of the {@link IContext} object that was
* in use when executing the feature
*
* @return true if the feature can be undone, false if not
*/
boolean canUndo(IFeature feature, IContext context);
/**
* This method will be called to actually do the work needed for undo.
* Customers may revert their non-EMF changes done by the pattern
* functionality here.
*
* @param feature
* this is the instance of the {@link IFeature} object that was
* in use when executing the pattern functionality
* @param context
* this is the instance of the {@link IContext} object that was
* in use when executing the feature
*/
void undo(IFeature feature, IContext context);
/**
* Decides if the processed pattern functionality can be re-done.
*
* @param feature
* this is the instance of the {@link IFeature} object that was
* in use when executing the pattern functionality
* @param context
* this is the instance of the {@link IContext} object that was
* in use when executing the feature
*
* @return true if the feature can be re-done, false if not
*/
boolean canRedo(IFeature feature, IContext context);
/**
* This method will be called to actually do the work needed for redo.
* Customers may re-apply their non-EMF changes done by the pattern
* functionality here. (Usually it might be sufficient to delegate to the
* execution method of the pattern functionality.)
*
* @param feature
* this is the instance of the {@link IFeature} object that was
* in use when executing the pattern functionality
* @param context
* this is the instance of the {@link IContext} object that was
* in use when executing the feature
*/
void redo(IFeature feature, IContext context);
}