In this example, the '''validate''' function first checks if the file
exists, then makes sure that it is really a file, and not a directory. Then we
attempt to read the file header, to make sure that it is really a Nexus Trace.
-If that check passes, we return a TmfValidationStatus with a confidence of 20.
+If that check passes, we return a TraceValidationStatus with a confidence of 20.
-Typically, TmfValidationStatus confidences should range from 1 to 100. 1 meaning
+Typically, TraceValidationStatus confidences should range from 1 to 100. 1 meaning
"there is a very small chance that this trace is of this type", and 100 meaning
"it is this type for sure, and cannot be anything else". At run-time, the
-auto-detection will pick the the type which returned the highest confidence. So
+auto-detection will pick the type which returned the highest confidence. So
checks of the type "does the file exist?" should not return a too high
-confidence.
+confidence. If confidence 0 is returned the auto-detection won't pick this type.
Here we used a confidence of 20, to leave "room" for more specific trace types
in the Nexus format that could be defined in TMF.
* Contributors:
* Alexandre Montplaisir - Initial API and implementation
* Patrick Tasse - Add support for folder elements
+ * Bernd Hufmann - Update trace type auto-detection
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.project.model;
+import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
TraceTypeHelper traceTypeToSet = null;
if (validCandidates.isEmpty()) {
+ File traceFile = new File(path);
+ if (traceFile.isFile()) {
+ return null;
+ }
final String errorMsg = NLS.bind(Messages.TmfOpenTraceHelper_NoTraceTypeMatch, path);
throw new TmfTraceImportException(errorMsg);
- } else if (validCandidates.size() != 1) {
+ }
+
+ if (validCandidates.size() != 1) {
List<Pair<Integer, TraceTypeHelper>> candidates = new ArrayList<>(validCandidates);
List<Pair<Integer, TraceTypeHelper>> reducedCandidates = reduce(candidates);
for (Pair<Integer, TraceTypeHelper> candidatePair : reducedCandidates) {
if (reducedCandidates.size() == 0) {
throw new TmfTraceImportException(Messages.TmfOpenTraceHelper_ReduceError);
} else if (reducedCandidates.size() == 1) {
- traceTypeToSet = reducedCandidates.get(0).getSecond();
+ // Don't select the trace type if it has the lowest confidence
+ if (reducedCandidates.get(0).getFirst() > 0) {
+ traceTypeToSet = reducedCandidates.get(0).getSecond();
+ }
} else if (shell == null) {
Pair<Integer, TraceTypeHelper> candidate = reducedCandidates.get(0);
// if the best match has lowest confidence, don't select it
}
}
} else {
- traceTypeToSet = validCandidates.first().getSecond();
+ // Don't select the trace type if it has the lowest confidence
+ if (validCandidates.first().getFirst() > 0) {
+ traceTypeToSet = validCandidates.first().getSecond();
+ }
}
return traceTypeToSet;
}