Add a trace filter to the set of event filters in TmfRequests
authorFrancois Chouinard <fchouinard@gmail.com>
Wed, 9 Jan 2013 23:43:32 +0000 (18:43 -0500)
committerFrancois Chouinard <fchouinard@gmail.com>
Thu, 10 Jan 2013 15:37:52 +0000 (10:37 -0500)
Change-Id: I789199d1f9b6d83060ee6a43426d8885e552268d
Signed-off-by: Francois Chouinard <fchouinard@gmail.com>
Reviewed-on: https://git.eclipse.org/r/9577
Tested-by: Hudson CI
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfBlockFilterTest.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfEventTypeFilterTest.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfRangeFilterTest.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfTraceFilterTest.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/request/TmfTraceFilter.java [new file with mode: 0644]

index 5c2eadd2aab96821620a8e87d92d97b3c55877e1..94e6ccc0d7bc72b764e4ff3a6a58a9bfecfa9fff 100644 (file)
@@ -155,8 +155,6 @@ public class TmfBlockFilterTest extends TestCase {
         TmfBlockFilter filter1 = new TmfBlockFilter( 0, 1000);
         TmfBlockFilter filter2 = new TmfBlockFilter(10, 1000);
 
-        assertEquals("hashCode", filter1.hashCode(), filter1.hashCode());
-        assertEquals("hashCode", filter2.hashCode(), filter2.hashCode());
         assertFalse("hashCode",  filter1.hashCode() == filter2.hashCode());
     }
 
index 6d4adb627e108fb6f5ae6f10319e5b4983d6dfb3..a3afb38af410789921da85f8eefacb0182c97d63 100644 (file)
@@ -138,8 +138,6 @@ public class TmfEventTypeFilterTest extends TestCase {
         TmfEventTypeFilter filter1 = new TmfEventTypeFilter(ITmfEvent.class);
         TmfEventTypeFilter filter2 = new TmfEventTypeFilter(TmfEvent.class);
 
-        assertEquals("hashCode", filter1.hashCode(), filter1.hashCode());
-        assertEquals("hashCode", filter2.hashCode(), filter2.hashCode());
         assertFalse("hashCode",  filter1.hashCode() == filter2.hashCode());
     }
 
index c5828523983697e306f56f21fb674c8cc227c241..48191a6aa42f0f06c8b6fe54a2d49a8da8adece4 100644 (file)
@@ -154,8 +154,6 @@ public class TmfRangeFilterTest extends TestCase {
         TmfRangeFilter filter1 = new TmfRangeFilter(range1);
         TmfRangeFilter filter2 = new TmfRangeFilter(range2);
 
-        assertEquals("hashCode", filter1.hashCode(), filter1.hashCode());
-        assertEquals("hashCode", filter2.hashCode(), filter2.hashCode());
         assertFalse("hashCode",  filter1.hashCode() == filter2.hashCode());
     }
 
