// ------------------
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;
updateScanQueue(pm, filesToScan, added);
} catch (InterruptedException e) {
}
+
}
/*
fTracesToScan.put(tv);
monitor.subTask(tv.getTraceToScan());
if (monitor.isCanceled()) {
+ fScanPage.refresh();
return CANCEL_STATUS;
}
}
}
}
}
+ fScanPage.refresh();
return Status.OK_STATUS;
}
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;
*/
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
*
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);
}
@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
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;
/**
* 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;
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;
init();
getBatchWizard().setTracesToScan(fTracesToScan);
getBatchWizard().setTraceFolder(fTargetFolder);
+
fRunnable.schedule();
setErrorMessage(Messages.ImportTraceWizardScanPageSelectAtleastOne);
}
private final class ScanRunnable extends Job {
+ private IProgressMonitor fMonitor;
+
public ScanRunnable(String name) {
super(name);
}
- private IProgressMonitor fMonitor;
-
private synchronized IProgressMonitor getMonitor() {
return fMonitor;
}
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);
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();
+ }
+ }
+ });
+ }
+ }
}