Class CopyResourcesOperation

All Implemented Interfaces:
IAdvancedUndoableOperation, IAdvancedUndoableOperation2, IUndoableOperation

public class CopyResourcesOperation extends AbstractWorkspaceOperation
A CopyResourcesOperation represents an undoable operation for copying one or more resources in the workspace. Clients may call the public API from a background thread.

This operation can track any overwritten resources and restore them when the copy is undone. It is up to clients to determine whether overwrites are allowed. If a resource should not be overwritten, it should not be included in this operation. In addition to checking for overwrites, the target location for the copy is assumed to have already been validated by the client. It will not be revalidated on undo and redo.

This class is intended to be instantiated and used by clients. It is not intended to be subclassed by clients.

Since:
3.3
Restriction:
This class is not intended to be subclassed by clients.
  • Field Details

    • destinationPaths

      protected IPath[] destinationPaths
    • destination

      protected IPath destination
    • fCreateGroups

      protected boolean fCreateGroups
    • fRelativeToVariable

      protected String fRelativeToVariable
    • resourceDescriptions

      protected org.eclipse.core.resources.undo.snapshot.IResourceSnapshot<? extends IResource>[] resourceDescriptions
  • Constructor Details

    • CopyResourcesOperation

      public CopyResourcesOperation(IResource resource, IPath newPath, String label)
      Create a CopyResourcesOperation that copies a single resource to a new location. The new location includes the name of the copy.
      Parameters:
      resource - the resource to be copied
      newPath - the new workspace-relative path for the copy, including its desired name.
      label - the label of the operation
    • CopyResourcesOperation

      public CopyResourcesOperation(IResource[] resources, IPath destinationPath, String label)
      Create a CopyResourcesOperation that copies all of the specified resources to a single target location. The original resource name will be used when copied to the new location.
      Parameters:
      resources - the resources to be copied
      destinationPath - the workspace-relative destination path for the copied resource.
      label - the label of the operation
    • CopyResourcesOperation

      public CopyResourcesOperation(IResource[] resources, IPath[] destinationPaths, String label)
      Create a CopyResourcesOperation that copies each of the specified resources to its corresponding destination path in the destination path array. The resource name for the target is included in the corresponding destination path.
      Parameters:
      resources - the resources to be copied. Must not contain null resources.
      destinationPaths - a workspace-relative destination path for each copied resource, which includes the name of the resource at the new destination. Must be the same length as the resources array, and may not contain null paths.
      label - the label of the operation
  • Method Details

    • doExecute

      protected void doExecute(IProgressMonitor monitor, IAdaptable uiInfo) throws CoreException
      Description copied from class: AbstractWorkspaceOperation
      Perform the specific work involved in executing this operation.
      Specified by:
      doExecute in class AbstractWorkspaceOperation
      Parameters:
      monitor - the progress monitor to use for the operation
      uiInfo - the IAdaptable (or null) provided by the caller in order to supply UI information for prompting the user if necessary. When this parameter is not null, it contains an adapter for the org.eclipse.swt.widgets.Shell.class
      Throws:
      CoreException - propagates any CoreExceptions thrown from the resources API
    • copy

      protected void copy(IProgressMonitor monitor, IAdaptable uiInfo) throws CoreException
      Move or copy any known resources according to the destination parameters known by this operation. Store enough information to undo and redo the operation.
      Parameters:
      monitor - the progress monitor to use for the operation
      uiInfo - the IAdaptable (or null) provided by the caller in order to supply UI information for prompting the user if necessary. When this parameter is not null, it contains an adapter for the org.eclipse.swt.widgets.Shell.class
      Throws:
      CoreException - propagates any CoreExceptions thrown from the resources API
    • doUndo

      protected void doUndo(IProgressMonitor monitor, IAdaptable uiInfo) throws CoreException
      Description copied from class: AbstractWorkspaceOperation
      Perform the specific work involved in undoing this operation.
      Specified by:
      doUndo in class AbstractWorkspaceOperation
      Parameters:
      monitor - the progress monitor to use for the operation
      uiInfo - the IAdaptable (or null) provided by the caller in order to supply UI information for prompting the user if necessary. When this parameter is not null, it contains an adapter for the org.eclipse.swt.widgets.Shell.class
      Throws:
      CoreException - propagates any CoreExceptions thrown from the resources API
    • updateResourceChangeDescriptionFactory

      protected boolean updateResourceChangeDescriptionFactory(IResourceChangeDescriptionFactory factory, int operation)
      Description copied from class: AbstractWorkspaceOperation
      Update the provided resource change description factory so it can generate a resource delta describing the result of an undo or redo. Return a boolean indicating whether any update was done. The default implementation does not update the factory. Subclasses are expected to override this method to more specifically describe their modifications to the workspace.
      Overrides:
      updateResourceChangeDescriptionFactory in class AbstractWorkspaceOperation
      Parameters:
      factory - the factory to update
      operation - an integer indicating whether the change is part of an execute, undo, or redo
      Returns:
      a boolean indicating whether the factory was updated.
    • computeUndoableStatus

      public IStatus computeUndoableStatus(IProgressMonitor monitor)
      Description copied from class: AbstractWorkspaceOperation
      Return a status indicating the projected outcome of undoing the receiver. This method is not called by the operation history, but instead is used by clients (such as implementers of IOperationApprover2) who wish to perform advanced validation of an operation before attempting to undo it. If an ERROR status is returned, the undo will not proceed and the user notified if deemed necessary by the caller. The validity flag on the operation should be marked as invalid. If an OK status is returned, the undo will proceed. The caller must interpret any other returned status severity, and may choose to prompt the user as to how to proceed. If there are multiple conditions that result in an ambiguous status severity, it is best for the implementor of this method to consult the user as to how to proceed for each one, and return an OK or ERROR status that accurately reflects the user's wishes, or to return a multi-status that accurately describes all of the issues at hand, so that the caller may potentially consult the user. (Note that the user should not be consulted at all if a client has called AbstractWorkspaceOperation.setQuietCompute(boolean) with a value of true.) This implementation computes the validity of undo by computing the resource delta that would be generated on undo, and checking whether any registered model providers are affected by the operation.
      Specified by:
      computeUndoableStatus in interface IAdvancedUndoableOperation
      Overrides:
      computeUndoableStatus in class AbstractWorkspaceOperation
      Parameters:
      monitor - the progress monitor to be used for computing the status
      Returns:
      the status indicating the projected outcome of undoing the receiver
      See Also:
    • computeMoveOrCopyStatus

      protected IStatus computeMoveOrCopyStatus()
      Compute the status for moving or copying the resources. A status severity of OK indicates that the copy or move is likely to be successful. A status severity of ERROR indicates that the operation is no longer valid. Other status severities are open to interpretation by the caller. Note this method may be called on initial moving or copying of a resource, or when a move or copy is undone or redone. Therefore, this method should check conditions that can change over the life of the operation, such as whether the file to moved or copied exists, and whether the target location is still valid. One-time static checks should typically be done by the caller so that the user is not continually prompted or warned about conditions that were acceptable at the time of original execution and do not change over time.
      Returns:
      the status indicating the projected outcome of moving or copying the resources.
    • getDestinationPath

      protected IPath getDestinationPath(IResource resource, int index)
      Return the destination path that should be used to move or copy the specified resource. This path is relative to the workspace.
      Parameters:
      resource - the resource being moved or copied
      index - the integer index of the resource in the resource array
      Returns:
      the path specifying the destination for the resource
    • appendDescriptiveText

      protected void appendDescriptiveText(StringBuffer text)
      Description copied from class: AbstractWorkspaceOperation
      Append any descriptive text to the specified string buffer to be shown in the receiver's AbstractWorkspaceOperation.toString() text.

      Note that this method is not intend to be subclassed by clients.

      Parameters:
      text - the StringBuffer on which to append the text
    • isDestinationPathValid

      protected boolean isDestinationPathValid(IResource resource, int index)
      Return a boolean indicating whether the proposed destination path for a resource is valid.
      Parameters:
      resource - the resource whose path is to be checked
      index - the integer index of the resource in the resource array
      Returns:
      a boolean indicating whether the destination path is valid
    • getProposedName

      protected String getProposedName(IResource resource, int index)
      Return a string indicating the proposed name for the resource
      Parameters:
      resource - the resource whose path is to be checked
      index - the integer index of the resource in the resource array
      Returns:
      the string name of the resource
    • computeExecutionStatus

      public IStatus computeExecutionStatus(IProgressMonitor monitor)
      Description copied from class: AbstractWorkspaceOperation
      Return a status indicating the projected outcome of executing the receiver. This method is not called by the operation history, but instead is used by clients (such as implementers of IOperationApprover2) who wish to perform advanced validation of an operation before attempting to execute it. If an ERROR status is returned, the operation will not proceed and the user notified if deemed necessary by the caller. The validity flag on the operation should be marked as invalid. If an OK status is returned, the operation will proceed. The caller must interpret any other returned status severity, and may choose to prompt the user as to how to proceed. If there are multiple conditions that result in an ambiguous status severity, it is best for the implementor of this method to consult the user as to how to proceed for each one, and return an OK or ERROR status that accurately reflects the user's wishes, or to return a multi-status that accurately describes all of the issues at hand, so that the caller may potentially consult the user. (Note that the user should not be consulted at all if a client has called AbstractWorkspaceOperation.setQuietCompute(boolean) with a value of true.) This implementation computes the validity of execution by computing the resource delta that would be generated on execution, and checking whether any registered model providers are affected by the operation.
      Specified by:
      computeExecutionStatus in interface IAdvancedUndoableOperation2
      Overrides:
      computeExecutionStatus in class AbstractWorkspaceOperation
      Parameters:
      monitor - the progress monitor to be used for computing the status
      Returns:
      the status indicating the projected outcome of executing the receiver
      See Also:
    • computeRedoableStatus

      public IStatus computeRedoableStatus(IProgressMonitor monitor)
      Description copied from class: AbstractWorkspaceOperation
      Return a status indicating the projected outcome of redoing the receiver. This method is not called by the operation history, but instead is used by clients (such as implementers of IOperationApprover2) who wish to perform advanced validation of an operation before attempting to redo it. If an ERROR status is returned, the redo will not proceed and the user notified if deemed necessary by the caller. The validity flag on the operation should be marked as invalid. If an OK status is returned, the redo will proceed. The caller must interpret any other returned status severity, and may choose to prompt the user as to how to proceed. If there are multiple conditions that result in an ambiguous status severity, it is best for the implementor of this method to consult the user as to how to proceed for each one, and return an OK or ERROR status that accurately reflects the user's wishes, or to return a multi-status that accurately describes all of the issues at hand, so that the caller may potentially consult the user. (Note that the user should not be consulted at all if a client has called AbstractWorkspaceOperation.setQuietCompute(boolean) with a value of true.) This implementation computes the validity of redo by computing the resource delta that would be generated on redo, and checking whether any registered model providers are affected by the operation.
      Specified by:
      computeRedoableStatus in interface IAdvancedUndoableOperation
      Overrides:
      computeRedoableStatus in class AbstractWorkspaceOperation
      Parameters:
      monitor - the progress monitor to be used for computing the status
      Returns:
      the status indicating the projected outcome of redoing the receiver
      See Also:
    • setCreateVirtualFolders

      public void setCreateVirtualFolders(boolean value)
    • setCreateLinks

      public void setCreateLinks(boolean value)
    • setRelativeVariable

      public void setRelativeVariable(String value)
    • delete

      protected void delete(IProgressMonitor monitor, IAdaptable uiInfo, boolean deleteContent) throws CoreException
      Delete any resources known by this operation. Store enough information to undo and redo the operation.
      Parameters:
      monitor - the progress monitor to use for the operation
      uiInfo - the IAdaptable (or null) provided by the caller in order to supply UI information for prompting the user if necessary. When this parameter is not null, it contains an adapter for the org.eclipse.swt.widgets.Shell.class
      deleteContent - true if the content of any known projects should be deleted along with the project. false if project content should not be deleted.
      Throws:
      CoreException - propagates any CoreExceptions thrown from the resources API
    • recreate

      protected void recreate(IProgressMonitor monitor, IAdaptable uiInfo) throws CoreException
      Recreate any resources known by this operation. Store enough information to undo and redo the operation.
      Parameters:
      monitor - the progress monitor to use for the operation
      uiInfo - the IAdaptable (or null) provided by the caller in order to supply UI information for prompting the user if necessary. When this parameter is not null, it contains an adapter for the org.eclipse.swt.widgets.Shell.class
      Throws:
      CoreException - propagates any CoreExceptions thrown from the resources API
    • computeCreateStatus

      protected IStatus computeCreateStatus(boolean allowOverwrite)
      Compute the status for creating resources from the descriptions. A status severity of OK indicates that the create is likely to be successful. A status severity of ERROR indicates that the operation is no longer valid. Other status severities are open to interpretation by the caller. Note this method may be called on initial creation of a resource, or when a create or delete operation is being undone or redone. Therefore, this method should check conditions that can change over the life of the operation, such as the existence of the information needed to carry out the operation. One-time static checks should typically be done by the caller (such as the action that creates the operation) so that the user is not continually prompted or warned about conditions that were acceptable at the time of original execution.
      Parameters:
      allowOverwrite - a boolean that specifies whether resource creation should be allowed to overwrite an existent resource.
    • computeDeleteStatus

      protected IStatus computeDeleteStatus()
      Compute the status for deleting resources. A status severity of OK indicates that the delete is likely to be successful. A status severity of ERROR indicates that the operation is no longer valid. Other status severities are open to interpretation by the caller. Note this method may be called on initial deletion of a resource, or when a create or delete operation is being undone or redone. Therefore, this method should check conditions that can change over the life of the operation, such as the existence of the resources to be deleted. One-time static checks should typically be done by the caller (such as the action that creates the operation) so that the user is not continually prompted or warned about conditions that were acceptable at the time of original execution.
    • setResourceDescriptions

      protected void setResourceDescriptions(org.eclipse.core.resources.undo.snapshot.IResourceSnapshot<? extends IResource>[] descriptions)
      Set the array of resource descriptions describing resources to be restored when undoing or redoing this operation.
      Parameters:
      descriptions - the array of resource descriptions
    • computeCreateSchedulingRule

      protected ISchedulingRule computeCreateSchedulingRule()
      Compute a scheduling rule for creating resources.
      Returns:
      a scheduling rule appropriate for creating the resources specified in the resource descriptions
    • computeDeleteSchedulingRule

      protected ISchedulingRule computeDeleteSchedulingRule()
      Compute a scheduling rule for deleting resources.
      Returns:
      a scheduling rule appropriate for deleting the resources specified in the receiver.
    • setTargetResources

      protected void setTargetResources(IResource[] targetResources)
      Description copied from class: AbstractWorkspaceOperation
      Set the resources which are affected by this operation
      Overrides:
      setTargetResources in class AbstractWorkspaceOperation
      Parameters:
      targetResources - an array of resources