From 29ceb238ec45c0a43496daebe842e4d321c243c3 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Mon, 10 Feb 2014 14:56:24 -0500 Subject: [PATCH] tmf: fix freezing of UI when selection large directory structure Change-Id: I40d4dc7ffa5edce23a8fa05ff89af4f7d5a1ec71 Signed-off-by: Bernd Hufmann Reviewed-on: https://git.eclipse.org/r/21841 Tested-by: Hudson CI Reviewed-by: Marc-Andre Laperle IP-Clean: Marc-Andre Laperle Tested-by: Marc-Andre Laperle --- .../importtrace/ImportTraceWizardPage.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java index d7e69d0af1..a5d6eec452 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -81,6 +82,7 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.dialogs.FileSystemElement; import org.eclipse.ui.dialogs.IOverwriteQuery; import org.eclipse.ui.dialogs.WizardResourceImportPage; +import org.eclipse.ui.internal.ide.dialogs.IElementFilter; import org.eclipse.ui.model.AdaptableList; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider; @@ -104,6 +106,7 @@ import org.eclipse.ui.wizards.datatransfer.ImportOperation; * @author Francois Chouinard * @since 2.0 */ +@SuppressWarnings("restriction") public class ImportTraceWizardPage extends WizardResourceImportPage { // ------------------------------------------------------------------------ @@ -597,7 +600,6 @@ public class ImportTraceWizardPage extends WizardResourceImportPage { // ------------------------------------------------------------------------ // Determine if the finish button can be enabled // ------------------------------------------------------------------------ - @Override public boolean validateSourceGroup() { @@ -613,8 +615,7 @@ public class ImportTraceWizardPage extends WizardResourceImportPage { return false; } - List resourcesToImport = getSelectedResources(); - if (resourcesToImport.size() == 0) { + if (selectionGroup.getCheckedElementCount() == 0) { setMessage(null); setErrorMessage(Messages.ImportTraceWizard_SelectTraceNoneSelected); return false; @@ -728,9 +729,31 @@ public class ImportTraceWizardPage extends WizardResourceImportPage { String currentPath = null; final Map folderElements = new HashMap<>(); try { - List fileSystemElements = getSelectedResources(); + + final ArrayList fileSystemElements = new ArrayList<>(); + IElementFilter passThroughFilter = new IElementFilter() { + + @Override + public void filterElements(Collection elements, IProgressMonitor monitor) { + fileSystemElements.addAll(elements); + } + @Override + public void filterElements(Object[] elements, IProgressMonitor monitor) { + for (int i = 0; i < elements.length; i++) { + fileSystemElements.add((TraceFileSystemElement)elements[i]); + } + } + }; + + // List fileSystemElements will be filled using the passThroughFilter + SubMonitor subMonitor = SubMonitor.convert(progressMonitor, 1); + getSelectedResources(passThroughFilter, subMonitor); + + // Check if operation was cancelled. + ModalContext.checkCanceled(subMonitor); + Iterator fileSystemElementsIter = fileSystemElements.iterator(); - SubMonitor subMonitor = SubMonitor.convert(progressMonitor, fileSystemElements.size()); + subMonitor = SubMonitor.convert(progressMonitor, fileSystemElements.size()); while (fileSystemElementsIter.hasNext()) { ModalContext.checkCanceled(progressMonitor); -- 2.34.1