From d3c2bf8d8ad992b78eab0922f6ba5e447399007b Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Tue, 10 Feb 2015 14:55:07 -0500 Subject: [PATCH] tmf: Don't open trace files with validation confidence 0 (Bug 436444) ... and only one valid applicable trace type is available. Change-Id: Id6494df2bf78d1be079ef12e729d6a869c81d260 Signed-off-by: Bernd Hufmann Reviewed-on: https://git.eclipse.org/r/41566 Reviewed-by: Hudson CI Reviewed-by: Marc-Andre Laperle Tested-by: Marc-Andre Laperle --- .../doc/Developer-Guide.mediawiki | 8 ++++---- .../ui/project/model/TmfTraceTypeUIUtils.java | 20 ++++++++++++++++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki b/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki index f69ae8ed7f..10850ae1c8 100644 --- a/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki +++ b/doc/org.eclipse.tracecompass.doc.dev/doc/Developer-Guide.mediawiki @@ -83,14 +83,14 @@ org.eclipse.tracecompass.tracing.examples.core.trace.nexus.NexusTrace.java. 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. diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java index 3a4271d18b..ac5ce5a171 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java @@ -9,10 +9,12 @@ * 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; @@ -212,9 +214,15 @@ public final class TmfTraceTypeUIUtils { 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> candidates = new ArrayList<>(validCandidates); List> reducedCandidates = reduce(candidates); for (Pair candidatePair : reducedCandidates) { @@ -228,7 +236,10 @@ public final class TmfTraceTypeUIUtils { 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 candidate = reducedCandidates.get(0); // if the best match has lowest confidence, don't select it @@ -240,7 +251,10 @@ public final class TmfTraceTypeUIUtils { } } } 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; } -- 2.34.1