/******************************************************************************* * 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 v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * 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; } }