import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceContext;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceProperties;
import org.eclipse.tracecompass.tmf.core.trace.TmfContext;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
*
* @author Matthew Khouzam
*/
-public class BtfTrace extends TmfTrace implements ITmfEventParser, ITmfPersistentlyIndexable, ITmfTraceProperties, AutoCloseable {
+public class BtfTrace extends TmfTrace implements ITmfPersistentlyIndexable, ITmfTraceProperties, AutoCloseable {
private static final int TIMESTAMP_NUM = 0;
private static final int SOURCE_NUM = 1;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.TmfContext;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
* @author Matthew Khouzam
*/
@SuppressWarnings("restriction")
-public class GdbTrace extends TmfTrace implements ITmfEventParser {
+public class GdbTrace extends TmfTrace {
// ------------------------------------------------------------------------
// Constants
*/
public TmfEmptyTraceStub() {
super();
- setParser(new TmfEventParserStub(this));
}
// ------------------------------------------------------------------------
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.tmf.core.Activator;
import org.eclipse.tracecompass.internal.tmf.core.request.TmfCoalescedEventRequest;
import org.eclipse.tracecompass.tmf.core.component.TmfEventProvider;
* <p>
* Dummy test trace. Use in conjunction with TmfEventParserStub.
*/
-public class TmfTraceStub extends TmfTrace implements ITmfEventParser, ITmfPersistentlyIndexable {
+public class TmfTraceStub extends TmfTrace implements ITmfPersistentlyIndexable {
// ------------------------------------------------------------------------
// Attributes
// The actual stream
private RandomAccessFile fTrace;
-// // The associated event parser
-// private ITmfEventParser<TmfEvent> fParser;
+ // The associated event parser
+ private final @NonNull ITmfEventParser fParser;
// The synchronization lock
private final ReentrantLock fLock = new ReentrantLock();
*/
public TmfTraceStub() {
super();
- setParser(new TmfEventParserStub(this));
+ fParser = new TmfEventParserStub(this);
}
/**
public TmfTraceStub(final String path,
final int cacheSize,
final long interval) throws TmfTraceException {
- super(null, ITmfEvent.class, path, cacheSize, interval, null);
+ super(null, ITmfEvent.class, path, cacheSize, interval);
setupTrace(path);
- setParser(new TmfEventParserStub(this));
+ fParser = new TmfEventParserStub(this);
}
/**
final int cacheSize,
final boolean waitForCompletion,
final ITmfEventParser parser) throws TmfTraceException {
- super(null, ITmfEvent.class, path, cacheSize, 0, null);
+ super(null, ITmfEvent.class, path, cacheSize, 0);
setupTrace(path);
- setParser((parser != null) ? parser : new TmfEventParserStub(this));
+ fParser = ((parser != null) ? parser : new TmfEventParserStub(this));
if (waitForCompletion) {
indexTrace(true);
}
final int cacheSize,
final boolean waitForCompletion,
final ITmfEventParser parser) throws TmfTraceException {
- super(resource, ITmfEvent.class, path, cacheSize, 0, null);
+ super(resource, ITmfEvent.class, path, cacheSize, 0);
setupTrace(path);
- setParser((parser != null) ? parser : new TmfEventParserStub(this));
+ fParser = ((parser != null) ? parser : new TmfEventParserStub(this));
if (waitForCompletion) {
indexTrace(true);
}
public TmfTraceStub(final TmfTraceStub trace) throws TmfTraceException {
super(trace);
setupTrace(getPath()); // fPath will be set by the super-constructor
- setParser(new TmfEventParserStub(this));
+ fParser = new TmfEventParserStub(this);
}
} catch (FileNotFoundException e) {
throw new TmfTraceException(e.getMessage());
}
- setParser(new TmfEventParserStub(this));
super.initTrace(resource, path, type);
}
fLock.lock();
try {
// parseNextEvent will update the context
- if (fTrace != null && getParser() != null && context != null) {
- final ITmfEvent event = getParser().parseEvent(context);
+ if (fTrace != null && context != null) {
+ final ITmfEvent event = fParser.parseEvent(context);
return event;
}
} finally {
fTrace = new CustomXmlTrace(definitions[0]);
/* Deregister the custom XML trace */
TmfSignalManager.deregister(fTrace);
- this.setParser(fTrace);
Collection<ITmfEventAspect> aspects = TmfTrace.BASE_ASPECTS;
fAspects = aspects;
}
}
+ @Override
+ public @Nullable ITmfEvent parseEvent(@Nullable ITmfContext context) {
+ return fTrace.parseEvent(context);
+ }
+
@Override
public @Nullable ITmfLocation getCurrentLocation() {
return fTrace.getCurrentLocation();
import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition.InputLine;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.TmfContext;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
* @author Patrick Tassé
* @since 3.0
*/
-public class CustomTxtTrace extends TmfTrace implements ITmfEventParser, ITmfPersistentlyIndexable {
+public class CustomTxtTrace extends TmfTrace implements ITmfPersistentlyIndexable {
private static final TmfLongLocation NULL_LOCATION = new TmfLongLocation(-1L);
private static final int DEFAULT_CACHE_SIZE = 100;
import org.eclipse.tracecompass.tmf.core.io.BufferedRandomAccessFile;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.TmfContext;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
* @author Patrick Tassé
* @since 3.0
*/
-public class CustomXmlTrace extends TmfTrace implements ITmfEventParser, ITmfPersistentlyIndexable {
+public class CustomXmlTrace extends TmfTrace implements ITmfPersistentlyIndexable {
private static final TmfLongLocation NULL_LOCATION = new TmfLongLocation(-1L);
private static final int DEFAULT_CACHE_SIZE = 100;
* <li> public ITmfContext seekEvent(double ratio)
* <li> public IStatus validate(IProject project, String path)
* </ul>
- * A concrete trace must provide its corresponding parser. A common way to
- * accomplish this is by making the concrete class extend TmfTrace and
- * implement ITmfEventParser.
* <p>
* When constructing an event, the concrete trace should use the trace's
* timestamp transform to create the timestamp, by either transforming the
* @see ITmfTraceIndexer
* @see ITmfEventParser
*/
-public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, ITmfTraceCompleteness {
+public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, ITmfEventParser, ITmfTraceCompleteness {
// ------------------------------------------------------------------------
// Class attributes
// The trace indexer
private ITmfTraceIndexer fIndexer;
- // The trace parser
- private ITmfEventParser fParser;
-
private ITmfTimestampTransform fTsTransform;
private final Map<String, IAnalysisModule> fAnalysisModules =
* @param interval
* The trace streaming interval. You can use '0' for post-mortem
* traces.
- * @param parser
- * The trace event parser. Use 'null' if (and only if) the trace
- * object itself is also the ITmfEventParser to be used.
* @throws TmfTraceException
* If something failed during the opening
*/
final Class<? extends ITmfEvent> type,
final String path,
final int cacheSize,
- final long interval,
- final ITmfEventParser parser)
- throws TmfTraceException {
+ final long interval)
+ throws TmfTraceException {
super();
fCacheSize = (cacheSize > 0) ? cacheSize : ITmfTrace.DEFAULT_TRACE_CACHE_SIZE;
fStreamingInterval = interval;
- fParser = parser;
initialize(resource, path, type);
}
}
fCacheSize = trace.getCacheSize();
fStreamingInterval = trace.getStreamingInterval();
- fParser = trace.fParser;
initialize(trace.getResource(), trace.getPath(), trace.getEventType());
}
if (traceName.isEmpty()) {
traceName = (resource != null) ? resource.getName() : new Path(path).lastSegment();
}
- if (fParser == null) {
- if (this instanceof ITmfEventParser) {
- fParser = (ITmfEventParser) this;
- } else {
- throw new TmfTraceException("Invalid trace parser"); //$NON-NLS-1$
- }
- }
super.init(traceName, type);
// register as VIP after super.init() because TmfComponent registers to signal manager there
TmfSignalManager.registerVIP(this);
return fIndexer;
}
- /**
- * @return the trace parser
- */
- protected ITmfEventParser getParser() {
- return fParser;
- }
-
// ------------------------------------------------------------------------
// ITmfTrace - Trace characteristics getters
// ------------------------------------------------------------------------
fStreamingInterval = (interval > 0) ? interval : 0;
}
- /**
- * Set the trace parser. Must be done at initialization time.
- *
- * @param parser the new trace parser
- */
- protected void setParser(final ITmfEventParser parser) {
- fParser = parser;
- }
-
// ------------------------------------------------------------------------
// ITmfTrace - SeekEvent operations (returning a trace context)
// ------------------------------------------------------------------------
}
// ------------------------------------------------------------------------
- // ITmfTrace - Read operations (returning an actual event)
+ // Read operations (returning an actual event)
// ------------------------------------------------------------------------
+ @Override
+ public abstract ITmfEvent parseEvent(ITmfContext context);
+
@Override
public synchronized ITmfEvent getNext(final ITmfContext context) {
// parseEvent() does not update the context
- final ITmfEvent event = fParser.parseEvent(context);
+ final ITmfEvent event = parseEvent(context);
if (event != null) {
updateAttributes(context, event.getTimestamp());
context.setLocation(getCurrentLocation());
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.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
* @version 1.0
* @author Francois Chouinard
*/
-public class TmfExperiment extends TmfTrace implements ITmfEventParser, ITmfPersistentlyIndexable {
+public class TmfExperiment extends TmfTrace implements ITmfPersistentlyIndexable {
// ------------------------------------------------------------------------
// Constants
setCacheSize(indexPageSize);
setStreamingInterval(0);
- setParser(this);
// traces have to be set before super.initialize()
if (traces != null) {
import org.eclipse.tracecompass.tmf.core.io.BufferedRandomAccessFile;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
import org.eclipse.tracecompass.tmf.core.trace.indexer.ITmfPersistentlyIndexable;
*
* @since 3.0
*/
-public abstract class TextTrace<T extends TextTraceEvent> extends TmfTrace implements ITmfEventParser, ITmfPersistentlyIndexable {
+public abstract class TextTrace<T extends TextTraceEvent> extends TmfTrace implements ITmfPersistentlyIndexable {
private static final TmfLongLocation NULL_LOCATION = new TmfLongLocation(-1L);
private static final int MAX_LINES = 100;
import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceProperties;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
* @author Matthew khouzam
*/
public class CtfTmfTrace extends TmfTrace
- implements ITmfEventParser, ITmfTraceProperties, ITmfPersistentlyIndexable,
+ implements ITmfTraceProperties, ITmfPersistentlyIndexable,
ITmfTraceWithPreDefinedEvents, AutoCloseable {
// -------------------------------------------
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;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceProperties;
import org.eclipse.tracecompass.tmf.core.trace.TmfContext;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
*
* @author Vincent Perot
*/
-public class PcapTrace extends TmfTrace implements ITmfEventParser, ITmfTraceProperties, AutoCloseable {
+public class PcapTrace extends TmfTrace implements ITmfTraceProperties, AutoCloseable {
private static final Collection<ITmfEventAspect> PCAP_ASPECTS =
checkNotNull(ImmutableList.of(