## org.eclipse.emf.transaction
Class RecordingCommand

    java.lang.Object
      org.eclipse.emf.common.command.AbstractCommand
          org.eclipse.emf.transaction.RecordingCommand

All Implemented Interfaces:
  org.eclipse.emf.common.command.Command, ConditionalRedoCommand

    public abstract class RecordingCommand

extends org.eclipse.emf.common.command.AbstractCommand
implements ConditionalRedoCommand

A partial `Command` implementation that records the changes made by a subclass's direct manipulation of objects via the metamodel's API. This simplifies the programming model for complex commands (not requiring composition of set/add/remove commands) while still providing automatic undo/redo support.

Subclasses are simply required to implement the `doExecute()` method to make the desired changes to the model. Note that, because changes are recorded for automatic undo/redo, the concrete command must not make any changes that cannot be recorded by EMF (unless it does not matter that they will not be undone).

Nested Class Summary

Nested classes/interfaces inherited from class org.eclipse.emf.common.command.AbstractCommand
`org.eclipse.emf.common.command.AbstractCommand.NonDirtying`

Nested classes/interfaces inherited from interface org.eclipse.emf.transaction.util.ConditionalRedoCommand
`ConditionalRedoCommand.Compound`

Field Summary

Fields inherited from class org.eclipse.emf.common.command.AbstractCommand
`description, isExecutable, isPrepared, label`

Constructor Summary
`RecordingCommand(TransactionalEditingDomain domain)` Initializes me with the editing domain in which I am to be executed.
`RecordingCommand(TransactionalEditingDomain domain, String label)` Initializes me with my editing domain and a human-readable label.
`RecordingCommand(TransactionalEditingDomain domain, String label, String description)` Initializes me with my editing domain, label, and more expansive description.

Method Summary
`boolean` `canRedo()` I can be redone if I successfully recorded the changes that I executed.
`boolean` `canUndo()` I can be undone if I successfully recorded the changes that I executed.
`org.eclipse.emf.common.command.Command` `chain(org.eclipse.emf.common.command.Command command)`
`void` `dispose()` Extends the inherited implementation by disposing my change description, if any.
`protected abstract void` `doExecute()` Implemented by subclasses to perform the necessary changes in the model.
`void` `execute()` Implements the execution with automatic recording of undo information.
`protected void` `postExecute()` Will be called after `doExecute()`.
`protected void` `preExecute()` Will be called prior to `doExecute()`.
`protected boolean` `prepare()` Subclasses should override this if they have more preparation to do.
`void` `redo()` Redoes the changes that I recorded.
`void` `undo()` Undoes the changes that I recorded.

Methods inherited from class org.eclipse.emf.common.command.AbstractCommand
`canExecute, getAffectedObjects, getDescription, getLabel, getResult, setDescription, setLabel, toString`

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

Methods inherited from interface org.eclipse.emf.common.command.Command
`canExecute, getAffectedObjects, getDescription, getLabel, getResult`

Constructor Detail

### RecordingCommand

    public RecordingCommand(TransactionalEditingDomain domain)

  Initializes me with the editing domain in which I am to be executed.

  Parameters:
    `domain` - my domain

### RecordingCommand

    public RecordingCommand(TransactionalEditingDomain domain,
                            String label)

  Initializes me with my editing domain and a human-readable label.

  Parameters:
    `domain` - my domain
    `label` - my user-friendly label

### RecordingCommand

    public RecordingCommand(TransactionalEditingDomain domain,
                            String label,
                            String description)

  Initializes me with my editing domain, label, and more expansive description.

  Parameters:
    `domain` - my domain
    `label` - my label
    `description` - my long description

Method Detail

### prepare

    protected boolean prepare()

  Subclasses should override this if they have more preparation to do. By default, the result is just `true`.

  Overrides:
    `prepare` in class `org.eclipse.emf.common.command.AbstractCommand`

### execute

    public final void execute()

  Implements the execution with automatic recording of undo information. Delegates the actual model changes to the subclass's implementation of the `doExecute()` method.

  Specified by:
    `execute` in interface `org.eclipse.emf.common.command.Command`
  See Also:
    `doExecute()`

### preExecute

    protected void preExecute()

  Will be called prior to `doExecute()`.

  Since:
    1.4

### postExecute

    protected void postExecute()

  Will be called after `doExecute()`.

  Since:
    1.4

### canUndo

    public boolean canUndo()

  I can be undone if I successfully recorded the changes that I executed. Subclasses would not normally need to override this method.

  Specified by:
    `canUndo` in interface `org.eclipse.emf.common.command.Command`
  Overrides:
    `canUndo` in class `org.eclipse.emf.common.command.AbstractCommand`

### canRedo

    public boolean canRedo()

  I can be redone if I successfully recorded the changes that I executed. Subclasses would not normally need to override this method.

  Specified by:
    `canRedo` in interface `ConditionalRedoCommand`
  Returns:
    `true` if I can be redone; `false`, otherwise

### undo

    public final void undo()

  Undoes the changes that I recorded. Subclasses would not normally need to override this method.

  Specified by:
    `undo` in interface `org.eclipse.emf.common.command.Command`
  Overrides:
    `undo` in class `org.eclipse.emf.common.command.AbstractCommand`
  Throws:
    `IllegalStateException` - if I am not undoable
  See Also:
    `canUndo()`

### redo

    public final void redo()

  Redoes the changes that I recorded. Subclasses would not normally need to override this method.

  Specified by:
    `redo` in interface `org.eclipse.emf.common.command.Command`
  Throws:
    `IllegalStateException` - if I am not redoable
  See Also:
    `canRedo()`

### doExecute

    protected abstract void doExecute()

  Implemented by subclasses to perform the necessary changes in the model. These changes are applied by direct manipulation of the model objects, not by executing commands.

### chain

    public org.eclipse.emf.common.command.Command chain(org.eclipse.emf.common.command.Command command)

  Specified by:
    `chain` in interface `org.eclipse.emf.common.command.Command`
  Overrides:
    `chain` in class `org.eclipse.emf.common.command.AbstractCommand`

### dispose

    public void dispose()

  Extends the inherited implementation by disposing my change description, if any.

  Specified by:
    `dispose` in interface `org.eclipse.emf.common.command.Command`
  Overrides:
    `dispose` in class `org.eclipse.emf.common.command.AbstractCommand`

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