package org.eclipse.tracecompass.lttng2.kernel.core.trace;
-import java.nio.BufferOverflowException;
import java.util.Collection;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.ThreadPriorityAspect;
import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.KernelTidAspect;
+import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.ThreadPriorityAspect;
import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelTrace;
import org.eclipse.tracecompass.common.core.NonNullUtils;
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
-import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
+import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTraceValidationStatus;
import com.google.common.collect.ImmutableSet;
*/
@Override
public IStatus validate(final IProject project, final String path) {
- /*
- * Make sure the trace is openable as a CTF trace. We do this here
- * instead of calling super.validate() to keep the reference to "temp".
- */
- try (CtfTmfTrace temp = new CtfTmfTrace();) {
- temp.initTrace((IResource) null, path, CtfTmfEvent.class);
-
+ IStatus status = super.validate(project, path);
+ if (status instanceof CtfTraceValidationStatus) {
+ Map<String, String> environment = ((CtfTraceValidationStatus) status).getEnvironment();
/* Make sure the domain is "kernel" in the trace's env vars */
- String dom = temp.getEnvironment().get("domain"); //$NON-NLS-1$
- if (dom != null && dom.equals("\"kernel\"")) { //$NON-NLS-1$
- return new TraceValidationStatus(CONFIDENCE, Activator.PLUGIN_ID);
+ String domain = environment.get("domain"); //$NON-NLS-1$
+ if (domain == null || !domain.equals("\"kernel\"")) { //$NON-NLS-1$
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngKernelTrace_DomainError);
}
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngKernelTrace_DomainError);
-
- } catch (TmfTraceException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), e);
- } catch (NullPointerException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), e);
- } catch (final BufferOverflowException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngKernelTrace_TraceReadError + ": " + Messages.LttngKernelTrace_MalformedTrace); //$NON-NLS-1$
+ return new TraceValidationStatus(CONFIDENCE, Activator.PLUGIN_ID);
}
+ return status;
}
@Override
package org.eclipse.tracecompass.lttng2.ust.core.trace;
-import java.nio.BufferOverflowException;
+import java.util.Map;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.tracecompass.internal.lttng2.ust.core.Activator;
-import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
-import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
+import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTraceValidationStatus;
/**
* Class to contain LTTng-UST traces
*/
@Override
public IStatus validate(final IProject project, final String path) {
- try (CtfTmfTrace temp = new CtfTmfTrace();) {
- temp.initTrace((IResource) null, path, CtfTmfEvent.class);
-
+ IStatus status = super.validate(project, path);
+ if (status instanceof CtfTraceValidationStatus) {
+ Map<String, String> environment = ((CtfTraceValidationStatus) status).getEnvironment();
/* Make sure the domain is "ust" in the trace's env vars */
- String dom = temp.getEnvironment().get("domain"); //$NON-NLS-1$
- if (dom != null && dom.equals("\"ust\"")) { //$NON-NLS-1$
- return new TraceValidationStatus(CONFIDENCE, Activator.PLUGIN_ID);
+ String domain = environment.get("domain"); //$NON-NLS-1$
+ if (domain == null || !domain.equals("\"ust\"")) { //$NON-NLS-1$
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngUstTrace_DomainError);
}
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngUstTrace_DomainError);
-
- } catch (TmfTraceException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), e);
- } catch (NullPointerException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), e);
- } catch (final BufferOverflowException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngUstTrace_TraceReadError + ": " + Messages.LttngUstTrace_MalformedTrace); //$NON-NLS-1$
+ return new TraceValidationStatus(CONFIDENCE, Activator.PLUGIN_ID);
}
+ return status;
}
}
import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceProperties;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
-import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfPersistentlyIndexable;
import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfTraceIndexer;
import org.eclipse.tracecompass.tmf.core.trace.indexer.TmfBTreeTraceIndexer;
*/
@Override
public IStatus validate(final IProject project, final String path) {
- IStatus status = new TraceValidationStatus(CONFIDENCE, Activator.PLUGIN_ID);
try {
- final CTFTrace temp = new CTFTrace(path);
- if (!temp.majorIsSet()) {
- status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_MajorNotSet);
- } else {
- try (CTFTraceReader ctfTraceReader = new CTFTraceReader(temp);) {
- if (!ctfTraceReader.hasMoreEvents()) {
- // TODO: This will need an additional check when we
- // support live traces
- // because having no event is valid for a live trace
- status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_NoEvent);
- }
+ final CTFTrace trace = new CTFTrace(path);
+ if (!trace.majorIsSet()) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_MajorNotSet);
+ }
+ try (CTFTraceReader ctfTraceReader = new CTFTraceReader(trace)) {
+ if (!ctfTraceReader.hasMoreEvents()) {
+ // TODO: This will need an additional check when we
+ // support live traces
+ // because having no event is valid for a live trace
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_NoEvent);
}
}
+ return new CtfTraceValidationStatus(CONFIDENCE, Activator.PLUGIN_ID, trace.getEnvironment());
} catch (final CTFReaderException e) {
- status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_ReadingError + ": " + e.toString()); //$NON-NLS-1$
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_ReadingError + ": " + e.toString()); //$NON-NLS-1$
} catch (final BufferOverflowException e) {
- status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_ReadingError + ": " + Messages.CtfTmfTrace_BufferOverflowErrorMessage); //$NON-NLS-1$
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_ReadingError + ": " + Messages.CtfTmfTrace_BufferOverflowErrorMessage); //$NON-NLS-1$
}
-
- return status;
}
@Override
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2015 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tasse - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.ctf.core.trace;
+
+import java.util.Map;
+
+import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
+
+/**
+ * Trace validation status that contains additional information from a CTF
+ * trace for further validation.
+ *
+ * @since 1.0
+ */
+public class CtfTraceValidationStatus extends TraceValidationStatus {
+
+ private final Map<String, String> fEnvironment;
+
+ /**
+ * Constructor
+ *
+ * @param confidence
+ * the confidence level, 0 is lowest
+ * @param pluginId
+ * the unique identifier of the relevant plug-in
+ * @param environment
+ * the CTF trace environment variables
+ */
+ public CtfTraceValidationStatus(int confidence, String pluginId, Map<String, String> environment) {
+ super(confidence, pluginId);
+ fEnvironment = environment;
+ }
+
+ /**
+ * Get the CTF trace environment variables
+ *
+ * @return the CTF trace environment variables
+ */
+ public Map<String, String> getEnvironment() {
+ return fEnvironment;
+ }
+
+}