blob: f5f8fd315d234a3ee62b59739ff8a6b906b2d81a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Bernd Hufmann - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.tests.uml2sd.trace;
import java.io.EOFException;
import java.io.IOException;
import java.io.RandomAccessFile;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
import org.eclipse.tracecompass.tmf.core.event.TmfEvent;
import org.eclipse.tracecompass.tmf.core.event.TmfEventField;
import org.eclipse.tracecompass.tmf.core.event.TmfEventType;
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.tests.stubs.trace.TmfTraceStub;
/**
* Parser implementation for Uml2SD Test Traces.
*
*/
public class TmfUml2SDTestTrace implements ITmfEventParser {
ITmfTrace fEventStream;
/**
* Default Constructor
*/
public TmfUml2SDTestTrace() {
}
/**
* Constructor
* @param eventStream ITmfTrace implementation
*/
public TmfUml2SDTestTrace(ITmfTrace eventStream) {
fEventStream = eventStream;
}
/**
* @param eventStream ITmfTrace implementation to set
*/
public void setTrace(ITmfTrace eventStream) {
fEventStream = eventStream;
}
@Override
public ITmfEvent parseEvent(ITmfContext context) {
if (! (fEventStream instanceof TmfTraceStub)) {
return null;
}
// Highly inefficient...
RandomAccessFile stream = ((TmfTraceStub) fEventStream).getStream();
// String name = eventStream.getName();
// name = name.substring(name.lastIndexOf('/') + 1);
long location = 0;
if (context != null) {
location = (Long) context.getLocation().getLocationInfo();
}
try {
stream.seek(location);
long ts = stream.readLong();
stream.readUTF(); /* Previously source, now unused */
String type = stream.readUTF();
stream.readUTF(); /* Previously reference, now unused */
String sender = stream.readUTF();
String receiver = stream.readUTF();
String signal = stream.readUTF();
String[] labels = {"sender", "receiver", "signal"};
TmfEventType tmfEventType = new TmfEventType(type, TmfEventField.makeRoot(labels));
String content = "[";
content += sender;
content += "," + receiver;
content += "," + signal;
content += "]";
// Pre-parse the content
TmfEventField[] fields = new TmfEventField[3];
fields[0] = new TmfEventField("sender", sender, null);
fields[1] = new TmfEventField("receiver", receiver, null);
fields[2] = new TmfEventField("signal", signal, null);
ITmfEventField tmfContent = new TmfEventField(ITmfEventField.ROOT_FIELD_ID, content, fields);
ITmfEvent tmfEvent = new TmfEvent(fEventStream, ITmfContext.UNKNOWN_RANK, TmfTimestamp.create(ts, -9), tmfEventType, tmfContent);
return tmfEvent;
} catch (final EOFException e) {
} catch (final IOException e) {
}
return null;
}
}