tmf: fix import trace wizard changing trace types after directory
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Thu, 16 May 2013 18:52:23 +0000 (14:52 -0400)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Tue, 28 May 2013 15:53:22 +0000 (11:53 -0400)
Change-Id: I20af2fc56cb58ba8caebf5af13acf5b16ad7eb00
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/13280
Tested-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
IP-Clean: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/BatchImportTraceWizard.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceContentProvider.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/wizards/importtrace/ImportTraceWizardScanPage.java

index df6b799016ae6ee8d1a24c3921a6663b52283bc5..94838cb861bb52db360ee702927b62efff0f58b4 100644 (file)
@@ -83,13 +83,13 @@ public class BatchImportTraceWizard extends ImportTraceWizard {
     // ------------------
 
     private IWizardPage fSelectDirectoriesPage;
-    private IWizardPage fScanPage;
+    private ImportTraceWizardScanPage fScanPage;
     private IWizardPage fSelectTypePage;
 
     private final List<String> fTraceTypesToScan = new ArrayList<String>();
     private final Set<String> fParentFilesToScan = new HashSet<String>();
 
-    private ImportTraceContentProvider fScannedTraces = new ImportTraceContentProvider();
+    private ImportTraceContentProvider fScannedTraces = new ImportTraceContentProvider(fTraceTypesToScan, fParentFilesToScan);
 
     private final Map<TraceValidationHelper, Boolean> fResults = new HashMap<TraceValidationHelper, Boolean>();
     private boolean fOverwrite = true;
@@ -561,6 +561,7 @@ public class BatchImportTraceWizard extends ImportTraceWizard {
             updateScanQueue(pm, filesToScan, added);
         } catch (InterruptedException e) {
         }
+
     }
 
     /*
@@ -619,12 +620,14 @@ public class BatchImportTraceWizard extends ImportTraceWizard {
                         fTracesToScan.put(tv);
                         monitor.subTask(tv.getTraceToScan());
                         if (monitor.isCanceled()) {
+                            fScanPage.refresh();
                             return CANCEL_STATUS;
                         }
                     }
                 }
             }
         }
+        fScanPage.refresh();
         return Status.OK_STATUS;
     }
 
index bd3a43e3adbadf0e91e13bc93585709027ea0453..3870c4dd9453dbea49a4fd06634e2512f52d9b29 100644 (file)
 package org.eclipse.linuxtools.tmf.ui.project.wizards.importtrace;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -32,8 +35,16 @@ import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceType;
  */
 class ImportTraceContentProvider implements ITreeContentProvider {
 
-    final Map<String,String> fTraceTypes = new HashMap<String,String>();
-    final Map<String, Set<FileAndName>> fTraceFiles = new HashMap<String, Set<FileAndName>>();
+    private final Map<String, String> fTraceTypes = new HashMap<String, String>();
+    private final Map<String, Set<FileAndName>> fTraceFiles = new HashMap<String, Set<FileAndName>>();
+    private final List<String> fTraceTypesToScan;
+    private final Set<String> fParentFilesToScan;
+
+    public ImportTraceContentProvider(List<String> traceTypesToScan, Set<String> parentFilesToScan) {
+        fTraceTypesToScan = traceTypesToScan;
+        fParentFilesToScan = parentFilesToScan;
+    }
+
     /**
      * Add a trace candidate to display
      *
@@ -48,7 +59,7 @@ class ImportTraceContentProvider implements ITreeContentProvider {
             fTraceFiles.put(category, new TreeSet<FileAndName>());
         }
         final FileAndName traceFile = new FileAndName(traceToOpen, traceToOpen.getName());
-        traceFile.setTraceTypeId( category );
+        traceFile.setTraceTypeId(category);
         final Set<FileAndName> categorySet = fTraceFiles.get(category);
         categorySet.add(traceFile);
     }
@@ -80,7 +91,18 @@ class ImportTraceContentProvider implements ITreeContentProvider {
 
     @Override
     public synchronized Object[] getElements(Object inputElement) {
-        return fTraceTypes.keySet().toArray(new String[fTraceTypes.size()]);
+        List<String> candidates = new ArrayList<String>();
+
+        for (String candidate : fTraceTypesToScan) {
+            for (Entry<String, String> entry : fTraceTypes.entrySet()) {
+                if (entry.getValue().equals(candidate)) {
+                    candidates.add(entry.getKey());
+                    break;
+                }
+            }
+
+        }
+        return candidates.toArray(new String[candidates.size()]);
     }
 
     @Override
@@ -88,7 +110,18 @@ class ImportTraceContentProvider implements ITreeContentProvider {
         if (parentElement instanceof String) {
             final Set<FileAndName> children = fTraceFiles.get(fTraceTypes.get(parentElement));
             if (children != null) {
-                return children.toArray(new FileAndName[0]);
+                Set<FileAndName> candidates = new TreeSet<FileAndName>();
+                for (FileAndName child : children) {
+                    for (String parent : fParentFilesToScan) {
+                        // this is going to be slow, but less slow than UI
+                        // display and should not be done for more than 10k
+                        // elements.
+                        if (child.getFile().getAbsolutePath().startsWith(parent)) {
+                            candidates.add(child);
+                        }
+                    }
+                }
+                return candidates.toArray(new FileAndName[0]);
             }
         }
         return null;
@@ -132,11 +165,12 @@ class ImportTraceContentProvider implements ITreeContentProvider {
 
     /**
      * Gets the number of traces to import
+     *
      * @return the number of traces to import
      */
     public synchronized int getSize() {
-        int tot = 0 ;
-        for( String s : fTraceFiles.keySet() ){
+        int tot = 0;
+        for (String s : fTraceFiles.keySet()) {
             tot += fTraceFiles.get(s).size();
         }
         return tot;
index 7da2a5f647cc300a0840dbb64d8035c2787c9dcf..4983d9156372c8ea603b9c61aa30fec1fdae1b3b 100644 (file)
@@ -65,7 +65,6 @@ public class ImportTraceWizardScanPage extends AbstractImportTraceWizardPage {
     private static final int MAX_TRACES = 65536;
     private CheckboxTreeViewer traceTypeViewer;
 
-    // private int position = 0;
     final ScanRunnable fRunnable = new ScanRunnable("Scan job"); //$NON-NLS-1$
     final private BlockingQueue<TraceValidationHelper> fTracesToScan = new ArrayBlockingQueue<TraceValidationHelper>(MAX_TRACES);
     private volatile boolean fCanRun = true;
@@ -158,6 +157,7 @@ public class ImportTraceWizardScanPage extends AbstractImportTraceWizardPage {
         init();
         getBatchWizard().setTracesToScan(fTracesToScan);
         getBatchWizard().setTraceFolder(fTargetFolder);
+
         fRunnable.schedule();
         setErrorMessage(Messages.ImportTraceWizardScanPageSelectAtleastOne);
     }
@@ -354,12 +354,12 @@ public class ImportTraceWizardScanPage extends AbstractImportTraceWizardPage {
 
     private final class ScanRunnable extends Job {
 
+        private IProgressMonitor fMonitor;
+
         public ScanRunnable(String name) {
             super(name);
         }
 
-        private IProgressMonitor fMonitor;
-
         private synchronized IProgressMonitor getMonitor() {
             return fMonitor;
         }
@@ -371,6 +371,7 @@ public class ImportTraceWizardScanPage extends AbstractImportTraceWizardPage {
             control.getDisplay().syncExec(new Runnable() {
                 @Override
                 public void run() {
+                    // monitor gets overwritten here so it's necessary to save it in a field.
                     fMonitor = SubMonitor.convert(getMonitor());
                     getMonitor().setTaskName(Messages.ImportTraceWizardPageScanScanning + ' ');
                     ((SubMonitor) getMonitor()).setWorkRemaining(IProgressMonitor.UNKNOWN);
@@ -445,4 +446,21 @@ public class ImportTraceWizardScanPage extends AbstractImportTraceWizardPage {
             return Status.OK_STATUS;
         }
     }
+
+    /**
+     * Refresh the view and the corresponding model.
+     */
+    public void refresh() {
+        final Control control = traceTypeViewer.getControl();
+        if (!control.isDisposed()) {
+            control.getDisplay().asyncExec(new Runnable() {
+                @Override
+                public void run() {
+                    if (!control.isDisposed()) {
+                        traceTypeViewer.refresh();
+                    }
+                }
+            });
+        }
+    }
 }
This page took 0.029168 seconds and 5 git commands to generate.