Package org.eclipse.graphiti.ui.editor

# Class DefaultPersistencyBehavior

java.lang.Object
org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior

public class DefaultPersistencyBehavior extends Object
The default implementation for the `DiagramBehavior` behavior extension that controls the persistence behavior of the Graphiti diagram Editor. Clients may subclass to change the behavior; use `DiagramBehavior.createPersistencyBehavior()` to return the instance that shall be used.
Note that there is always a 1:1 relation with a `DiagramBehavior`.

Since:
  0.9

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected final class`
`DefaultPersistencyBehavior.SaveException`
`protected final class`
`DefaultPersistencyBehavior.SaveOperation`
The workspace operation used to do the actual save.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final DiagramBehavior`
`diagramBehavior`
The associated `DiagramBehavior`
`protected org.eclipse.emf.common.command.Command`
`savedCommand`
Used to store the command that was executed before the editor was saved.

## Constructor Summary

Constructors
Constructor
Description
`DefaultPersistencyBehavior(DiagramBehavior diagramBehavior)`
Creates a new instance of `DefaultPersistencyBehavior` that is associated with the given `DiagramBehavior`.

## Method Summary

Modifier and Type
Method
Description
`protected org.eclipse.jface.operation.IRunnableWithProgress`
`createOperation(Set<org.eclipse.emf.ecore.resource.Resource> savedResources, Map<org.eclipse.emf.ecore.resource.Resource,Map<?,?>> saveOptions)`
Creates the runnable to be used to wrap the actual saving of the EMF `Resource`s.
To only modify the actual saving clients should rather override `#save(TransactionalEditingDomain, Map)`.
`protected Map<org.eclipse.emf.ecore.resource.Resource,Map<?,?>>`
`createSaveOptions()`
Returns the EMF save options to be used when saving the EMF `Resource`s.
`boolean`
`isDirty()`
Returns if the editor needs to be saved or not.
`Diagram`
`loadDiagram(org.eclipse.emf.common.util.URI uri)`
This method is called to load the diagram into the editor.
`protected Set<org.eclipse.emf.ecore.resource.Resource>`
`save(org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain, Map<org.eclipse.emf.ecore.resource.Resource,Map<?,?>> saveOptions, org.eclipse.core.runtime.IProgressMonitor monitor)`
Saves all resources in the given `TransactionalEditingDomain`.
`void`
`saveDiagram(org.eclipse.core.runtime.IProgressMonitor monitor)`
This method is called to save a diagram.
`protected void`
`setDiagramVersion(Diagram diagram)`
Called in `saveDiagram(IProgressMonitor)` to update the Graphiti diagram version before saving a diagram.
`protected boolean`
`shouldSave(org.eclipse.emf.ecore.resource.Resource resource)`
Checks whether a resource should be save during the diagram save process.
`protected void`
`showSaveError(org.eclipse.core.runtime.IStatus status)`

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

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

## Field Details

### diagramBehavior

protected final DiagramBehavior diagramBehavior
The associated `DiagramBehavior`

Since:
  0.10

### savedCommand

protected org.eclipse.emf.common.command.Command savedCommand
Used to store the command that was executed before the editor was saved. By comparing with the top of the current undo stack this point in the command stack indicates if the editor is dirty.

## Constructor Details

### DefaultPersistencyBehavior

public DefaultPersistencyBehavior(DiagramBehavior diagramBehavior)
Creates a new instance of `DefaultPersistencyBehavior` that is associated with the given `DiagramBehavior`.

Parameters:
  `diagramEditor` - the associated `DiagramBehavior`
Since:
  0.10

## Method Details

### loadDiagram

public Diagram loadDiagram(org.eclipse.emf.common.util.URI uri)
This method is called to load the diagram into the editor. The default implementation here will use the `TransactionalEditingDomain` and its `ResourceSet` to load an EMF `Resource` that holds the `Diagram`. It will also enable modification tracking on the diagram `Resource`.

Parameters:
  `uri` - the `URI` of the diagram to load
Returns:
  the instance of the `Diagram` as it is resolved within the editor, meaning as it is resolved within the editor's `TransactionalEditingDomain`.

### saveDiagram

public void saveDiagram(org.eclipse.core.runtime.IProgressMonitor monitor)
This method is called to save a diagram. The default implementation here saves all changes done to any of the EMF resources loaded within the `DiagramBehavior` so that the complete state of all modified objects will be persisted in the file system.
The default implementation also sets the current version information (currently 0.19.0) to the diagram before saving it and wraps the save operation inside a `IRunnableWithProgress` that cares about sending only one `Resource` change event holding all modified files. Besides also all adapters are temporarily switched off (see `DiagramBehavior.disableAdapters()`).
To only modify the actual saving clients should rather override `#save(TransactionalEditingDomain, Map)`.

Parameters:
  `monitor` - the Eclipse `IProgressMonitor` to use to report progress

### isDirty

public boolean isDirty()
Returns if the editor needs to be saved or not. Is queried by the `DiagramBehavior.isDirty()` method. The default implementation checks if the top of the current undo stack is equal to the stored top command of the undo stack at the time of the last saving of the editor.

Returns:
  `true` in case the editor needs to be saved, `false` otherwise.

### createSaveOptions

protected Map<org.eclipse.emf.ecore.resource.Resource,Map<?,?>> createSaveOptions()
Returns the EMF save options to be used when saving the EMF `Resource`s.

Returns:
  a `Map` object holding the used EMF save options.

### createOperation

protected org.eclipse.jface.operation.IRunnableWithProgress createOperation(Set<org.eclipse.emf.ecore.resource.Resource> savedResources, Map<org.eclipse.emf.ecore.resource.Resource,Map<?,?>> saveOptions)
Creates the runnable to be used to wrap the actual saving of the EMF `Resource`s.
To only modify the actual saving clients should rather override `#save(TransactionalEditingDomain, Map)`.

Parameters:
  `savedResources` - this parameter will after the operation has been performed contain all EMF `Resource`s that have really been saved.
  `saveOptions` - the EMF save options to use.
Returns:
  an `IRunnableWithProgress` instance wrapping the actual save process.

### save

protected Set<org.eclipse.emf.ecore.resource.Resource> save(org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain, Map<org.eclipse.emf.ecore.resource.Resource,Map<?,?>> saveOptions, org.eclipse.core.runtime.IProgressMonitor monitor)
Saves all resources in the given `TransactionalEditingDomain`. Can be overridden to enable additional (call the super method to save the EMF resources) or other persistencies.

Parameters:
  `editingDomain` - the `TransactionalEditingDomain` for which all resources will be saved
  `saveOptions` - the EMF save options used for the saving.
  `monitor` - The progress monitor to use for reporting progress
Returns:
  a `Set` of all EMF `Resource`s that were actually saved.
Since:
  0.10 The parameter monitor has been added compared to the 0.9 version of this method

### setDiagramVersion

protected void setDiagramVersion(Diagram diagram)
Called in `saveDiagram(IProgressMonitor)` to update the Graphiti diagram version before saving a diagram. Currently the diagram version is set to 0.19.0

Parameters:
  `diagram` - the `Diagram` to update the version attribute for

### shouldSave

protected boolean shouldSave(org.eclipse.emf.ecore.resource.Resource resource)
Checks whether a resource should be save during the diagram save process. By default, just passes the check to the editing domain.

Parameters:
  `resource` - the `Resource` to check
Returns:
  true if the resource must be saved, i.e., it's not read-only
Since:
  0.11

### showSaveError

protected void showSaveError(org.eclipse.core.runtime.IStatus status)

Since:
  0.13