Package com.iizigo.editor.complex
Class ComplexOperation
- java.lang.Object
- org.eclipse.core.commands.operations.AbstractOperation
- com.iizigo.editor.complex.ComplexOperation
- All Implemented Interfaces:
IComplexOperation
,org.eclipse.core.commands.operations.IUndoableOperation
public class ComplexOperation extends org.eclipse.core.commands.operations.AbstractOperation implements IComplexOperation
The Complex operation can bundle advanced combination of operation between property containers. The operation is constructed with the property containers involved in the operation. Then the operation is executed. As it is executed, the undo/redo operations is built up.- Author:
- Christopher Mindus
Constructor Summary
Constructors Constructor Description ComplexOperation(java.lang.String descr, IComplexOperationSelection selectionImpl, IPropUndoRedo undoRedo)
Constructor of Add Operation.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addOperation(IComplexSubOperation oper)
Adds a sub operation.void
addProp(PropCnr pc, GProp<?> gp)
Adds a property.void
addPropError(GProp<?> gp, IPropErrorItem pei)
Adds a property error.boolean
canExecute()
Returns whether the operation can be executed in its current state.boolean
canRedo()
Returns whether the operation can be redone in its current state.boolean
canUndo()
Returns whether the operation can be undone in its current state.org.eclipse.core.runtime.IStatus
execute(org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info)
Executes the Paste.ContainerParticipant
getContainerParticipant(PropCnr pc)
Gets a container participant or creates one.ComplexOperation
getGlobal()
Gets the global complex operation in progress.boolean
hasPerformedAnOperation()
Checks if an operation has been performed successfully or if it's an empty operation for undo.void
insertProp(PropCnr pc, GProp<?> gp, int index)
Inserts a property.void
moveProp(GProp<?> gp, PropCnr toContainer, Atom newName, int toIndex)
Moves a property to another container.ContainerSelection
newContainerSelection(GProp<?> prop)
Creates a new ContainerSelection instance for a property container involved in the operation.ContainerSelection
newContainerSelection(PropCnr parent, Atom childAtom)
Creates a new ContainerSelection instance for a property container involved in the operation.org.eclipse.core.runtime.IStatus
redo(org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info)
Redoes the Paste operation: same as Execute.void
removeProp(GProp<?> gp)
Removes a property.void
removePropError(GProp<?> gp, java.lang.String errorID)
Removes a property error.void
renameProp(GProp<?> gp, Atom newName)
Renames a property.void
reorderProps(PropCnr pc, Atom[] order)
Reorder a property container.boolean
setGlobal()
Sets this operation as the current one for global operations.void
setPropError(GProp<?> gp, PropError pe)
Sets all errors in a property.void
setPropValue(GProp<?> gp, java.lang.Object newValue)
Sets a property value.void
setSelectionAfter(ContainerSelection[] selection)
Sets the selection after the operation has been performed so that it can be restored at a redo operation, before or after it has been executed.void
setSelectionBefore(ContainerSelection[] selection)
Sets the selection before the operation has been performed so that it can be restored at a undo operation, before or after it has been executed.org.eclipse.core.runtime.IStatus
undo(org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info)
Performs the undo of a Paste operation.boolean
unsetGlobal()
Removes this operation as the current one for global operations.
Constructor Detail
ComplexOperation
public ComplexOperation(java.lang.String descr, IComplexOperationSelection selectionImpl, IPropUndoRedo undoRedo)
Constructor of Add Operation.- Parameters:
descr
- Description of the operation.selectionImpl
- Selection to set in the Viewer of "undoRedo" when operation completes (also for undo), null for none.undoRedo
- The undo/redo provider, null for no undo/redo support.
Method Detail
getGlobal
public ComplexOperation getGlobal()
Gets the global complex operation in progress.- Returns:
- The global operation, or null for none.
setSelectionBefore
public void setSelectionBefore(ContainerSelection[] selection)
Sets the selection before the operation has been performed so that it can be restored at a undo operation, before or after it has been executed.Use the method
newContainerSelection(GProp)
to create the array elements.- Parameters:
selection
- The selection.
setSelectionAfter
public void setSelectionAfter(ContainerSelection[] selection)
Sets the selection after the operation has been performed so that it can be restored at a redo operation, before or after it has been executed.Use the method
newContainerSelection(GProp)
to create the array elements.- Parameters:
selection
- The selection.
setPropValue
public void setPropValue(GProp<?> gp, java.lang.Object newValue)
Sets a property value.- Specified by:
setPropValue
in interfaceIComplexOperation
addProp
public void addProp(PropCnr pc, GProp<?> gp)
Adds a property.- Specified by:
addProp
in interfaceIComplexOperation
insertProp
public void insertProp(PropCnr pc, GProp<?> gp, int index)
Inserts a property.- Specified by:
insertProp
in interfaceIComplexOperation
removeProp
public void removeProp(GProp<?> gp)
Removes a property.- Specified by:
removeProp
in interfaceIComplexOperation
renameProp
public void renameProp(GProp<?> gp, Atom newName)
Renames a property.- Specified by:
renameProp
in interfaceIComplexOperation
setPropError
public void setPropError(GProp<?> gp, PropError pe)
Sets all errors in a property.- Specified by:
setPropError
in interfaceIComplexOperation
addPropError
public void addPropError(GProp<?> gp, IPropErrorItem pei)
Adds a property error.- Specified by:
addPropError
in interfaceIComplexOperation
removePropError
public void removePropError(GProp<?> gp, java.lang.String errorID)
Removes a property error.- Specified by:
removePropError
in interfaceIComplexOperation
moveProp
public void moveProp(GProp<?> gp, PropCnr toContainer, Atom newName, int toIndex)
Moves a property to another container.- Specified by:
moveProp
in interfaceIComplexOperation
reorderProps
public void reorderProps(PropCnr pc, Atom[] order)
Reorder a property container.- Specified by:
reorderProps
in interfaceIComplexOperation
hasPerformedAnOperation
public boolean hasPerformedAnOperation()
Checks if an operation has been performed successfully or if it's an empty operation for undo.- Specified by:
hasPerformedAnOperation
in interfaceIComplexOperation
getContainerParticipant
public ContainerParticipant getContainerParticipant(PropCnr pc)
Gets a container participant or creates one.- Parameters:
pc
- The property container.- Returns:
- The container participant.
newContainerSelection
public ContainerSelection newContainerSelection(GProp<?> prop)
Creates a new ContainerSelection instance for a property container involved in the operation.- Parameters:
prop
- A selected property.- Returns:
- The ContainerSelection instance.
newContainerSelection
public ContainerSelection newContainerSelection(PropCnr parent, Atom childAtom)
Creates a new ContainerSelection instance for a property container involved in the operation.- Parameters:
parent
- The parent of the selected property.childAtom
- The atom of the selected property.- Returns:
- The ContainerSelection instance.
addOperation
public void addOperation(IComplexSubOperation oper)
Adds a sub operation.
canExecute
public boolean canExecute()
Returns whether the operation can be executed in its current state.- Specified by:
canExecute
in interfaceorg.eclipse.core.commands.operations.IUndoableOperation
- Overrides:
canExecute
in classorg.eclipse.core.commands.operations.AbstractOperation
execute
public org.eclipse.core.runtime.IStatus execute(org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info) throws org.eclipse.core.commands.ExecutionException
Executes the Paste.- Specified by:
execute
in interfaceorg.eclipse.core.commands.operations.IUndoableOperation
- Specified by:
execute
in classorg.eclipse.core.commands.operations.AbstractOperation
- Throws:
org.eclipse.core.commands.ExecutionException
canRedo
public boolean canRedo()
Returns whether the operation can be redone in its current state.- Specified by:
canRedo
in interfaceorg.eclipse.core.commands.operations.IUndoableOperation
- Overrides:
canRedo
in classorg.eclipse.core.commands.operations.AbstractOperation
redo
public org.eclipse.core.runtime.IStatus redo(org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info) throws org.eclipse.core.commands.ExecutionException
Redoes the Paste operation: same as Execute.- Specified by:
redo
in interfaceorg.eclipse.core.commands.operations.IUndoableOperation
- Specified by:
redo
in classorg.eclipse.core.commands.operations.AbstractOperation
- Throws:
org.eclipse.core.commands.ExecutionException
canUndo
public boolean canUndo()
Returns whether the operation can be undone in its current state.- Specified by:
canUndo
in interfaceorg.eclipse.core.commands.operations.IUndoableOperation
- Overrides:
canUndo
in classorg.eclipse.core.commands.operations.AbstractOperation
undo
public org.eclipse.core.runtime.IStatus undo(org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info) throws org.eclipse.core.commands.ExecutionException
Performs the undo of a Paste operation.- Specified by:
undo
in interfaceorg.eclipse.core.commands.operations.IUndoableOperation
- Specified by:
undo
in classorg.eclipse.core.commands.operations.AbstractOperation
- Throws:
org.eclipse.core.commands.ExecutionException
setGlobal
public boolean setGlobal()
Sets this operation as the current one for global operations.- Returns:
- true for single global operation assigned, false if another one has been replaced.
unsetGlobal
public boolean unsetGlobal()
Removes this operation as the current one for global operations. If this operation is not the global one, nothing happens.- Returns:
- true for success, false if this operation was not the global one.