tmf: Remove use of CtfTmfTrace instance during CTF trace validation
authorPatrick Tasse <patrick.tasse@gmail.com>
Thu, 2 Apr 2015 14:09:08 +0000 (10:09 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Thu, 2 Apr 2015 19:07:02 +0000 (15:07 -0400)
This prevents unnecessary stuff from happening, such as creating an
indexer and its files.

It also makes sure all validations from the super class are executed.

Change-Id: I76823a12727f4a4a82d8969b6730bfd30570d369
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/45143
Reviewed-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java
org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/trace/LttngUstTrace.java
org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfTmfTrace.java
org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfTraceValidationStatus.java [new file with mode: 0644]

index c0b58849b4f53624708a12f4efaaf79adb76e7d0..7f93ba071e03b541a8ea5a7e12a2baf7a2501c01 100644 (file)
@@ -13,7 +13,6 @@
 
 package org.eclipse.tracecompass.lttng2.kernel.core.trace;
 
-import java.nio.BufferOverflowException;
 import java.util.Collection;
 import java.util.Map;
 
@@ -22,8 +21,8 @@ import org.eclipse.core.resources.IResource;
 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;
@@ -35,8 +34,8 @@ import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 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;
 
@@ -136,27 +135,17 @@ public class LttngKernelTrace extends CtfTmfTrace implements IKernelTrace {
      */
     @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
index e8ca9502f681f7f393f6235218b53af51066913f..fd56bf0ea41d3a2b733059e2c576b86bb3e477fc 100644 (file)
 
 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
@@ -50,22 +48,16 @@ public class LttngUstTrace extends CtfTmfTrace {
      */
     @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;
     }
 }
index 4ca6542e855833f7f2af57d9bd319e2dbf7e1a67..558192460365561d94311fea42a99573334156b6 100644 (file)
@@ -54,7 +54,6 @@ import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
 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;
@@ -221,28 +220,25 @@ public class CtfTmfTrace extends TmfTrace
      */
     @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
diff --git a/org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfTraceValidationStatus.java b/org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/tmf/ctf/core/trace/CtfTraceValidationStatus.java
new file mode 100644 (file)
index 0000000..cc407a5
--- /dev/null
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * 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;
+    }
+
+}
This page took 0.029535 seconds and 5 git commands to generate.