From b04903a2c612038cc7375c0bbfd3b24b74469c29 Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Tue, 11 Nov 2014 15:33:28 -0500 Subject: [PATCH] tmf: Remove the ITmfEventTableColumns extension point Add a getEventAspects() method in ITmfTrace, which allows trace types to define which aspects can be relevant for their own events. This becomes redundant with the ITmfEventTableColumn extension point: now that we build columns directly from aspects, the TmfEventsEditor can simply call trace.getEventAspects() instead of reading extension point data. The trace type is already defined in a core extension point, so we'll pass the event aspect information through that now. The combination of careful equals() methods in aspects and the use of a Set in the TmfEventsEditor will allow "merging" aspects/columns together, like was already the case. Change-Id: Ic5b6126a50b1b1fdb4b2d5d23eb6a47a57555594 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/36364 Tested-by: Hudson CI --- .../btf/core/trace/BtfEventAspects.java | 45 ++-- .../tracecompass/btf/core/trace/BtfTrace.java | 6 + .../build.properties | 3 +- org.eclipse.tracecompass.btf.ui/plugin.xml | 3 - .../META-INF/MANIFEST.MF | 1 + .../gdbtrace/core/trace/GdbEventAspects.java | 34 ++-- .../gdbtrace/core/trace/GdbTrace.java | 6 + .../plugin.xml | 3 - .../ui/views/events/GdbEventsTable.java | 3 +- .../META-INF/MANIFEST.MF | 1 + .../core/event/aspect/LttngEventAspects.java | 48 ++--- .../kernel/core/event/aspect}/Messages.java | 14 +- .../core/event/aspect}/messages.properties | 7 +- .../kernel/core/trace/LttngKernelTrace.java | 9 +- .../META-INF/MANIFEST.MF | 1 - .../plugin.xml | 3 - .../META-INF/MANIFEST.MF | 1 + .../parsers/custom/CustomEventAspects.java | 44 ++-- .../core/parsers/custom/CustomTxtTrace.java | 7 + .../core/parsers/custom/CustomXmlTrace.java | 7 + .../tmf/core/trace/ITmfTrace.java | 12 ++ .../tracecompass/tmf/core/trace/TmfTrace.java | 26 ++- .../META-INF/MANIFEST.MF | 1 + .../tmf/pcap/core/event/aspect}/Messages.java | 26 ++- .../event/aspect/PcapDestinationAspect.java | 55 +++++ .../core/event/aspect/PcapProtocolAspect.java | 57 ++++++ .../event/aspect/PcapReferenceAspect.java | 50 +++++ .../core/event/aspect/PcapSourceAspect.java | 58 ++++++ .../core/event/aspect}/messages.properties | 10 +- .../pcap/core/event/aspect}/package-info.java | 2 +- .../tmf/pcap/core/trace/PcapTrace.java | 22 ++ .../META-INF/MANIFEST.MF | 1 - .../plugin.xml | 3 - .../pcap/ui/editor/PcapEventTableColumns.java | 192 ------------------ .../META-INF/MANIFEST.MF | 1 - ...eclipse.linuxtools.tmf.ui.tracetypeui.exsd | 25 --- .../CustomTxtParserOutputWizardPage.java | 8 +- .../CustomXmlParserOutputWizardPage.java | 8 +- .../tmf/ui/editors/TmfEventsEditor.java | 28 +-- .../ui/project/model/TmfTraceTypeUIUtils.java | 61 +----- .../tmf/ui/viewers/events/TmfEventsTable.java | 37 ++-- .../events/columns/ITmfEventTableColumns.java | 44 ---- 42 files changed, 463 insertions(+), 510 deletions(-) rename org.eclipse.tracecompass.btf.ui/src/org/eclipse/tracecompass/btf/ui/BtfEventTableColumns.java => org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfEventAspects.java (73%) rename org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventTableColumns.java => org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbEventAspects.java (67%) rename org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/LttngEventTableColumns.java => org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/LttngEventAspects.java (50%) rename {org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events => org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect}/Messages.java (61%) rename {org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events => org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect}/messages.properties (73%) rename org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/custom/CustomEventTableColumns.java => org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/parsers/custom/CustomEventAspects.java (60%) rename {org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor => org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect}/Messages.java (52%) create mode 100644 org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapDestinationAspect.java create mode 100644 org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapProtocolAspect.java create mode 100644 org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapReferenceAspect.java create mode 100644 org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapSourceAspect.java rename {org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor => org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect}/messages.properties (70%) rename {org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor => org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect}/package-info.java (88%) delete mode 100644 org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/PcapEventTableColumns.java delete mode 100644 org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/columns/ITmfEventTableColumns.java diff --git a/org.eclipse.tracecompass.btf.ui/src/org/eclipse/tracecompass/btf/ui/BtfEventTableColumns.java b/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfEventAspects.java similarity index 73% rename from org.eclipse.tracecompass.btf.ui/src/org/eclipse/tracecompass/btf/ui/BtfEventTableColumns.java rename to org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfEventAspects.java index 7bcbfb2612..45b5a46e65 100644 --- a/org.eclipse.tracecompass.btf.ui/src/org/eclipse/tracecompass/btf/ui/BtfEventTableColumns.java +++ b/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfEventAspects.java @@ -11,18 +11,13 @@ * Alexandre Montplaisir - Update to new Event Table API *******************************************************************************/ -package org.eclipse.tracecompass.btf.ui; - -import java.util.Collection; +package org.eclipse.tracecompass.btf.core.trace; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.btf.core.event.BtfEvent; -import org.eclipse.tracecompass.btf.core.trace.BtfColumnNames; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.event.aspect.TmfEventFieldAspect; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.ITmfEventTableColumns; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.TmfEventTableColumn; import com.google.common.collect.ImmutableList; @@ -31,22 +26,20 @@ import com.google.common.collect.ImmutableList; * * @author Alexandre Montplaisir */ -public class BtfEventTableColumns implements ITmfEventTableColumns { +public final class BtfEventAspects { - // ------------------------------------------------------------------------ - // Column definition - // ------------------------------------------------------------------------ + private BtfEventAspects() {} @SuppressWarnings("null") - private static final @NonNull Collection BTF_COLUMNS = ImmutableList.of( - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.TIMESTAMP), - new TmfEventTableColumn(new BtfSourceAspect()), - new TmfEventTableColumn(new BtfSourceInstanceAspect()), - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.EVENT_TYPE), - new TmfEventTableColumn(new BtfTargetAspect()), - new TmfEventTableColumn(new BtfTargetInstanceAspect()), - new TmfEventTableColumn(new BtfEventAspect()), - new TmfEventTableColumn(new BtfNotesAspect()) + private static final @NonNull Iterable BTF_ASPECTS = ImmutableList.of( + ITmfEventAspect.BaseAspects.TIMESTAMP, + new BtfSourceAspect(), + new BtfSourceInstanceAspect(), + ITmfEventAspect.BaseAspects.EVENT_TYPE, + new BtfTargetAspect(), + new BtfTargetInstanceAspect(), + new BtfEventAspect(), + new BtfNotesAspect() ); /** @@ -153,12 +146,12 @@ public class BtfEventTableColumns implements ITmfEventTableColumns { } } - // ------------------------------------------------------------------------ - // ITmfEventTableColumns - // ------------------------------------------------------------------------ - - @Override - public Collection getEventTableColumns() { - return BTF_COLUMNS; + /** + * Return the event aspects defined for BTF traces. + * + * @return The aspects + */ + public static Iterable getAspects() { + return BTF_ASPECTS; } } \ No newline at end of file diff --git a/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfTrace.java b/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfTrace.java index 079969a321..90e326aa3b 100644 --- a/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfTrace.java +++ b/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/trace/BtfTrace.java @@ -33,6 +33,7 @@ import org.eclipse.tracecompass.btf.core.event.BtfEvent; import org.eclipse.tracecompass.btf.core.event.BtfEventType; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.event.ITmfEventField; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.io.BufferedRandomAccessFile; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceContext; @@ -436,6 +437,11 @@ public class BtfTrace extends TmfTrace implements ITmfEventParser, ITmfPersisten return ImmutableMap.copyOf(fProperties); } + @Override + public Iterable getEventAspects() { + return BtfEventAspects.getAspects(); + } + @Override public void close() throws IOException { if (fFileInput != null) { diff --git a/org.eclipse.tracecompass.btf.ui/build.properties b/org.eclipse.tracecompass.btf.ui/build.properties index 748e4f916b..eb8eb76824 100644 --- a/org.eclipse.tracecompass.btf.ui/build.properties +++ b/org.eclipse.tracecompass.btf.ui/build.properties @@ -16,8 +16,7 @@ bin.includes = META-INF/,\ plugin.properties,\ plugin.xml,\ about.html,\ - .,\ - plugin.xml + . src.includes = about.html additional.bundles = org.eclipse.jdt.annotation jars.extra.classpath = platform:/plugin/org.eclipse.jdt.annotation diff --git a/org.eclipse.tracecompass.btf.ui/plugin.xml b/org.eclipse.tracecompass.btf.ui/plugin.xml index 8e476e1d85..594c5fa0ba 100644 --- a/org.eclipse.tracecompass.btf.ui/plugin.xml +++ b/org.eclipse.tracecompass.btf.ui/plugin.xml @@ -6,9 +6,6 @@ - - diff --git a/org.eclipse.tracecompass.gdbtrace.core/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.gdbtrace.core/META-INF/MANIFEST.MF index 041f22e0ff..b9ead48963 100644 --- a/org.eclipse.tracecompass.gdbtrace.core/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.gdbtrace.core/META-INF/MANIFEST.MF @@ -20,3 +20,4 @@ Bundle-Vendor: %Bundle-Vendor Export-Package: org.eclipse.tracecompass.internal.gdbtrace.core;x-friends:="org.eclipse.tracecompass.gdbtrace.core.tests", org.eclipse.tracecompass.internal.gdbtrace.core.event;x-friends:="org.eclipse.tracecompass.gdbtrace.ui", org.eclipse.tracecompass.internal.gdbtrace.core.trace;x-friends:="org.eclipse.tracecompass.gdbtrace.ui" +Import-Package: com.google.common.collect diff --git a/org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventTableColumns.java b/org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbEventAspects.java similarity index 67% rename from org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventTableColumns.java rename to org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbEventAspects.java index a3afc54d20..2d5f21d48d 100644 --- a/org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventTableColumns.java +++ b/org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbEventAspects.java @@ -10,9 +10,7 @@ * Alexandre Montplaisir - Initial API and implementation *******************************************************************************/ -package org.eclipse.tracecompass.internal.gdbtrace.ui.views.events; - -import java.util.Collection; +package org.eclipse.tracecompass.internal.gdbtrace.core.trace; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEvent; @@ -20,8 +18,6 @@ import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEventConten import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.event.aspect.TmfEventFieldAspect; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.ITmfEventTableColumns; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.TmfEventTableColumn; import com.google.common.collect.ImmutableList; @@ -30,17 +26,15 @@ import com.google.common.collect.ImmutableList; * * @author Alexandre Montplaisir */ -public class GdbEventTableColumns implements ITmfEventTableColumns { +public final class GdbEventAspects { - // ------------------------------------------------------------------------ - // Column definition - // ------------------------------------------------------------------------ + private GdbEventAspects() {} @SuppressWarnings("null") - static final @NonNull Collection GDB_COLUMNS = ImmutableList.of( - new TmfEventTableColumn(new GdbTraceFrameAspect()), - new TmfEventTableColumn(new GdbTracepointAspect()), - new TmfEventTableColumn(new GdbFileAspect()) + private static final @NonNull Iterable GDB_ASPECTS = ImmutableList.of( + new GdbTraceFrameAspect(), + new GdbTracepointAspect(), + new GdbFileAspect() ); private static class GdbTraceFrameAspect extends TmfEventFieldAspect { @@ -84,12 +78,12 @@ public class GdbEventTableColumns implements ITmfEventTableColumns { } } - // ------------------------------------------------------------------------ - // ITmfEventTableColumns - // ------------------------------------------------------------------------ - - @Override - public Collection getEventTableColumns() { - return GDB_COLUMNS; + /** + * Get the event aspects specific to GDB traces. + * + * @return The set of aspects + */ + public static Iterable getAspects() { + return GDB_ASPECTS; } } diff --git a/org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbTrace.java b/org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbTrace.java index 515285b591..3c0b78cf82 100644 --- a/org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbTrace.java +++ b/org.eclipse.tracecompass.gdbtrace.core/src/org/eclipse/tracecompass/internal/gdbtrace/core/trace/GdbTrace.java @@ -36,6 +36,7 @@ import org.eclipse.tracecompass.internal.gdbtrace.core.Activator; import org.eclipse.tracecompass.internal.gdbtrace.core.GdbTraceCorePlugin; import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEvent; 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.timestamp.ITmfTimestamp; import org.eclipse.tracecompass.tmf.core.trace.ITmfContext; @@ -165,6 +166,11 @@ public class GdbTrace extends TmfTrace implements ITmfEventParser { // TmfTrace // ------------------------------------------------------------------------ + @Override + public Iterable getEventAspects() { + return GdbEventAspects.getAspects(); + } + @Override public synchronized TmfContext seekEvent(ITmfLocation location) { fLocation = (location != null) ? ((Long) location.getLocationInfo()) : 0; diff --git a/org.eclipse.tracecompass.gdbtrace.ui/plugin.xml b/org.eclipse.tracecompass.gdbtrace.ui/plugin.xml index 6505f0e7a6..851ef30887 100644 --- a/org.eclipse.tracecompass.gdbtrace.ui/plugin.xml +++ b/org.eclipse.tracecompass.gdbtrace.ui/plugin.xml @@ -92,9 +92,6 @@ - - diff --git a/org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventsTable.java b/org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventsTable.java index 5c3e5d0eaf..f69017d2b6 100644 --- a/org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventsTable.java +++ b/org.eclipse.tracecompass.gdbtrace.ui/src/org/eclipse/tracecompass/internal/gdbtrace/ui/views/events/GdbEventsTable.java @@ -23,6 +23,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.TableItem; import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEvent; import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEventContent; +import org.eclipse.tracecompass.internal.gdbtrace.core.trace.GdbEventAspects; import org.eclipse.tracecompass.internal.gdbtrace.core.trace.GdbTrace; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler; import org.eclipse.tracecompass.tmf.core.signal.TmfTimeSynchSignal; @@ -58,7 +59,7 @@ public class GdbEventsTable extends TmfEventsTable { * the cache size */ public GdbEventsTable(Composite parent, int cacheSize) { - super(parent, cacheSize, GdbEventTableColumns.GDB_COLUMNS); + super(parent, cacheSize, GdbEventAspects.getAspects()); // Set the alignment of the first two columns fTable.getColumns()[0].setAlignment(SWT.RIGHT); fTable.getColumns()[1].setAlignment(SWT.RIGHT); diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF index a5340e28c0..64ff781233 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.lttng2.kernel.core/META-INF/MANIFEST.MF @@ -15,6 +15,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.tracecompass.tmf.ctf.core, org.eclipse.tracecompass.lttng2.control.core Export-Package: org.eclipse.tracecompass.internal.lttng2.kernel.core;x-friends:="org.eclipse.tracecompass.lttng2.kernel.ui,org.eclipse.tracecompass.lttng2.kernel.core.tests", + org.eclipse.tracecompass.internal.lttng2.kernel.core.event.aspect;x-internal:=true, org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout;x-friends:="org.eclipse.tracecompass.lttng2.kernel.core.tests,org.eclipse.tracecompass.lttng2.kernel.ui", org.eclipse.tracecompass.lttng2.kernel.core.analysis.cpuusage, org.eclipse.tracecompass.lttng2.kernel.core.analysis.kernel, diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/LttngEventTableColumns.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/LttngEventAspects.java similarity index 50% rename from org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/LttngEventTableColumns.java rename to org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/LttngEventAspects.java index f9e016823b..f45f3e74ed 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/LttngEventTableColumns.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/LttngEventAspects.java @@ -10,44 +10,38 @@ * Alexandre Montplaisir - Initial API and implementation *******************************************************************************/ -package org.eclipse.tracecompass.internal.lttng2.kernel.ui.viewers.events; - -import java.util.Collection; +package org.eclipse.tracecompass.internal.lttng2.kernel.core.event.aspect; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.ITmfEventTableColumns; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.TmfEventTableColumn; import com.google.common.collect.ImmutableList; /** - * Event table columns for LTTng 2.x kernel traces + * Event aspects for LTTng kernel traces. + * + * @author Alexandre Montplaisir */ -public class LttngEventTableColumns implements ITmfEventTableColumns { - - // ------------------------------------------------------------------------ - // Column definition - // ------------------------------------------------------------------------ +public final class LttngEventAspects { - @SuppressWarnings("null") - private static final @NonNull String CHANNEL_HEADER = Messages.EventsTable_channelColumn; + private LttngEventAspects() {} @SuppressWarnings("null") - private static final @NonNull Collection LTTNG_COLUMNS = - ImmutableList. of( - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.TIMESTAMP), - new TmfEventTableColumn(new LttngChannelAspect()), - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.EVENT_TYPE), - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.CONTENTS)); + private static final @NonNull Iterable LTTNG_ASPECTS = + ImmutableList.of( + ITmfEventAspect.BaseAspects.TIMESTAMP, + new LttngChannelAspect(), + ITmfEventAspect.BaseAspects.EVENT_TYPE, + ITmfEventAspect.BaseAspects.CONTENTS); private static class LttngChannelAspect implements ITmfEventAspect { @Override public String getName() { - return CHANNEL_HEADER; + String ret = Messages.AspectName_Channel; + return (ret == null ? EMPTY_STRING : ret); } @Override @@ -70,12 +64,12 @@ public class LttngEventTableColumns implements ITmfEventTableColumns { } } - // ------------------------------------------------------------------------ - // Constructor - // ------------------------------------------------------------------------ - - @Override - public Collection getEventTableColumns() { - return LTTNG_COLUMNS; + /** + * Get the event aspects defined for LTTng kernel traces. + * + * @return The set of aspects + */ + public static Iterable getAspects() { + return LTTNG_ASPECTS; } } diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/Messages.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/Messages.java similarity index 61% rename from org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/Messages.java rename to org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/Messages.java index c3ba87b808..e2c50efe87 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/Messages.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/Messages.java @@ -9,19 +9,19 @@ * Patrick Tassé - Initial API and implementation *******************************************************************************/ -package org.eclipse.tracecompass.internal.lttng2.kernel.ui.viewers.events; +package org.eclipse.tracecompass.internal.lttng2.kernel.core.event.aspect; import org.eclipse.osgi.util.NLS; @SuppressWarnings("javadoc") public class Messages extends NLS { - private static final String BUNDLE_NAME = "org.eclipse.tracecompass.internal.lttng2.kernel.ui.viewers.events.messages"; //$NON-NLS-1$ - public static String EventsTable_channelColumn; - public static String EventsTable_timestampColumn; - public static String EventsTable_typeColumn; - public static String EventsTable_contentColumn; + + private static final String BUNDLE_NAME = + "org.eclipse.tracecompass.internal.lttng2.kernel.core.event.aspect.messages"; //$NON-NLS-1$ + + public static String AspectName_Channel; + static { - // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); } diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/messages.properties b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/messages.properties similarity index 73% rename from org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/messages.properties rename to org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/messages.properties index faeb249dcf..cb4cfbdcce 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/viewers/events/messages.properties +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/internal/lttng2/kernel/core/event/aspect/messages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2013 Ericsson +# Copyright (c) 2014 Ericsson # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 @@ -10,7 +10,4 @@ # Ericsson - Initial API and implementation ############################################################################### -EventsTable_channelColumn=Channel -EventsTable_timestampColumn=Timestamp -EventsTable_typeColumn=Event Type -EventsTable_contentColumn=Content +AspectName_Channel=Channel diff --git a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java index 03a09b9f22..be454c3af1 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/trace/LttngKernelTrace.java @@ -24,12 +24,14 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.ctf.core.trace.CTFReaderException; import org.eclipse.tracecompass.ctf.core.trace.CTFTrace; import org.eclipse.tracecompass.internal.lttng2.kernel.core.Activator; +import org.eclipse.tracecompass.internal.lttng2.kernel.core.event.aspect.LttngEventAspects; import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.IKernelAnalysisEventLayout; +import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.Lttng26EventLayout; import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.LttngEventLayout; import org.eclipse.tracecompass.internal.lttng2.kernel.core.trace.layout.PerfEventLayout; 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.internal.lttng2.kernel.core.trace.layout.Lttng26EventLayout; import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace; @@ -143,4 +145,9 @@ public class LttngKernelTrace extends CtfTmfTrace { } } + @Override + public Iterable getEventAspects() { + return LttngEventAspects.getAspects(); + } + } diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF index ebf598cb35..6281287e35 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.lttng2.kernel.ui/META-INF/MANIFEST.MF @@ -19,7 +19,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.tracecompass.lttng2.control.ui;bundle-version="0.1.0", org.eclipse.tracecompass.lttng2.kernel.core;bundle-version="0.1.0" Export-Package: org.eclipse.tracecompass.internal.lttng2.kernel.ui;x-friends:="org.eclipse.tracecompass.lttng2.kernel.ui.tests", - org.eclipse.tracecompass.internal.lttng2.kernel.ui.viewers.events;x-internal:=true, org.eclipse.tracecompass.internal.lttng2.kernel.ui.views;x-friends:="org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests", org.eclipse.tracecompass.internal.lttng2.kernel.ui.views.controlflow;x-friends:="org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests", org.eclipse.tracecompass.internal.lttng2.kernel.ui.views.cpuusage;x-friends:="org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests", diff --git a/org.eclipse.tracecompass.lttng2.kernel.ui/plugin.xml b/org.eclipse.tracecompass.lttng2.kernel.ui/plugin.xml index 52aece2334..e23019eb30 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.ui/plugin.xml +++ b/org.eclipse.tracecompass.lttng2.kernel.ui/plugin.xml @@ -84,9 +84,6 @@ - - diff --git a/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF index 92f0a59d8d..a8238207b3 100644 --- a/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF @@ -15,6 +15,7 @@ Export-Package: org.eclipse.tracecompass.internal.tmf.core;x-friends:="org.eclip org.eclipse.tracecompass.internal.tmf.core.analysis;x-friends:="org.eclipse.tracecompass.tmf.core.tests", org.eclipse.tracecompass.internal.tmf.core.component;x-friends:="org.eclipse.tracecompass.tmf.core.tests", org.eclipse.tracecompass.internal.tmf.core.filter;x-friends:="org.eclipse.tracecompass.tmf.core.tests,org.eclipse.tracecompass.tmf.ui", + org.eclipse.tracecompass.internal.tmf.core.parsers.custom;x-friends:="org.eclipse.tracecompass.tmf.ui", org.eclipse.tracecompass.internal.tmf.core.request;x-friends:="org.eclipse.tracecompass.tmf.core.tests", org.eclipse.tracecompass.internal.tmf.core.statesystem.backends.partial;x-friends:="org.eclipse.tracecompass.statesystem.core.tests", org.eclipse.tracecompass.internal.tmf.core.statesystem.mipmap;x-friends:="org.eclipse.tracecompass.tmf.core.tests", diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/custom/CustomEventTableColumns.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/parsers/custom/CustomEventAspects.java similarity index 60% rename from org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/custom/CustomEventTableColumns.java rename to org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/parsers/custom/CustomEventAspects.java index 78db09dae0..d0956c9279 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/custom/CustomEventTableColumns.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/parsers/custom/CustomEventAspects.java @@ -11,9 +11,8 @@ * Alexandre Montplaisir - Update for TmfEventTableColumn *******************************************************************************/ -package org.eclipse.tracecompass.internal.tmf.ui.parsers.custom; +package org.eclipse.tracecompass.internal.tmf.core.parsers.custom; -import java.util.Collection; import java.util.List; import org.eclipse.jdt.annotation.NonNull; @@ -22,31 +21,25 @@ import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomEvent; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.OutputColumn; -import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.ITmfEventTableColumns; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.TmfEventTableColumn; import com.google.common.collect.ImmutableList; /** - * Event table column definition for Custom {Text|XML} traces. + * Event aspects for Custom {Text|XML} traces. * - * Since this definition will be different for every single custom trace, this - * does not work the same as with {@link ITmfEventTableColumns}. + * Since this definition will be different for every single custom trace, we + * cannot define specific {@link ITmfEventAspect} in advance. * - * Instead, one has to call {@link #generateColumns(CustomTraceDefinition)} with - * the CustomTraceDefinition of the the particular trace to display. Then the - * returned collection can be passed to the constructor - * {@link TmfEventsTable#TmfEventsTable(org.eclipse.swt.widgets.Composite, int, Collection)} - * as usual. + * Instead, one has to call {@link #generateAspects(CustomTraceDefinition)} + * with the CustomTraceDefinition of the the particular trace to display. * * @author Alexandre Montplaisir */ -public class CustomEventTableColumns { +public class CustomEventAspects { /** - * Column for custom events, which uses an integer ID to represent each - * column. + * Aspects for custom events, which use an integer ID to represent each + * field. */ private static final class CustomEventFieldAspect implements ITmfEventAspect { @@ -57,10 +50,9 @@ public class CustomEventTableColumns { * Constructor * * @param name - * The name (title) of this aspect + * The name of this aspect * @param idx - * The "index" of this aspect, which should be the index of - * the field in the event's content to display. + * The index of this field in the event's content to display */ public CustomEventFieldAspect(@NonNull String name, int idx) { fName = name; @@ -93,18 +85,20 @@ public class CustomEventTableColumns { } /** - * Get the event table columns for a given trace definition + * Build a set of event aspects for a given trace definition * - * @param definition The {@link CustomTraceDefinition} of the trace for which you want the columns - * @return The set of columns for the given trace. + * @param definition + * The {@link CustomTraceDefinition} of the trace for which you + * want the aspects + * @return The set of event aspects for the given trace */ - public static Collection generateColumns(CustomTraceDefinition definition) { - ImmutableList.Builder builder = new ImmutableList.Builder<>(); + public static Iterable generateAspects(CustomTraceDefinition definition) { + ImmutableList.Builder builder = new ImmutableList.Builder<>(); List outputs = definition.outputs; for (int i = 0; i < outputs.size(); i++) { String name = outputs.get(i).name; if (name != null) { - builder.add(new TmfEventTableColumn(new CustomEventFieldAspect(name, i))); + builder.add(new CustomEventFieldAspect(name, i)); } } return builder.build(); diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomTxtTrace.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomTxtTrace.java index 4932929ac3..4d44aca0c3 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomTxtTrace.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomTxtTrace.java @@ -27,7 +27,9 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.tracecompass.internal.tmf.core.Activator; +import org.eclipse.tracecompass.internal.tmf.core.parsers.custom.CustomEventAspects; 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.io.BufferedRandomAccessFile; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition.InputLine; @@ -124,6 +126,11 @@ public class CustomTxtTrace extends TmfTrace implements ITmfEventParser, ITmfPer return super.getIndexer(); } + @Override + public Iterable getEventAspects() { + return CustomEventAspects.generateAspects(fDefinition); + } + @Override public synchronized TmfContext seekEvent(final ITmfLocation location) { final CustomTxtTraceContext context = new CustomTxtTraceContext(NULL_LOCATION, ITmfContext.UNKNOWN_RANK); diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomXmlTrace.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomXmlTrace.java index 117b86c76f..2add4825e4 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomXmlTrace.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/parsers/custom/CustomXmlTrace.java @@ -27,7 +27,9 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.tracecompass.internal.tmf.core.Activator; +import org.eclipse.tracecompass.internal.tmf.core.parsers.custom.CustomEventAspects; 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.io.BufferedRandomAccessFile; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp; @@ -134,6 +136,11 @@ public class CustomXmlTrace extends TmfTrace implements ITmfEventParser, ITmfPer return super.getIndexer(); } + @Override + public Iterable getEventAspects() { + return CustomEventAspects.generateAspects(fDefinition); + } + @Override public synchronized TmfContext seekEvent(final ITmfLocation location) { final CustomXmlTraceContext context = new CustomXmlTraceContext(NULL_LOCATION, ITmfContext.UNKNOWN_RANK); diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/ITmfTrace.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/ITmfTrace.java index 4a61fe1a9c..15b491e1f3 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/ITmfTrace.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/ITmfTrace.java @@ -24,6 +24,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; import org.eclipse.tracecompass.tmf.core.component.ITmfEventProvider; 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.synchronization.ITmfTimestampTransform; import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp; @@ -283,6 +284,17 @@ public interface ITmfTrace extends ITmfEventProvider { @NonNull Iterable getAnalysisModulesOfClass(Class moduleClass); + // ------------------------------------------------------------------------ + // Aspect getters + // ------------------------------------------------------------------------ + + /** + * Return the pre-defined set of event aspects exposed by this trace. + * + * @return The event aspects for this trace + */ + Iterable getEventAspects(); + // ------------------------------------------------------------------------ // Trace characteristics getters // ------------------------------------------------------------------------ diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java index 2d6421897a..fd3b748114 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java @@ -17,6 +17,7 @@ package org.eclipse.tracecompass.tmf.core.trace; import java.io.File; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; @@ -36,6 +37,7 @@ import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper; import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager; import org.eclipse.tracecompass.tmf.core.component.TmfEventProvider; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest; @@ -54,6 +56,8 @@ import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfTraceIndexer; import org.eclipse.tracecompass.tmf.core.trace.indexer.checkpoint.TmfCheckpointIndexer; import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; +import com.google.common.collect.ImmutableList; + /** * Abstract implementation of ITmfTrace. *