diff --git a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfTraceFilterTest.java b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfTraceFilterTest.java
new file mode 100644 (file)
index 0000000..ec4d0fa
--- /dev/null
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2012 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.core.tests.request;
+
+import junit.framework.TestCase;
+
+import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
+import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.core.request.TmfTraceFilter;
+import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
+import org.eclipse.linuxtools.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.Test;
+
+/**
+ * <b><u>TmfTraceFilterTest</u></b>
+ * <p>
+ * Test suite for the TmfTraceFilter class.
+ */
+@SuppressWarnings({"nls","javadoc"})
+public class TmfTraceFilterTest extends TestCase {
+
+    // ------------------------------------------------------------------------
+    // Constants
+    // ------------------------------------------------------------------------
+
+    private static final TmfTraceFilter ALL_TRACES = TmfTraceFilter.ALL_TRACES;
+
+    // ------------------------------------------------------------------------
+       // Housekeeping
+       // ------------------------------------------------------------------------
+
+    /**
+     * @param name the test name
+     */
+       public TmfTraceFilterTest(String name) {
+               super(name);
+       }
+
+       @Override
+       protected void setUp() throws Exception {
+               super.setUp();
+       }
+
+       @Override
+       protected void tearDown() throws Exception {
+               super.tearDown();
+       }
+
+    // ------------------------------------------------------------------------
+       // Constructors
+       // ------------------------------------------------------------------------
+
+       @Test
+       public void testTmfTraceFilter() {
+        ITmfTrace trace1 = new TmfTraceStub();
+        ITmfTrace trace2 = new TmfTraceStub();
+        ITmfTrace[] traces;
+
+           TmfTraceFilter filter = ALL_TRACES;
+           traces = filter.getTraces();
+        assertEquals("getTraces", 0, traces.length);
+        assertEquals("getTraces", ALL_TRACES.getTraces(), filter.getTraces());
+
+        filter = new TmfTraceFilter();
+        traces = filter.getTraces();
+        assertEquals("getTraces", 0, traces.length);
+        assertEquals("getTraces", ALL_TRACES.getTraces(), filter.getTraces());
+
+        filter = new TmfTraceFilter(new ITmfTrace[] { trace1 });
+        traces = filter.getTraces();
+        assertEquals("getTraces", 1, traces.length);
+        assertEquals("getTraces", trace1, traces[0]);
+
+        filter = new TmfTraceFilter(new ITmfTrace[] { trace2 });
+        traces = filter.getTraces();
+        assertEquals("getTraces", 1, traces.length);
+        assertEquals("getTraces", trace2, traces[0]);
+
+        filter = new TmfTraceFilter(new ITmfTrace[] { trace1, trace2 });
+        traces = filter.getTraces();
+        assertEquals("getTraces", 2, traces.length);
+        assertEquals("getTraces", trace1, traces[0]);
+        assertEquals("getTraces", trace2, traces[1]);
+       }
+
+    @Test
+    public void testTmfTraceFilterCopy() {
+        ITmfTrace trace1 = new TmfTraceStub();
+        ITmfTrace trace2 = new TmfTraceStub();
+
+        TmfTraceFilter filter1 = new TmfTraceFilter(new ITmfTrace[] { trace1, trace2 });
+        TmfTraceFilter filter2 = new TmfTraceFilter(filter1);
+        ITmfTrace[] traces = filter2.getTraces();
+        assertEquals("getTraces", 2, traces.length);
+        assertEquals("getTraces", trace1, traces[0]);
+        assertEquals("getTraces", trace2, traces[1]);
+    }
+
+    // ------------------------------------------------------------------------
+    // equals
+    // ------------------------------------------------------------------------
+
+    @Test
+    public void testEqualsReflexivity() {
+        TmfTraceFilter filter1 = new TmfTraceFilter();
+        TmfTraceFilter filter2 = new TmfTraceFilter(new ITmfTrace[] { new TmfTraceStub() });
+
+        assertEquals("equals", filter1, filter1);
+        assertEquals("equals", filter2, filter2);
+
+        assertFalse("equals", filter1.equals(filter2));
+        assertFalse("equals", filter2.equals(filter1));
+    }
+
+    @Test
+    public void testEqualsSymmetry() {
+        TmfTraceFilter filter1 = new TmfTraceFilter();
+        TmfTraceFilter filter2 = new TmfTraceFilter();
+        TmfTraceFilter filter3 = new TmfTraceFilter(new ITmfTrace[] { new TmfTraceStub() });
+
+        assertEquals("equals", filter1, filter2);
+        assertEquals("equals", filter2, filter1);
+
+        assertFalse("equals", filter1.equals(filter3));
+        assertFalse("equals", filter3.equals(filter1));
+    }
+
+    @Test
+    public void testEqualsTransivity() {
+        TmfTraceFilter filter1 = new TmfTraceFilter();
+        TmfTraceFilter filter2 = new TmfTraceFilter();
+        TmfTraceFilter filter3 = new TmfTraceFilter();
+
+        assertEquals("equals", filter1, filter2);
+        assertEquals("equals", filter2, filter3);
+        assertEquals("equals", filter3, filter1);
+
+        ITmfTrace trace = new TmfTraceStub();
+        filter1 = new TmfTraceFilter(new ITmfTrace[] { trace });
+        filter2 = new TmfTraceFilter(new ITmfTrace[] { trace });
+        filter3 = new TmfTraceFilter(new ITmfTrace[] { trace });
+
+        assertEquals("equals", filter1, filter2);
+        assertEquals("equals", filter2, filter3);
+        assertEquals("equals", filter3, filter1);
+    }
+
+    @Test
+    public void testEqualsNull() {
+        TmfTraceFilter filter1 = new TmfTraceFilter();
+        TmfTraceFilter filter2 = new TmfTraceFilter(new ITmfTrace[] { new TmfTraceStub() });
+
+        assertFalse("equals", filter1.equals(null));
+        assertFalse("equals", filter2.equals(null));
+    }
+
+    // ------------------------------------------------------------------------
+    // hashCode
+    // ------------------------------------------------------------------------
+
+    @Test
+    public void testHashCode() {
+        TmfTraceFilter filter1 = new TmfTraceFilter();
+        TmfTraceFilter filter2 = new TmfTraceFilter(new ITmfTrace[] { new TmfTraceStub() });
+
+        assertFalse("hashCode",  filter1.hashCode() == filter2.hashCode());
+    }
+
+       // ------------------------------------------------------------------------
+       // toString
+       // ------------------------------------------------------------------------
+
+    @Test
+    public void testToString() {
+        ITmfTrace trace = new TmfTraceStub();
+        TmfTraceFilter filter1 = new TmfTraceFilter();
+        TmfTraceFilter filter2 = new TmfTraceFilter(new ITmfTrace[] { trace });
+
+        String expected1 = "TmfTraceFilter [fTraces=[]]";
+        String expected2 = "TmfTraceFilter [fTraces=[" + trace + "]]";
+
+        assertEquals("toString", expected1, filter1.toString());
+        assertEquals("toString", expected2, filter2.toString());
+    }
+
+    // ------------------------------------------------------------------------
+    // matches
+    // ------------------------------------------------------------------------
+
+    /**
+     * The only test that really matters...
+     */
+    @Test
+    public void testMatches() {
+        ITmfTrace trace0 = new TmfTraceStub();
+        ITmfTrace trace1 = new TmfTraceStub();
+        ITmfTrace trace2 = new TmfTraceStub();
+
+        TmfTraceFilter filter0 = new TmfTraceFilter();
+        TmfTraceFilter filter1 = new TmfTraceFilter(new ITmfTrace[] { trace1 });
+        TmfTraceFilter filter2 = new TmfTraceFilter(new ITmfTrace[] { trace2 });
+        TmfTraceFilter filter3 = new TmfTraceFilter(new ITmfTrace[] { trace1, trace2 });
+
+        ITmfEvent event = new TmfEvent(trace0, 0, new TmfTimestamp(0), null, null, null, null);
+        assertTrue ("matches", TmfTraceFilter.ALL_TRACES.matches(event));
+        assertTrue ("matches", filter0.matches(event));
+        assertFalse("matches", filter1.matches(event));
+        assertFalse("matches", filter2.matches(event));
+        assertFalse("matches", filter3.matches(event));
+
+        event = new TmfEvent(trace1, 0, new TmfTimestamp(0), null, null, null, null);
+        assertTrue ("matches", TmfTraceFilter.ALL_TRACES.matches(event));
+        assertTrue ("matches", filter0.matches(event));
+        assertTrue ("matches", filter1.matches(event));
+        assertFalse("matches", filter2.matches(event));
+        assertTrue ("matches", filter3.matches(event));
+
+        event = new TmfEvent(trace2, 0, new TmfTimestamp(0), null, null, null, null);
+        assertTrue ("matches", TmfTraceFilter.ALL_TRACES.matches(event));
+        assertTrue ("matches", filter0.matches(event));
+        assertFalse("matches", filter1.matches(event));
+        assertTrue ("matches", filter2.matches(event));
+        assertTrue ("matches", filter3.matches(event));
+    }
+
+}
diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/request/TmfTraceFilter.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/request/TmfTraceFilter.java
new file mode 100644 (file)
index 0000000..f89d11a
--- /dev/null
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2012 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.core.request;
+
+import java.util.Arrays;
+
+import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
+import org.eclipse.linuxtools.tmf.core.filter.ITmfFilter;
+import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
+
+/**
+ * An event filter based on the event's trace.
+ *
+ * @author Francois Chouinard
+ * @version 1.0
+ * @since 2.0
+ */
+public final class TmfTraceFilter implements ITmfFilter {
+
+    // ------------------------------------------------------------------------
+    // Constants
+    // ------------------------------------------------------------------------
+
+    /**
+     * Filter for all events by time range
+     */
+    public  static final TmfTraceFilter ALL_TRACES = new TmfTraceFilter(new ITmfTrace[0]);
+
+    // ------------------------------------------------------------------------
+    // Attributes
+    // ------------------------------------------------------------------------
+
+    /** The traces of interest */
+    private final ITmfTrace[] fTraces;
+
+    // ------------------------------------------------------------------------
+    // Constructors
+    // ------------------------------------------------------------------------
+
+    /**
+     * Default constructor
+     */
+    public TmfTraceFilter() {
+        this(ALL_TRACES);
+    }
+
+    /**
+     * Standard constructor
+     *
+     * @param traces the traces of interest
+     */
+    public TmfTraceFilter(ITmfTrace[] traces) {
+        fTraces = traces;
+    }
+
+    /**
+     * Copy constructor
+     *
+     * @param other the other filter
+     */
+    public TmfTraceFilter(TmfTraceFilter other) {
+        fTraces = other.fTraces;
+    }
+
+    // ------------------------------------------------------------------------
+    // Getters
+    // ------------------------------------------------------------------------
+
+    /**
+     * @return the filter traces
+     */
+    public ITmfTrace[] getTraces() {
+        return fTraces;
+    }
+
+    // ------------------------------------------------------------------------
+    // ITmfFilter
+    // ------------------------------------------------------------------------
+
+    /* (non-Javadoc)
+     * @see org.eclipse.linuxtools.tmf.core.filter.ITmfFilter#matches(org.eclipse.linuxtools.tmf.core.event.ITmfEvent)
+     */
+    @Override
+    public boolean matches(ITmfEvent event) {
+        // The empty set is the universal element
+        if (fTraces.length == 0) {
+            return true;
+        }
+        for (ITmfTrace trace : fTraces) {
+            if (event.getTrace() == trace) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    // ------------------------------------------------------------------------
+    // Object
+    // ------------------------------------------------------------------------
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + Arrays.hashCode(fTraces);
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof TmfTraceFilter)) {
+            return false;
+        }
+        TmfTraceFilter other = (TmfTraceFilter) obj;
+        if (!Arrays.equals(fTraces, other.fTraces)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    @SuppressWarnings("nls")
+    public String toString() {
+        return "TmfTraceFilter [fTraces=" + Arrays.toString(fTraces) + "]";
+    }
+
+}
This page took 0.029338 seconds and 5 git commands to generate.