tmf: fix freezing of UI when selection large directory structure
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Mon, 10 Feb 2014 19:56:24 +0000 (14:56 -0500)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Fri, 14 Feb 2014 21:28:20 +0000 (16:28 -0500)
Change-Id: I40d4dc7ffa5edce23a8fa05ff89af4f7d5a1ec71
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/21841
Tested-by: Hudson CI
Reviewed-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
IP-Clean: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Tested-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardPage.java

index d7e69d0af11f728d6a92ad89fd986bc39f7845a3..a5d6eec452081efb17d0dc259c3dba000efa469d 100644 (file)
@@ -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<FileSystemElement> 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<String, TraceFileSystemElement> folderElements = new HashMap<>();
             try {
-                List<TraceFileSystemElement> fileSystemElements = getSelectedResources();
+
+                final ArrayList<TraceFileSystemElement> 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<TraceFileSystemElement> fileSystemElementsIter = fileSystemElements.iterator();
-                SubMonitor subMonitor = SubMonitor.convert(progressMonitor, fileSystemElements.size());
+                subMonitor = SubMonitor.convert(progressMonitor, fileSystemElements.size());
 
                 while (fileSystemElementsIter.hasNext()) {
                     ModalContext.checkCanceled(progressMonitor);
This page took 0.029948 seconds and 5 git commands to generate.