From 8df075b5bc587df1b420d140c1a0b98658bc1f9f Mon Sep 17 00:00:00 2001 From: Francois Chouinard Date: Wed, 9 Jan 2013 18:43:32 -0500 Subject: [PATCH] Add a trace filter to the set of event filters in TmfRequests Change-Id: I789199d1f9b6d83060ee6a43426d8885e552268d Signed-off-by: Francois Chouinard Reviewed-on: https://git.eclipse.org/r/9577 Tested-by: Hudson CI --- .../tests/request/TmfBlockFilterTest.java | 2 - .../tests/request/TmfEventTypeFilterTest.java | 2 - .../tests/request/TmfRangeFilterTest.java | 2 - .../tests/request/TmfTraceFilterTest.java | 237 ++++++++++++++++++ .../tmf/core/request/TmfTraceFilter.java | 143 +++++++++++ 5 files changed, 380 insertions(+), 6 deletions(-) create mode 100644 org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfTraceFilterTest.java create mode 100644 org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/request/TmfTraceFilter.java diff --git a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfBlockFilterTest.java b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfBlockFilterTest.java index 5c2eadd2aa..94e6ccc0d7 100644 --- a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfBlockFilterTest.java +++ b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfBlockFilterTest.java @@ -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()); } diff --git a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfEventTypeFilterTest.java b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfEventTypeFilterTest.java index 6d4adb627e..a3afb38af4 100644 --- a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfEventTypeFilterTest.java +++ b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfEventTypeFilterTest.java @@ -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()); } diff --git a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfRangeFilterTest.java b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfRangeFilterTest.java index c582852398..48191a6aa4 100644 --- a/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfRangeFilterTest.java +++ b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfRangeFilterTest.java @@ -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 index 0000000000..ec4d0fa8c2 --- /dev/null +++ b/org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfTraceFilterTest.java @@ -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; + +/** + * TmfTraceFilterTest + *

+ * 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 index 0000000000..f89d11a9b9 --- /dev/null +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/request/TmfTraceFilter.java @@ -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) + "]"; + } + +} -- 2.34.1