tmf: Add an event names requirement
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Tue, 8 Mar 2016 20:40:10 +0000 (15:40 -0500)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Fri, 15 Apr 2016 15:59:48 +0000 (11:59 -0400)
It is preferable to use inheritance instead of String-typed values.

Change-Id: I62eaa0f7a01ac459ed06c471379f8f20bcd9b4ef
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/68014
Reviewed-by: Hudson CI
Reviewed-by: Alexandre Montplaisir <alexmonthy@efficios.com>
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/requirements/TmfAnalysisEventRequirement.java [new file with mode: 0644]

diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java
new file mode 100644 (file)
index 0000000..a54e187
--- /dev/null
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2016 École Polytechnique de Montréal
+ *
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.core.tests.analysis.requirements;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventRequirement;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisRequirement;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisRequirement.ValuePriorityLevel;
+import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
+import org.eclipse.tracecompass.tmf.core.event.ITmfEventType;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
+import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Test the {@link TmfAnalysisEventRequirement} class
+ *
+ * @author Geneviève Bastien
+ */
+public class AnalysisEventRequirementTest {
+
+    private static final @NonNull String EVENT1 = "abc";
+    private static final @NonNull String EVENT2 = "def";
+    private static final @NonNull String EVENT3 = "ghi";
+
+    /* A trace class with pre-defined events */
+    private static class TraceWithEvents extends TmfTraceStub implements ITmfTraceWithPreDefinedEvents {
+
+        @Override
+        public @NonNull Set<? extends @NonNull ITmfEventType> getContainedEventTypes() {
+            return ImmutableSet.of(
+                    new ITmfEventType() {
+
+                        @Override
+                        public @NonNull String getName() {
+                            return EVENT1;
+                        }
+
+                        @Override
+                        public ITmfEventField getRootField() {
+                            return null;
+                        }
+
+                        @Override
+                        public Collection<String> getFieldNames() {
+                            return null;
+                        }
+                    },
+                    new ITmfEventType() {
+
+                        @Override
+                        public @NonNull String getName() {
+                            return EVENT2;
+                        }
+
+                        @Override
+                        public ITmfEventField getRootField() {
+                            return null;
+                        }
+
+                        @Override
+                        public Collection<String> getFieldNames() {
+                            return null;
+                        }
+                    });
+        }
+
+    }
+
+    private final @NonNull TmfTrace fTrace = new TraceWithEvents();
+
+    /**
+     * Test with optional requirements
+     */
+    @Test
+    public void testOptionalRequirements() {
+        /* Test optional requirement */
+        TmfAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1));
+        assertTrue(req.isFulfilled(fTrace));
+
+        req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT3));
+        assertTrue(req.isFulfilled(fTrace));
+
+        /* FIXME: if no optional requirement is fulfilled it should fail */
+        req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3));
+        assertTrue(req.isFulfilled(fTrace));
+    }
+
+    /**
+     * Test with mandatory requirements
+     */
+    @Test
+    public void testMandatoryRequirements() {
+        /* Test mandatory requirement */
+        TmfAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1), ValuePriorityLevel.MANDATORY);
+        assertTrue(req.isFulfilled(fTrace));
+
+        req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), ValuePriorityLevel.MANDATORY);
+        assertTrue(req.isFulfilled(fTrace));
+
+        /* Event 3 is not an event of the trace */
+        req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2, EVENT3), ValuePriorityLevel.MANDATORY);
+        assertFalse(req.isFulfilled(fTrace));
+
+        req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT3), ValuePriorityLevel.MANDATORY);
+        assertFalse(req.isFulfilled(fTrace));
+    }
+
+    /**
+     * Test event requirements on a trace with no pre-defined events. They
+     * should all pass
+     */
+    @Test
+    public void testNoPreDefinedEvents() {
+        /* A simple trace with no pre-defined events */
+        TmfTrace traceNoEvents = new TmfTraceStub();
+
+        TmfAnalysisRequirement req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT3), ValuePriorityLevel.MANDATORY);
+        assertTrue(req.isFulfilled(traceNoEvents));
+
+        req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), ValuePriorityLevel.OPTIONAL);
+        assertTrue(req.isFulfilled(traceNoEvents));
+
+    }
+
+}
diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/requirements/TmfAnalysisEventRequirement.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/requirements/TmfAnalysisEventRequirement.java
new file mode 100644 (file)
index 0000000..dcc05a8
--- /dev/null
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2016 École Polytechnique de Montréal
+ *
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.core.analysis.requirements;
+
+import java.util.Set;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents;
+import org.eclipse.tracecompass.tmf.core.trace.TmfEventTypeCollectionHelper;
+
+/**
+ * An analysis requirement for event names
+ *
+ * @author Geneviève Bastien
+ * @since 2.0
+ */
+public class TmfAnalysisEventRequirement extends TmfAnalysisRequirement {
+
+    /**
+     * Constructor for an optional requirement
+     *
+     * TODO: The TYPE_EVENT should be removed and this class used instead
+     *
+     * @param eventNames
+     *            The list of event names the trace must have
+     */
+    public TmfAnalysisEventRequirement(Iterable<String> eventNames) {
+        super(TmfAnalysisRequirement.TYPE_EVENT, eventNames, ValuePriorityLevel.OPTIONAL);
+    }
+
+    /**
+     * Constructor. Instantiate a requirement object with a list of values of
+     * the same level
+     *
+     * @param eventNames
+     *            The list of event names the trace must have
+     * @param level
+     *            A level associated with all the values
+     */
+    public TmfAnalysisEventRequirement(Iterable<String> eventNames, ValuePriorityLevel level) {
+        super(TmfAnalysisRequirement.TYPE_EVENT, eventNames, level);
+    }
+
+    @Override
+    public boolean isFulfilled(@NonNull ITmfTrace trace) {
+
+        if (trace instanceof ITmfTraceWithPreDefinedEvents) {
+            Set<String> traceEvents = TmfEventTypeCollectionHelper.getEventNames(((ITmfTraceWithPreDefinedEvents) trace).getContainedEventTypes());
+            Set<String> mandatoryValues = getValues(ValuePriorityLevel.MANDATORY);
+            return traceEvents.containsAll(mandatoryValues);
+        }
+
+        return true;
+    }
+
+}
This page took 0.028291 seconds and 5 git commands to generate.