blob: 189471a96be20a1d6c14816ba0a4a9e0b924ecd0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 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:
* Francois Chouinard - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.tests.stubs.trace;
import java.io.EOFException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Vector;
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.trace.ITmfContext;
import org.eclipse.tracecompass.tmf.core.trace.ITmfEventParser;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
/**
* <b><u>TmfEventParserStub</u></b>
* <p>
* TODO: Implement me. Please.
*/
@SuppressWarnings("javadoc")
public class TmfEventParserStub implements ITmfEventParser {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
private static final int NB_TYPES = 10;
private final TmfEventType[] fTypes;
private final ITmfTrace fEventStream;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
public TmfEventParserStub(final ITmfTrace eventStream) {
fEventStream = eventStream;
fTypes = new TmfEventType[NB_TYPES];
for (int i = 0; i < NB_TYPES; i++) {
final Vector<String> fields = new Vector<>();
for (int j = 1; j <= i; j++) {
final String field = "Fmt-" + i + "-Fld-" + j;
fields.add(field);
}
final String[] fieldArray = new String[i];
final ITmfEventField rootField = TmfEventField.makeRoot(fields.toArray(fieldArray));
fTypes[i] = new TmfEventType("Type-" + i, rootField);
}
}
// ------------------------------------------------------------------------
// Operators
// ------------------------------------------------------------------------
static final String typePrefix = "Type-";
@Override
public ITmfEvent parseEvent(final ITmfContext context) {
if (! (fEventStream instanceof TmfTraceStub)) {
return null;
}
// Highly inefficient...
final RandomAccessFile stream = ((TmfTraceStub) fEventStream).getStream();
if (stream == null) {
return null;
}
// String name = eventStream.getName();
// name = name.substring(name.lastIndexOf('/') + 1);
// no need to use synchronized since it's already cover by the calling method
long location = 0;
if (context != null && context.getLocation() != null) {
location = (Long) context.getLocation().getLocationInfo();
try {
stream.seek(location);
final long ts = stream.readLong();
stream.readUTF(); /* Previously source, now unused */
final String type = stream.readUTF();
stream.readInt(); /* Previously reference, now unused */
final int typeIndex = Integer.parseInt(type.substring(typePrefix.length()));
final String[] fields = new String[typeIndex];
for (int i = 0; i < typeIndex; i++) {
fields[i] = stream.readUTF();
}
final StringBuffer content = new StringBuffer("[");
if (typeIndex > 0) {
content.append(fields[0]);
}
for (int i = 1; i < typeIndex; i++) {
content.append(", ").append(fields[i]);
}
content.append("]");
final TmfEventField root = new TmfEventField(ITmfEventField.ROOT_FIELD_ID, content.toString(), null);
final ITmfEvent event = new TmfEvent(fEventStream,
ITmfContext.UNKNOWN_RANK,
fEventStream.createTimestamp(ts * 1000000L),
fTypes[typeIndex], root);
return event;
} catch (final EOFException e) {
} catch (final IOException e) {
}
}
return null;
}
}