## org.eclipse.emf.workspace
Class AbstractResourceUndoContextPolicy

    java.lang.Object
      org.eclipse.emf.workspace.AbstractResourceUndoContextPolicy

All Implemented Interfaces:
  IResourceUndoContextPolicy

    public abstract class AbstractResourceUndoContextPolicy

extends Object
implements IResourceUndoContextPolicy

The default implementation of the resource undo-context policy, suitable for clients to extend/override as required. The default policy is to consider any resource as affected by an operation if either

1. A non-touch `Notification` is received from a contained object or from the resource, itself, or
2. A notification matching (1) is received from a uni-directional `EReference` (i.e., one having no opposite) has an old value or a new value in the resource

In the first case, above, a subclass can choose to include only changes to a resource's contents-list and URI as being significant (other resource properties not affecting the serialization of the resource).

The second case, above, is intended for applications that use `ResourceUndoContext`s to manage the Undo menus of their editors. It is a pessimistic assumption that the referenced resource may either have derived attributes whose values influenced precursor or successor operations, or that such operations are influenced by the references incoming to the resource. Thus, the concern is not so much with the dirty state of the resource as it is with the integrity of the undo history for the associated editor and the dependencies between successive operations. Subclasses can disable this case by overriding the `pessimisticCrossReferences()` method.

Since:
  1.3
See Also:
  `pessimisticCrossReferences()`, `considerAllResourceChanges()`

Field Summary

Fields inherited from interface org.eclipse.emf.workspace.IResourceUndoContextPolicy
`DEFAULT`

Constructor Summary
`protected` `AbstractResourceUndoContextPolicy()` Initializes me.

Method Summary
`protected boolean` `considerAllResourceChanges()` May be overridden by subclasses to consider changes to any feature of a resource, not just its contents-list or URI, as affecting it.
`protected void` `crossResourceReference(Set<org.eclipse.emf.ecore.resource.Resource> resources, org.eclipse.emf.ecore.EObject owner, org.eclipse.emf.common.notify.Notification notification)` Handles notifications that can potentially represent cross-resource references.
`Set<org.eclipse.emf.ecore.resource.Resource>` `getContextResources(IUndoableOperation operation, List<? extends org.eclipse.emf.common.notify.Notification> notifications)` Determines the resources in the undo context of the specified `operation`, during which execution the changes indicated by the given `notifications` occurred.
`protected boolean` `isAbstractChange(org.eclipse.emf.common.notify.Notification notification)` Queries whether the specified `notification` signals an abstract change to a resource, which would potentially put that resource into the operation context.
`protected void` `objectChange(Set<org.eclipse.emf.ecore.resource.Resource> resources, org.eclipse.emf.ecore.EObject object, org.eclipse.emf.common.notify.Notification notification)` Adds to the collection of `resources` any that are affected by the specified `notification` from an `object`.
`protected boolean` `pessimisticCrossReferences()` May be overridden by subclasses to disable pessimistic handling of cross-resource references.
`protected void` `resourceChange(Set<org.eclipse.emf.ecore.resource.Resource> resources, org.eclipse.emf.ecore.resource.Resource resource, org.eclipse.emf.common.notify.Notification notification)` Adds to the collection of `resources` any that are affected by the specified `notification` from a `resource`.
`protected void` `resourceSetChange(Set<org.eclipse.emf.ecore.resource.Resource> resources, org.eclipse.emf.ecore.resource.ResourceSet resourceSet, org.eclipse.emf.common.notify.Notification notification)` Adds to the collection of `resources` any that are affected by the specified `notification` from a `resourceSet`.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### AbstractResourceUndoContextPolicy

    protected AbstractResourceUndoContextPolicy()

  Initializes me.

Method Detail

### getContextResources

    public Set<org.eclipse.emf.ecore.resource.Resource> getContextResources(IUndoableOperation operation,
                                                                            List<? extends org.eclipse.emf.common.notify.Notification> notifications)

  Description copied from interface: `IResourceUndoContextPolicy`
  Determines the resources in the undo context of the specified `operation`, during which execution the changes indicated by the given `notifications` occurred. This operation may be called several times for the same operation, but always with different notifications.

  Specified by:
    `getContextResources` in interface `IResourceUndoContextPolicy`
  Parameters:
    `operation` - the operation. It may or may not have finished executing. Must not be `null`
    `notifications` - a list of notifications of changes caused by the operation during its execution, in the order in which they occurred. This may be an empty list, but never `null`
  Returns:
    the resources that are the undo context of this operation, or an empty list if none. Never ruterns `null`

### isAbstractChange

    protected boolean isAbstractChange(org.eclipse.emf.common.notify.Notification notification)

  Queries whether the specified `notification` signals an abstract change to a resource, which would potentially put that resource into the operation context. Subclasses may override or extend as needed.

  Parameters:
    `notification` - a notification of some concrete change in the resource set
  Returns:
    whether this change is an abstract change to some resource, for the purpose of tracking undo context

### pessimisticCrossReferences

    protected boolean pessimisticCrossReferences()

  May be overridden by subclasses to disable pessimistic handling of cross-resource references. The default implementation returns `true` always.

  Returns:
    whether to consider changes to directed cross-resource references as affecting the referenced resource

### considerAllResourceChanges

    protected boolean considerAllResourceChanges()

  May be overridden by subclasses to consider changes to any feature of a resource, not just its contents-list or URI, as affecting it.

  Returns:
    `true` if all changes to a resource are considered as affecting it for the purposes of undo context; `false` if only the contents-list and URI are

### resourceChange

    protected void resourceChange(Set<org.eclipse.emf.ecore.resource.Resource> resources,
                                  org.eclipse.emf.ecore.resource.Resource resource,
                                  org.eclipse.emf.common.notify.Notification notification)

  Adds to the collection of `resources` any that are affected by the specified `notification` from a `resource`.

  Parameters:
    `resources` - collects the affected resources
    `resource` - a resource that sent a notification
    `notification` - the notification sent by the resource

### objectChange

    protected void objectChange(Set<org.eclipse.emf.ecore.resource.Resource> resources,
                                org.eclipse.emf.ecore.EObject object,
                                org.eclipse.emf.common.notify.Notification notification)

  Adds to the collection of `resources` any that are affected by the specified `notification` from an `object`.

  Parameters:
    `resources` - collects the affected resources
    `object` - a object that sent a notification
    `notification` - the notification sent by the object

### resourceSetChange

    protected void resourceSetChange(Set<org.eclipse.emf.ecore.resource.Resource> resources,
                                     org.eclipse.emf.ecore.resource.ResourceSet resourceSet,
                                     org.eclipse.emf.common.notify.Notification notification)

  Adds to the collection of `resources` any that are affected by the specified `notification` from a `resourceSet`.

  Parameters:
    `resources` - collects the affected resources
    `resourceSet` - a resource set that sent a notification
    `notification` - the notification sent by the resource set

### crossResourceReference

    protected void crossResourceReference(Set<org.eclipse.emf.ecore.resource.Resource> resources,
                                          org.eclipse.emf.ecore.EObject owner,
                                          org.eclipse.emf.common.notify.Notification notification)

  Handles notifications that can potentially represent cross-resource references. Helper to the `objectChange(Set, EObject, Notification)` method.

  Parameters:
    `resources` - collects the affected resources
    `owner` - the owner of the reference that changed
    `notification` - a potential cross-resource reference change notification

Copyright 2002, 2007 IBM Corporation and others. All Rights Reserved.