/**
* The commands in Zong! are based on the Xenoage Utils Document Framework.
*
* When a command is executed, it may execute additional commands internally.
* If undoable, the command is responsible for undoing the internally executed
* commands in reverse order.
*
* Commands may provide an additional boolean parameter <code>undoable</code>, that can be used
* to run the command much faster, but it provides no undo functionality in this case. This is useful for commands
* which have a large computational overhead if undo support is needed.
*
* There are some rules which each command must obey:
* <ol>
* <li>Reference Integrity: When a command is undone, it must perfectly restore
* the old state of the score. Not only equals-by-value (<code>oldData.equals(newData)</code>)
* but referential equality (<code>oldData == newData</code>) is required. This is because backup
* data for undo may contain references for performance reasons.</li>
* <li>When a static execute-method is called directly, the integrity of the previous undo stack can no longer
* be guaranteed, so undoing the previous operations is not possible any more. The caller of the
* execute-method is responsible to clear the corresponding undo stack.</li>
* <li>The naming is as follows (where appropriate): [Object][Verb] (like ChordWrite).</li>
* </ol>
*
* For more details about these design decisions, read the "2013-05-02 Mutable Core Concept".
*
* @author Andreas Wenger
*/
package com.xenoage.zong.commands;