tmf: Bug 492895: Avoid unnecessary refreshes during import operation
Change-Id: I526dd854a32e9ff73e47416f03822fecd2a7a9ff
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/72075
Reviewed-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TraceValidateAndImportOperation.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TraceValidateAndImportOperation.java
index d644e44..30f30d6 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TraceValidateAndImportOperation.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/wizards/importtrace/TraceValidateAndImportOperation.java
@@ -36,12 +36,11 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.operation.ModalContext;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
+import org.eclipse.tracecompass.internal.tmf.ui.project.operations.TmfWorkspaceModifyOperation;
import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceImportException;
import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
@@ -61,7 +60,7 @@
* inputs are a collection of TraceFileSystemElement and several flags that control
*
*/
-public class TraceValidateAndImportOperation implements IRunnableWithProgress {
+public class TraceValidateAndImportOperation extends TmfWorkspaceModifyOperation {
private static final String TRACE_IMPORT_TEMP_FOLDER = ".traceImport"; //$NON-NLS-1$
@@ -132,14 +131,19 @@
}
@Override
- public void run(IProgressMonitor progressMonitor) {
+ protected void execute(IProgressMonitor progressMonitor) throws CoreException, InvocationTargetException, InterruptedException {
try {
+ final int ARCHIVE_OR_DIRECTORY_PROGRESS = 45;
+ final int EXTRA_IMPORT_OPERATION_PROGRESS = 45;
+ final int DELETE_PROGRESS = 10;
+ final int TOTAL_PROGRESS = ARCHIVE_OR_DIRECTORY_PROGRESS +
+ EXTRA_IMPORT_OPERATION_PROGRESS + DELETE_PROGRESS;
final List<TraceFileSystemElement> selectedFileSystemElements = fSelectedFileSystemElements;
// List fileSystemElements will be filled using the
// passThroughFilter
- SubMonitor subMonitor = SubMonitor.convert(progressMonitor, 1);
+ SubMonitor subMonitor = SubMonitor.convert(progressMonitor, TOTAL_PROGRESS);
// Check if operation was cancelled.
ModalContext.checkCanceled(subMonitor);
@@ -147,20 +151,19 @@
// Temporary directory to contain any extracted files
IFolder destTempFolder = fTraceFolderElement.getProject().getResource().getFolder(TRACE_IMPORT_TEMP_FOLDER);
if (destTempFolder.exists()) {
- SubProgressMonitor monitor = new SubProgressMonitor(subMonitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
+ SubMonitor monitor = subMonitor.newChild(1);
destTempFolder.delete(true, monitor);
}
- SubProgressMonitor monitor = new SubProgressMonitor(subMonitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
+ SubMonitor monitor = subMonitor.newChild(1);
destTempFolder.create(IResource.HIDDEN, true, monitor);
- subMonitor = SubMonitor.convert(progressMonitor, 2);
String baseSourceLocation = null;
if (fImportFromArchive) {
// When importing from archive, we first extract the
// *selected* files to a temporary folder then create new
// TraceFileSystemElements
- SubMonitor archiveMonitor = SubMonitor.convert(subMonitor.newChild(1), 2);
+ SubMonitor archiveMonitor = SubMonitor.convert(subMonitor.newChild(ARCHIVE_OR_DIRECTORY_PROGRESS), 2);
// Extract selected files from source archive to temporary
// folder
@@ -176,7 +179,7 @@
extractAllArchiveFiles(tempFolderFileSystemElements, destTempFolder, destTempFolder.getLocation(), archiveMonitor.newChild(1));
}
} else {
- SubMonitor directoryMonitor = SubMonitor.convert(subMonitor.newChild(1), 2);
+ SubMonitor directoryMonitor = SubMonitor.convert(subMonitor.newChild(ARCHIVE_OR_DIRECTORY_PROGRESS), 2);
// Import selected files, excluding archives (done in a later
// step)
importFileSystemElements(directoryMonitor.newChild(1), selectedFileSystemElements);
@@ -204,12 +207,12 @@
// Never import extracted files as links, they would link to the
// temporary directory that will be deleted
fImportOptionFlags = fImportOptionFlags & ~ImportTraceWizardPage.OPTION_CREATE_LINKS_IN_WORKSPACE;
- SubMonitor importTempMonitor = subMonitor.newChild(1);
+ SubMonitor importTempMonitor = subMonitor.newChild(EXTRA_IMPORT_OPERATION_PROGRESS);
importFileSystemElements(importTempMonitor, tempFolderFileSystemElements);
}
if (destTempFolder.exists()) {
- destTempFolder.delete(true, progressMonitor);
+ destTempFolder.delete(true, subMonitor.newChild(TOTAL_PROGRESS));
}
setStatus(Status.OK_STATUS);
@@ -445,7 +448,7 @@
operation.setOverwriteResources(false);
operation.setVirtualFolders(false);
- operation.run(new SubProgressMonitor(progressMonitor, subList.size(), SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
+ operation.run(SubMonitor.convert(progressMonitor).newChild(subList.size()));
}
private static TraceFileSystemElement getRootElement(TraceFileSystemElement element) {
@@ -527,7 +530,7 @@
// Finally import trace
IResource importedResource = importResource(fileSystemElement, monitor);
if (importedResource != null) {
- TmfTraceTypeUIUtils.setTraceType(importedResource, traceTypeHelper);
+ TmfTraceTypeUIUtils.setTraceType(importedResource, traceTypeHelper, false);
fImportedResources.add(importedResource);
}
@@ -608,10 +611,10 @@
operation.setCreateLinks(createLinksInWorkspace);
operation.setVirtualFolders(false);
- operation.run(new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
+ operation.run(SubMonitor.convert(monitor).newChild(1));
String sourceLocation = fileSystemElement.getSourceLocation();
IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(tracePath);
- if (sourceLocation != null) {
+ if ((sourceLocation != null) && (resource != null)) {
resource.setPersistentProperty(TmfCommonConstants.SOURCE_LOCATION, sourceLocation);
}