@@ -88,7 +92,21 @@ import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, ITmfTraceCompleteness { // ------------------------------------------------------------------------ - // Attributes + // Class attributes + // ------------------------------------------------------------------------ + + /** + * Basic aspects that should be valid for all trace types. + */ + public static final Collection BASE_ASPECTS = + ImmutableList.of( + ITmfEventAspect.BaseAspects.TIMESTAMP, + ITmfEventAspect.BaseAspects.EVENT_TYPE, + ITmfEventAspect.BaseAspects.CONTENTS + ); + + // ------------------------------------------------------------------------ + // Instance attributes // ------------------------------------------------------------------------ // The resource used for persistent properties for this trace @@ -351,6 +369,12 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, IT return modules; } + @Override + public Iterable getEventAspects() { + /* By default we provide only the base aspects valid for all trace types */ + return BASE_ASPECTS; + } + /** * Clears the trace */ diff --git a/org.eclipse.tracecompass.tmf.pcap.core/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.tmf.pcap.core/META-INF/MANIFEST.MF index 0f692b303f..518c5ceb69 100644 --- a/org.eclipse.tracecompass.tmf.pcap.core/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.tmf.pcap.core/META-INF/MANIFEST.MF @@ -15,6 +15,7 @@ Require-Bundle: org.eclipse.core.runtime, Export-Package: org.eclipse.tracecompass.internal.tmf.pcap.core;x-internal:=true, org.eclipse.tracecompass.internal.tmf.pcap.core.analysis;x-friends:="org.eclipse.tracecompass.tmf.pcap.core.tests,org.eclipse.tracecompass.tmf.pcap.ui", org.eclipse.tracecompass.internal.tmf.pcap.core.event;x-friends:="org.eclipse.tracecompass.tmf.pcap.core.tests,org.eclipse.tracecompass.tmf.pcap.ui", + org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect;x-internal:=true, org.eclipse.tracecompass.internal.tmf.pcap.core.protocol;x-friends:="org.eclipse.tracecompass.tmf.pcap.core.tests,org.eclipse.tracecompass.tmf.pcap.ui", org.eclipse.tracecompass.internal.tmf.pcap.core.signal;x-friends:="org.eclipse.tracecompass.tmf.pcap.ui", org.eclipse.tracecompass.internal.tmf.pcap.core.trace;x-friends:="org.eclipse.tracecompass.tmf.pcap.core.tests,org.eclipse.tracecompass.tmf.pcap.ui,org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests", diff --git a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/Messages.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/Messages.java similarity index 52% rename from org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/Messages.java rename to org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/Messages.java index 7d8fdc9d9d..583e1ad7ef 100644 --- a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/Messages.java +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/Messages.java @@ -10,7 +10,7 @@ * Vincent Perot - Initial API and implementation *******************************************************************************/ -package org.eclipse.tracecompass.internal.tmf.pcap.ui.editor; +package org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.osgi.util.NLS; @@ -18,20 +18,28 @@ import org.eclipse.osgi.util.NLS; @SuppressWarnings("javadoc") public class Messages extends NLS { - private static final String BUNDLE_NAME = "org.eclipse.tracecompass.internal.tmf.pcap.ui.editor.messages"; //$NON-NLS-1$ + private static final String BUNDLE_NAME = + "org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect.messages"; //$NON-NLS-1$ - public static @Nullable String PcapEventsTable_Content; - public static @Nullable String PcapEventsTable_Destination; - public static @Nullable String PcapEventsTable_Protocol; - public static @Nullable String PcapEventsTable_Reference; - public static @Nullable String PcapEventsTable_Source; - public static @Nullable String PcapEventsTable_Timestamp; + public static @Nullable String PcapAspectName_Destination; + public static @Nullable String PcapAspectName_Protocol; + public static @Nullable String PcapAspectName_Reference; + public static @Nullable String PcapAspectName_Source; static { - // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); } private Messages() { } + + /** + * Helper method to expose externalized strings as non-null objects. + */ + static String getMessage(@Nullable String msg) { + if (msg == null) { + return ""; //$NON-NLS-1$ + } + return msg; + } } diff --git a/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapDestinationAspect.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapDestinationAspect.java new file mode 100644 index 0000000000..dfb478e695 --- /dev/null +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapDestinationAspect.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 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: + * Vincent Perot - Initial API and implementation + * Alexandre Montplaisir - Update to new ITmfEventAspect API + *******************************************************************************/ + +package org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.PcapEvent; +import org.eclipse.tracecompass.internal.tmf.pcap.core.protocol.TmfPcapProtocol; +import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; + +/** + * The "packet destination" aspect for pcap events. + * + * @author Alexandre Montplaisir + */ +public class PcapDestinationAspect implements ITmfEventAspect { + + @Override + public String getName() { + return Messages.getMessage(Messages.PcapAspectName_Destination); + } + + @Override + public String getHelpText() { + return EMPTY_STRING; + } + + @Override + public String resolve(ITmfEvent event) { + if (!(event instanceof PcapEvent)) { + return EMPTY_STRING; + } + PcapEvent pcapEvent = (PcapEvent) event; + TmfPcapProtocol protocol = pcapEvent.getMostEncapsulatedProtocol(); + + String ret = pcapEvent.getDestinationEndpoint(protocol); + return (ret == null ? EMPTY_STRING : ret); + } + + @Override + public @NonNull String getFilterId() { + return PcapEvent.EVENT_FIELD_PACKET_DESTINATION; + } +} diff --git a/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapProtocolAspect.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapProtocolAspect.java new file mode 100644 index 0000000000..c71fb30fa5 --- /dev/null +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapProtocolAspect.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 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: + * Vincent Perot - Initial API and implementation + * Alexandre Montplaisir - Update to new ITmfEventAspect API + *******************************************************************************/ + +package org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.PcapEvent; +import org.eclipse.tracecompass.internal.tmf.pcap.core.protocol.TmfPcapProtocol; +import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; + +/** + * The "packet protocol" aspect for pcap events + * + * @author Alexandre Montplaisir + */ +public class PcapProtocolAspect implements ITmfEventAspect { + + @Override + public String getName() { + return Messages.getMessage(Messages.PcapAspectName_Protocol); + } + + @Override + public String getHelpText() { + return EMPTY_STRING; + } + + @Override + public String resolve(ITmfEvent event) { + if (!(event instanceof PcapEvent)) { + return EMPTY_STRING; + } + PcapEvent pcapEvent = (PcapEvent) event; + TmfPcapProtocol protocol = pcapEvent.getMostEncapsulatedProtocol(); + + @SuppressWarnings("null") + @NonNull String proto = protocol.getShortName().toUpperCase(); + return proto; + } + + @Override + public @Nullable String getFilterId() { + return PcapEvent.EVENT_FIELD_PACKET_PROTOCOL; + } +} diff --git a/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapReferenceAspect.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapReferenceAspect.java new file mode 100644 index 0000000000..216475d633 --- /dev/null +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapReferenceAspect.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2014 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: + * Vincent Perot - Initial API and implementation + * Alexandre Montplaisir - Update to new ITmfEventAspect API + *******************************************************************************/ + +package org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect; + +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.PcapEvent; +import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; + +/** + * The "packet reference" aspect for pcap events + * + * @author Alexandre Montplaisir + */ +public class PcapReferenceAspect implements ITmfEventAspect { + + @Override + public String getName() { + return Messages.getMessage(Messages.PcapAspectName_Reference); + } + + @Override + public String getHelpText() { + return EMPTY_STRING; + } + + @Override + public String resolve(ITmfEvent event) { + if (!(event instanceof PcapEvent)) { + return EMPTY_STRING; + } + return ((PcapEvent) event).getReference(); + } + + @Override + public @Nullable String getFilterId() { + return ITmfEvent.EVENT_FIELD_REFERENCE; + } +} diff --git a/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapSourceAspect.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapSourceAspect.java new file mode 100644 index 0000000000..c27d3c75fe --- /dev/null +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/PcapSourceAspect.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2014 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: + * Vincent Perot - Initial API and implementation + * Alexandre Montplaisir - Update to new ITmfEventAspect API + *******************************************************************************/ + +package org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.PcapEvent; +import org.eclipse.tracecompass.internal.tmf.pcap.core.protocol.TmfPcapProtocol; +import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; + +/** + * The packet source aspect for pcap events. + * + * This normally represents the source address of the packet, and the format + * depends on the protocol (e.g. source IP address, source port, etc.) + * + * @author Alexandre Montplaisir + */ +public class PcapSourceAspect implements ITmfEventAspect { + + @Override + public String getName() { + return Messages.getMessage(Messages.PcapAspectName_Source); + } + + @Override + public String getHelpText() { + return EMPTY_STRING; + } + + @Override + public String resolve(ITmfEvent event) { + if (!(event instanceof PcapEvent)) { + return EMPTY_STRING; + } + PcapEvent pcapEvent = (PcapEvent) event; + TmfPcapProtocol protocol = pcapEvent.getMostEncapsulatedProtocol(); + + String ret = pcapEvent.getSourceEndpoint(protocol); + return (ret == null ? EMPTY_STRING : ret); + } + + @Override + public @NonNull String getFilterId() { + return PcapEvent.EVENT_FIELD_PACKET_SOURCE; + } +} \ No newline at end of file diff --git a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/messages.properties b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/messages.properties similarity index 70% rename from org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/messages.properties rename to org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/messages.properties index fe4006df00..21ab85b5bc 100644 --- a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/messages.properties +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/messages.properties @@ -10,9 +10,7 @@ # Ericsson - Initial API and implementation ############################################################################### -PcapEventsTable_Content=Content -PcapEventsTable_Destination=Destination -PcapEventsTable_Protocol=Protocol -PcapEventsTable_Reference=Reference -PcapEventsTable_Source=Source -PcapEventsTable_Timestamp=Timestamp +PcapAspectName_Destination=Destination +PcapAspectName_Protocol=Protocol +PcapAspectName_Reference=Reference +PcapAspectName_Source=Source diff --git a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/package-info.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/package-info.java similarity index 88% rename from org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/package-info.java rename to org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/package-info.java index 001822976a..e17f94d9fa 100644 --- a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/editor/package-info.java +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/event/aspect/package-info.java @@ -11,4 +11,4 @@ *******************************************************************************/ @org.eclipse.jdt.annotation.NonNullByDefault -package org.eclipse.tracecompass.internal.tmf.pcap.ui.editor; \ No newline at end of file +package org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect; \ No newline at end of file diff --git a/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/trace/PcapTrace.java b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/trace/PcapTrace.java index 56d4f81d33..c904c0297c 100644 --- a/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/trace/PcapTrace.java +++ b/org.eclipse.tracecompass.tmf.pcap.core/src/org/eclipse/tracecompass/internal/tmf/pcap/core/trace/PcapTrace.java @@ -16,6 +16,7 @@ import java.io.IOException; import java.nio.channels.ClosedChannelException; import java.nio.file.FileSystems; import java.nio.file.Path; +import java.util.Collection; import java.util.Map; import org.eclipse.core.resources.IProject; @@ -31,8 +32,13 @@ import org.eclipse.tracecompass.internal.pcap.core.trace.PcapFile; import org.eclipse.tracecompass.internal.pcap.core.util.LinkTypeHelper; import org.eclipse.tracecompass.internal.tmf.pcap.core.Activator; import org.eclipse.tracecompass.internal.tmf.pcap.core.event.PcapEvent; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect.PcapDestinationAspect; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect.PcapProtocolAspect; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect.PcapReferenceAspect; +import org.eclipse.tracecompass.internal.tmf.pcap.core.event.aspect.PcapSourceAspect; import org.eclipse.tracecompass.internal.tmf.pcap.core.util.PcapEventFactory; 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.ITmfContext; import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser; @@ -43,6 +49,7 @@ import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; import org.eclipse.tracecompass.tmf.core.trace.location.TmfLongLocation; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; /** @@ -55,6 +62,16 @@ import com.google.common.collect.ImmutableMap; */ public class PcapTrace extends TmfTrace implements ITmfEventParser, ITmfTraceProperties, AutoCloseable { + @SuppressWarnings("null") + private static final @NonNull Collection PCAP_ASPECTS = ImmutableList.of( + ITmfEventAspect.BaseAspects.TIMESTAMP, + new PcapSourceAspect(), + new PcapDestinationAspect(), + new PcapReferenceAspect(), + new PcapProtocolAspect(), + ITmfEventAspect.BaseAspects.CONTENTS + ); + @SuppressWarnings("null") private static final @NonNull Map EMPTY_MAP = ImmutableMap.of(); private static final String EMPTY_STRING = ""; //$NON-NLS-1$ @@ -106,6 +123,11 @@ public class PcapTrace extends TmfTrace implements ITmfEventParser, ITmfTracePro } } + @Override + public Iterable getEventAspects() { + return PCAP_ASPECTS; + } + @Override public synchronized @Nullable PcapEvent parseEvent(@Nullable ITmfContext context) { if (context == null) { diff --git a/org.eclipse.tracecompass.tmf.pcap.ui/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.tmf.pcap.ui/META-INF/MANIFEST.MF index 305022d9c4..e237528407 100644 --- a/org.eclipse.tracecompass.tmf.pcap.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.tmf.pcap.ui/META-INF/MANIFEST.MF @@ -16,6 +16,5 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.tracecompass.tmf.ui;bundle-version="0.1.0", org.eclipse.tracecompass.tmf.pcap.core;bundle-version="0.1.0" Export-Package: org.eclipse.tracecompass.internal.tmf.pcap.ui;x-friends:="org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests", - org.eclipse.tracecompass.internal.tmf.pcap.ui.editor;x-internal:=true, org.eclipse.tracecompass.internal.tmf.pcap.ui.stream;x-friends:="org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests" Import-Package: com.google.common.collect diff --git a/org.eclipse.tracecompass.tmf.pcap.ui/plugin.xml b/org.eclipse.tracecompass.tmf.pcap.ui/plugin.xml index d8723ba052..84ccf311f5 100644 --- a/org.eclipse.tracecompass.tmf.pcap.ui/plugin.xml +++ b/org.eclipse.tracecompass.tmf.pcap.ui/plugin.xml @@ -6,9 +6,6 @@ - - PCAP_COLUMNS = ImmutableList.of( - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.TIMESTAMP), - new TmfEventTableColumn(new PcapSourceAspect()), - new TmfEventTableColumn(new PcapDestinationAspect()), - new TmfEventTableColumn(new PcapReferenceAspect()), - new TmfEventTableColumn(new PcapProtocolAspect()), - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.CONTENTS) - ); - - /** - * The "packet source" column for pcap events - */ - private static class PcapSourceAspect implements ITmfEventAspect { - - @Override - public String getName() { - return getString(Messages.PcapEventsTable_Source); - } - - @Override - public String getHelpText() { - return EMPTY_STRING; - } - - @Override - public String resolve(ITmfEvent event) { - if (!(event instanceof PcapEvent)) { - return EMPTY_STRING; - } - PcapEvent pcapEvent = (PcapEvent) event; - TmfPcapProtocol protocol = pcapEvent.getMostEncapsulatedProtocol(); - - return getString(pcapEvent.getSourceEndpoint(protocol)); - } - - @Override - public @NonNull String getFilterId() { - return PcapEvent.EVENT_FIELD_PACKET_SOURCE; - } - } - - /** - * The "packet destination" column for pcap events - */ - private static class PcapDestinationAspect implements ITmfEventAspect { - - @Override - public String getName() { - return getString(Messages.PcapEventsTable_Destination); - } - - @Override - public String getHelpText() { - return EMPTY_STRING; - } - - @Override - public String resolve(ITmfEvent event) { - if (!(event instanceof PcapEvent)) { - return EMPTY_STRING; - } - PcapEvent pcapEvent = (PcapEvent) event; - TmfPcapProtocol protocol = pcapEvent.getMostEncapsulatedProtocol(); - return getString(pcapEvent.getDestinationEndpoint(protocol)); - } - - @Override - public @NonNull String getFilterId() { - return PcapEvent.EVENT_FIELD_PACKET_DESTINATION; - } - } - - /** - * The "packet reference" column for pcap events - */ - private static class PcapReferenceAspect implements ITmfEventAspect { - - @Override - public String getName() { - return getString(Messages.PcapEventsTable_Reference); - } - - @Override - public String getHelpText() { - return EMPTY_STRING; - } - - @Override - public String resolve(ITmfEvent event) { - if (!(event instanceof PcapEvent)) { - return EMPTY_STRING; - } - return ((PcapEvent) event).getReference(); - } - - @Override - public @Nullable String getFilterId() { - return ITmfEvent.EVENT_FIELD_REFERENCE; - } - } - - /** - * The "packet protocol" column for pcap events - */ - private static class PcapProtocolAspect implements ITmfEventAspect { - - @Override - public String getName() { - return getString(Messages.PcapEventsTable_Protocol); - } - - @Override - public String getHelpText() { - return EMPTY_STRING; - } - - @Override - public String resolve(ITmfEvent event) { - if (!(event instanceof PcapEvent)) { - return EMPTY_STRING; - } - PcapEvent pcapEvent = (PcapEvent) event; - TmfPcapProtocol protocol = pcapEvent.getMostEncapsulatedProtocol(); - - @SuppressWarnings("null") - @NonNull String proto = protocol.getShortName().toUpperCase(); - return proto; - } - - @Override - public @Nullable String getFilterId() { - return PcapEvent.EVENT_FIELD_PACKET_PROTOCOL; - } - } - - /** - * Little convenience method to work around the incompatibilities between - * null annotations and NLS files... - */ - private static String getString(@Nullable String str) { - return (str == null ? "" : str); //$NON-NLS-1$ - } - - // ------------------------------------------------------------------------ - // ITmfEventTableColumns - // ------------------------------------------------------------------------ - - @Override - public Collection getEventTableColumns() { - return PCAP_COLUMNS; - } -} diff --git a/org.eclipse.tracecompass.tmf.ui/META-INF/MANIFEST.MF b/org.eclipse.tracecompass.tmf.ui/META-INF/MANIFEST.MF index b208b8c5c9..f41da53a23 100644 --- a/org.eclipse.tracecompass.tmf.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.tracecompass.tmf.ui/META-INF/MANIFEST.MF @@ -24,7 +24,6 @@ Export-Package: org.eclipse.tracecompass.internal.tmf.ui;x-friends:="org.eclipse org.eclipse.tracecompass.internal.tmf.ui.commands;x-internal:=true, org.eclipse.tracecompass.internal.tmf.ui.dialogs;x-internal:=true, org.eclipse.tracecompass.internal.tmf.ui.editors.handlers;x-internal:=true, - org.eclipse.tracecompass.internal.tmf.ui.parsers.custom;x-friends:="org.eclipse.tracecompass.tmf.ui.tests", org.eclipse.tracecompass.internal.tmf.ui.parsers.wizards;x-friends:="org.eclipse.tracecompass.tmf.ui.tests", org.eclipse.tracecompass.internal.tmf.ui.preferences;x-internal:=true, org.eclipse.tracecompass.internal.tmf.ui.project.dialogs;x-internal:=true, diff --git a/org.eclipse.tracecompass.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.tracetypeui.exsd b/org.eclipse.tracecompass.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.tracetypeui.exsd index 1a1dba8572..87baa2995f 100644 --- a/org.eclipse.tracecompass.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.tracetypeui.exsd +++ b/org.eclipse.tracecompass.tmf.ui/schema/org.eclipse.linuxtools.tmf.ui.tracetypeui.exsd @@ -58,7 +58,6 @@ - @@ -158,30 +157,6 @@ If empty, the default events editor will be used. - - - - The event table columns to use with this trace type. -If omitted, the default columns will be used. - -If the "eventsTableType" element is present, we will first try to provide a table of that type (ignoring the contents of "eventTableColumns"). If the requested table type cannot be provided, then we will fall-back to using a default table with the columns defined in "eventTableColumns". - - - - - - - The fully qualified name of a class that implements <samp>ITmfEventTableColumns</samp> . -If empty, the default columns will be used. - - - - - - - - - diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomTxtParserOutputWizardPage.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomTxtParserOutputWizardPage.java index af426e2be8..aea1ac827b 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomTxtParserOutputWizardPage.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomTxtParserOutputWizardPage.java @@ -31,13 +31,13 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; +import org.eclipse.tracecompass.internal.tmf.core.parsers.custom.CustomEventAspects; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.internal.tmf.ui.Messages; -import org.eclipse.tracecompass.internal.tmf.ui.parsers.custom.CustomEventTableColumns; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; +import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.OutputColumn; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTrace; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition; -import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.OutputColumn; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange; import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfTraceIndexer; import org.eclipse.tracecompass.tmf.core.trace.indexer.checkpoint.TmfCheckpointIndexer; @@ -106,7 +106,7 @@ public class CustomTxtParserOutputWizardPage extends WizardPage { tableLayout.marginHeight = 0; tableLayout.marginWidth = 0; tableContainer.setLayout(tableLayout); - previewTable = new TmfEventsTable(tableContainer, 0, CustomEventTableColumns.generateColumns(new CustomTxtTraceDefinition())); + previewTable = new TmfEventsTable(tableContainer, 0, CustomEventAspects.generateAspects(new CustomTxtTraceDefinition())); previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); if (wizard.definition != null) { @@ -233,7 +233,7 @@ public class CustomTxtParserOutputWizardPage extends WizardPage { }; trace.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, false); previewTable.dispose(); - previewTable = new TmfEventsTable(tableContainer, CACHE_SIZE, CustomEventTableColumns.generateColumns(definition)); + previewTable = new TmfEventsTable(tableContainer, CACHE_SIZE, CustomEventAspects.generateAspects(definition)); previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); previewTable.setTrace(trace, true); } catch (final TmfTraceException e) { diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomXmlParserOutputWizardPage.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomXmlParserOutputWizardPage.java index 653f904517..a74ab58d75 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomXmlParserOutputWizardPage.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/parsers/wizards/CustomXmlParserOutputWizardPage.java @@ -31,14 +31,14 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; +import org.eclipse.tracecompass.internal.tmf.core.parsers.custom.CustomEventAspects; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.internal.tmf.ui.Messages; -import org.eclipse.tracecompass.internal.tmf.ui.parsers.custom.CustomEventTableColumns; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition; +import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.OutputColumn; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTrace; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTraceDefinition; -import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.OutputColumn; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange; import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfTraceIndexer; import org.eclipse.tracecompass.tmf.core.trace.indexer.checkpoint.TmfCheckpointIndexer; @@ -107,7 +107,7 @@ public class CustomXmlParserOutputWizardPage extends WizardPage { tableLayout.marginHeight = 0; tableLayout.marginWidth = 0; tableContainer.setLayout(tableLayout); - previewTable = new TmfEventsTable(tableContainer, 0, CustomEventTableColumns.generateColumns(new CustomXmlTraceDefinition())); + previewTable = new TmfEventsTable(tableContainer, 0, CustomEventAspects.generateAspects(new CustomXmlTraceDefinition())); previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); if (wizard.definition != null) { @@ -234,7 +234,7 @@ public class CustomXmlParserOutputWizardPage extends WizardPage { }; trace.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, false); previewTable.dispose(); - previewTable = new TmfEventsTable(tableContainer, CACHE_SIZE, CustomEventTableColumns.generateColumns(definition)); + previewTable = new TmfEventsTable(tableContainer, CACHE_SIZE, CustomEventAspects.generateAspects(definition)); previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); previewTable.setTrace(trace, true); } catch (final TmfTraceException e) { diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/editors/TmfEventsEditor.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/editors/TmfEventsEditor.java index 3f8e289fc1..34ac6d5fe6 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/editors/TmfEventsEditor.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/editors/TmfEventsEditor.java @@ -13,7 +13,6 @@ package org.eclipse.tracecompass.tmf.ui.editors; -import java.util.Collection; import java.util.LinkedHashSet; import java.util.Set; @@ -42,6 +41,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.tmf.core.TmfCommonConstants; +import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler; import org.eclipse.tracecompass.tmf.core.signal.TmfTimestampFormatUpdateSignal; import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal; @@ -59,7 +59,6 @@ import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry; import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement; import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceTypeUIUtils; import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.TmfEventTableColumn; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; @@ -319,12 +318,12 @@ public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReus } /* - * The trace type did not specify an event table, we will use a default - * table with the columns it asked for (if any). + * The trace type did not specify an event table, we will use a standard + * table with the trace's advertised aspects (if any). */ - Collection columns = TmfTraceTypeUIUtils.getEventTableColumns(trace); - if (columns != null) { - return new TmfEventsTable(parent, cacheSize, columns); + Iterable aspects = trace.getEventAspects(); + if (aspects != null) { + return new TmfEventsTable(parent, cacheSize, aspects); } /* @@ -367,19 +366,20 @@ public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReus * trace types. */ ITmfTrace[] traces = experiment.getTraces(); - Set cols = new LinkedHashSet<>(); + Set aspects = new LinkedHashSet<>(); for (ITmfTrace trace : traces) { - Collection traceCols = - TmfTraceTypeUIUtils.getEventTableColumns(trace); - if (traceCols == null) { - cols.addAll(TmfEventsTable.DEFAULT_COLUMNS); + Iterable traceAspects = trace.getEventAspects(); + if (traceAspects == null) { + aspects.addAll(TmfTrace.BASE_ASPECTS); } else { - cols.addAll(traceCols); + for (ITmfEventAspect aspect : traceAspects) { + aspects.add(aspect); + } } } - return new TmfEventsTable(parent, cacheSize, cols); + return new TmfEventsTable(parent, cacheSize, aspects); } /** diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java index b5ce373193..5859ba3b2b 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceTypeUIUtils.java @@ -16,7 +16,6 @@ package org.eclipse.tracecompass.tmf.ui.project.model; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; -import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; @@ -40,19 +39,16 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; -import org.eclipse.tracecompass.internal.tmf.ui.parsers.custom.CustomEventTableColumns; import org.eclipse.tracecompass.tmf.core.TmfCommonConstants; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTrace; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTrace; import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceImportException; import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType; -import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper; import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType; +import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; import org.eclipse.tracecompass.tmf.core.util.Pair; import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.ITmfEventTableColumns; -import org.eclipse.tracecompass.tmf.ui.viewers.events.columns.TmfEventTableColumn; import org.osgi.framework.Bundle; /** @@ -414,61 +410,6 @@ public final class TmfTraceTypeUIUtils { return null; } - /** - * Get the Event Table columns specified by the trace type's extension - * point, if there are any. - * - * @param trace - * The trace for which we want the columns. - * @return The corresponding event table columns, or 'null' if this trace - * type did not specify any. - * @since 3.2 - */ - public static @Nullable Collection getEventTableColumns(ITmfTrace trace) { - final String traceType = getTraceType(trace); - if (traceType == null) { - return null; - } - - /* - * Custom traces are a special case : the columns are defined by the - * trace definition. - */ - if (traceType.startsWith(CustomTxtTrace.class.getCanonicalName())) { - return CustomEventTableColumns.generateColumns(((CustomTxtTrace) trace).getDefinition()); - } - if (traceType.startsWith(CustomXmlTrace.class.getCanonicalName())) { - return CustomEventTableColumns.generateColumns(((CustomXmlTrace) trace).getDefinition()); - } - - /* For all other trace types, we will go look into the extension point */ - for (final IConfigurationElement ce : TmfTraceTypeUIUtils.getTypeUIElements(TraceElementType.TRACE)) { - if (ce.getAttribute(TmfTraceTypeUIUtils.TRACETYPE_ATTR).equals(traceType)) { - final IConfigurationElement[] eventTableColumnsCE = ce.getChildren(TmfTraceTypeUIUtils.EVENT_TABLE_COLUMNS); - - if (eventTableColumnsCE.length != 1) { - break; - } - final String eventTableColumnsClass = eventTableColumnsCE[0].getAttribute(TmfTraceTypeUIUtils.CLASS_ATTR); - if ((eventTableColumnsClass == null) || (eventTableColumnsClass.isEmpty())) { - break; - } - try { - final Bundle bundle = Platform.getBundle(ce.getContributor().getName()); - final Class c = bundle.loadClass(eventTableColumnsClass); - final Constructor ctor = c.getConstructor(); - ITmfEventTableColumns cols = (ITmfEventTableColumns) ctor.newInstance(); - return cols.getEventTableColumns(); - - } catch (NoSuchMethodException | ClassNotFoundException | InstantiationException | - IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - return null; - } - } - } - return null; - } - /** * Get the trace type (as a String) for the given trace * diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java index 7d63ad8ee5..ba59d67d24 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java @@ -136,6 +136,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp; import org.eclipse.tracecompass.tmf.core.trace.ITmfContext; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; +import org.eclipse.tracecompass.tmf.core.trace.TmfTrace; import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager; import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsCache.CachedEvent; @@ -203,17 +204,6 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS private static final int FILTER_SUMMARY_INDEX = 1; private static final int EVENT_COLUMNS_START_INDEX = MARGIN_COLUMN_INDEX + 1; - /** - * Default set of columns to use for trace types that do not specify - * anything - * @since 3.2 - */ - public static final Collection DEFAULT_COLUMNS = ImmutableList.of( - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.TIMESTAMP), - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.EVENT_TYPE), - new TmfEventTableColumn(ITmfEventAspect.BaseAspects.CONTENTS) - ); - /** * The events table search/filter keys * @@ -333,7 +323,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS * The size of the event table cache */ public TmfEventsTable(final Composite parent, final int cacheSize) { - this(parent, cacheSize, DEFAULT_COLUMNS); + this(parent, cacheSize, TmfTrace.BASE_ASPECTS); } /** @@ -360,14 +350,14 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS } @Deprecated - private static Collection convertFromColumnData( + private static Iterable convertFromColumnData( org.eclipse.tracecompass.tmf.ui.widgets.virtualtable.ColumnData[] columnData) { - ImmutableList.Builder builder = new ImmutableList.Builder<>(); + ImmutableList.Builder builder = new ImmutableList.Builder<>(); for (org.eclipse.tracecompass.tmf.ui.widgets.virtualtable.ColumnData col : columnData) { String fieldName = col.header; if (fieldName != null) { - builder.add(new TmfEventTableColumn(new TmfEventFieldAspect(fieldName, fieldName))); + builder.add(new TmfEventFieldAspect(fieldName, fieldName)); } } return builder.build(); @@ -380,16 +370,17 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS * The parent composite UI object * @param cacheSize * The size of the event table cache - * @param columns - * The columns to use in this table. + * @param aspects + * The event aspects to display in this table. One column per + * aspect will be created. *

* The iteration order of this collection will correspond to the - * initial ordering of this series of columns in the table. + * initial ordering of the columns in the table. *

* @since 3.1 */ public TmfEventsTable(final Composite parent, int cacheSize, - Collection columns) { + Iterable aspects) { super("TmfEventsTable"); //$NON-NLS-1$ fComposite = new Composite(parent, SWT.NONE); @@ -415,8 +406,12 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS fTable.setLinesVisible(true); // Setup the columns - if (columns != null) { - fColumns.addAll(columns); + if (aspects != null) { + for (ITmfEventAspect aspect : aspects) { + if (aspect != null) { + fColumns.add(new TmfEventTableColumn(aspect)); + } + } } TmfMarginColumn collapseCol = new TmfMarginColumn(); diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/columns/ITmfEventTableColumns.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/columns/ITmfEventTableColumns.java deleted file mode 100644 index fa1ca42bed..0000000000 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/columns/ITmfEventTableColumns.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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: - * Alexandre Montplaisir - Initial API and implementation - *******************************************************************************/ - -package org.eclipse.tracecompass.tmf.ui.viewers.events.columns; - -import java.util.Collection; - -import org.eclipse.jdt.annotation.NonNull; - -/** - * This class allows a trace type to specify which columns it wants to display - * in the Event Table. The "function" to populate the column for any given event - * is defined in each {@link TmfEventTableColumn}. - * - * @author Alexandre Montplaisir - * @since 3.2 - */ -public interface ITmfEventTableColumns { - - /** - * Return the columns specified by this trace type. - * - * The iteration order of the returned collection will correspond to the - * initial order of these columns in the view (from left to right). - *

- * Note to implementers: - *

- * Even if many traces of the same type can be opened at the same time, the - * column objects can (and probably should) be singleton instances. This - * means you do not need to create new column objects every time this method - * is called. - * - * @return The Event Table columns advertised by this trace type - */ - @NonNull Collection getEventTableColumns(); -} -- 2.34.1