public class RemoveCommand extends AbstractOverrideableCommand
EditingDomain.createCommand
,
which may or may not result in the actual creation of an instance of this class.
The implementation of this class is low-level and EMF specific; it allows one or more objects to be removed from a many-valued feature of an owner. i.e., it is almost equivalent of the call
((EList)((EObject)owner).eGet((EStructuralFeature)feature)).removeAll((Collection)collection);
It can also be used as a near-equivalent to the call
((EList)extent).removeAll((Collection)collection);which is how root objects are removed from the contents of a resource.
The one difference is that, while EList.removeAll(Collection)
removes all values equal to a value in
the collection, this command will remove no more than one value per value in the collection. When duplicates are
allowed and present in the list, this command will first look for identical (==
) values, in order, and
failing that, equal values (.equals()
).
Like all the low-level commands in this package, the remove command is undoable.
A remove command is an OverrideableCommand
.
AbstractCommand.NonDirtying
Modifier and Type | Field and Description |
---|---|
protected java.util.Collection<?> |
affectedObjects
The is the value returned by
Command.getAffectedObjects() . |
protected java.util.Collection<java.lang.Object> |
collection
This is the collection of objects being removed.
|
protected static java.lang.String |
DESCRIPTION
This caches the description.
|
protected static java.lang.String |
DESCRIPTION_FOR_LIST
This caches the description for a list-based command.
|
protected EStructuralFeature |
feature
This is the feature of the owner object upon the command will act.
|
protected int[] |
indices
These are the indices at which to reinsert the removed objects during an undo so as to achieve the original list order.
|
protected static java.lang.String |
LABEL
This caches the label.
|
protected EObject |
owner
This is the owner object upon which the command will act.
|
protected EList<java.lang.Object> |
ownerList
This is the list from which the command will remove.
|
domain, overrideCommand
description, isExecutable, isPrepared, label
Constructor and Description |
---|
RemoveCommand(EditingDomain domain,
EList<?> list,
java.util.Collection<?> collection)
This constructs a primitive command to remove a collection of values from the specified extent.
|
RemoveCommand(EditingDomain domain,
EList<?> list,
java.lang.Object value)
This constructs a primitive command to remove a particular value from the specified extent.
|
RemoveCommand(EditingDomain domain,
EObject owner,
EStructuralFeature feature,
java.util.Collection<?> collection)
This constructs a primitive command to remove a collection of values from the specified feature of the owner.
|
RemoveCommand(EditingDomain domain,
EObject owner,
EStructuralFeature feature,
java.lang.Object value)
This constructs a primitive command to remove a particular value from the specified feature of the owner.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
contains(int[] values,
int target)
Returns whether the given int array contains the given target value.
|
protected boolean |
containsExact(java.util.Collection<?> collection,
java.lang.Object target)
Returns whether the given collection contains the given target object itself (according to ==, not .equals()).
|
static Command |
create(EditingDomain domain,
java.util.Collection<?> collection)
This creates a command to remove multiple objects.
|
static Command |
create(EditingDomain domain,
java.lang.Object value)
This creates a command to remove an object.
|
static Command |
create(EditingDomain domain,
java.lang.Object owner,
java.lang.Object feature,
java.util.Collection<?> collection)
This creates a command to remove a collection of values from the specified feature of the owner.
|
static Command |
create(EditingDomain domain,
java.lang.Object owner,
java.lang.Object feature,
java.lang.Object value)
This creates a command to remove a particular value from the specified feature of the owner.
|
void |
doExecute()
This is overrideable command's implementation of execute.
|
java.util.Collection<?> |
doGetAffectedObjects()
This is overrideable command's implementation of getAffectedObjects.
|
java.util.Collection<?> |
doGetResult()
This is overrideable command's implementation of getResult.
|
void |
doRedo()
This is overrideable command's implementation of redo.
|
void |
doUndo()
This is overrideable command's implementation of undo.
|
java.util.Collection<?> |
getCollection()
This returns the collection of objects being removed.
|
EStructuralFeature |
getFeature()
This returns the feature of the owner object upon the command will act.
|
int[] |
getIndices()
These returns the indices at which to reinsert the removed objects during an undo so as to achieve the original list order.
|
EObject |
getOwner()
This returns the owner object upon which the command will act.
|
EList<java.lang.Object> |
getOwnerList()
This returns the list from which the command will remove.
|
protected void |
merge(java.util.List<java.lang.Object> objects1,
int[] indices1,
java.util.List<java.lang.Object> objects2,
int[] indices2)
Merges two sets of object lists and index arrays, such that both are ordered by increasing indices.
|
protected boolean |
prepare()
Called at most once in
AbstractCommand.canExecute() to give the command an opportunity to ready itself for execution. |
protected boolean |
removeExact(java.util.Collection<?> collection,
java.lang.Object target)
Removes the first occurrence of the given target object, itself, from the collection.
|
java.lang.String |
toString()
This gives an abbreviated name using this object's own class' name, without package qualification,
followed by a space separated list of field:value pairs.
|
canExecute, canUndo, dispose, doCanExecute, doCanUndo, doDispose, doGetChildrenToCopy, doGetDescription, doGetLabel, execute, getAffectedObjects, getChildrenToCopy, getDescription, getDomain, getLabel, getOverride, getOwnerList, getResult, redo, setOverride, undo, updateEMap
chain, setDescription, setLabel
protected static final java.lang.String LABEL
protected static final java.lang.String DESCRIPTION
protected static final java.lang.String DESCRIPTION_FOR_LIST
protected EObject owner
EList
.protected EStructuralFeature feature
EList
.protected EList<java.lang.Object> ownerList
protected java.util.Collection<java.lang.Object> collection
protected int[] indices
protected java.util.Collection<?> affectedObjects
Command.getAffectedObjects()
.
The affected objects are different after an execute than after an undo, so we record it.public RemoveCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, java.lang.Object value)
public RemoveCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, java.util.Collection<?> collection)
public RemoveCommand(EditingDomain domain, EList<?> list, java.lang.Object value)
public RemoveCommand(EditingDomain domain, EList<?> list, java.util.Collection<?> collection)
public static Command create(EditingDomain domain, java.lang.Object value)
public static Command create(EditingDomain domain, java.lang.Object owner, java.lang.Object feature, java.lang.Object value)
public static Command create(EditingDomain domain, java.util.Collection<?> collection)
public static Command create(EditingDomain domain, java.lang.Object owner, java.lang.Object feature, java.util.Collection<?> collection)
public EObject getOwner()
EList
.public EStructuralFeature getFeature()
EList
.public EList<java.lang.Object> getOwnerList()
public java.util.Collection<?> getCollection()
public int[] getIndices()
protected boolean prepare()
AbstractCommand
AbstractCommand.canExecute()
to give the command an opportunity to ready itself for execution.
The returned value is stored in AbstractCommand.canExecute()
.
In other words, you can override this method to initialize
and to yield a cached value for the all subsequent calls to canExecute.prepare
in class AbstractCommand
public void doExecute()
OverrideableCommand
doExecute
in interface OverrideableCommand
doExecute
in class AbstractOverrideableCommand
protected boolean containsExact(java.util.Collection<?> collection, java.lang.Object target)
protected boolean contains(int[] values, int target)
protected boolean removeExact(java.util.Collection<?> collection, java.lang.Object target)
protected void merge(java.util.List<java.lang.Object> objects1, int[] indices1, java.util.List<java.lang.Object> objects2, int[] indices2)
collection
and indices
. The two input sets must already be in increasing index
order, with the corresponding object-index pairs in the same positions.public void doUndo()
OverrideableCommand
doUndo
in interface OverrideableCommand
doUndo
in class AbstractOverrideableCommand
public void doRedo()
OverrideableCommand
doRedo
in interface OverrideableCommand
doRedo
in class AbstractOverrideableCommand
public java.util.Collection<?> doGetResult()
OverrideableCommand
doGetResult
in interface OverrideableCommand
doGetResult
in class AbstractOverrideableCommand
public java.util.Collection<?> doGetAffectedObjects()
OverrideableCommand
doGetAffectedObjects
in interface OverrideableCommand
doGetAffectedObjects
in class AbstractOverrideableCommand
public java.lang.String toString()
toString
in class AbstractOverrideableCommand