blob: daa3d92ae27aa61609250b0e8fca557865fe1a3f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2015 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
* Patrick Tasse - Move field declarations to trace
*******************************************************************************/
package org.eclipse.tracecompass.tmf.tests.stubs.trace.text;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventType;
import org.eclipse.tracecompass.tmf.core.event.collapse.ITmfCollapsibleEvent;
import org.eclipse.tracecompass.tmf.core.event.lookup.ITmfCallsite;
import org.eclipse.tracecompass.tmf.core.event.lookup.ITmfSourceLookup;
import org.eclipse.tracecompass.tmf.core.event.lookup.TmfCallsite;
import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.text.TextTraceEvent;
import org.eclipse.tracecompass.tmf.core.trace.text.TextTraceEventContent;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogTrace.Field;
/**
* System log trace implementation of TmfEvent.
*/
public class SyslogEvent extends TextTraceEvent implements ITmfCollapsibleEvent, ITmfSourceLookup {
/**
* Default constructor
*/
public SyslogEvent() {
super(null, null, new SyslogEventType(), null);
}
/**
* Copy constructor
*
* @param other
* the event to copy
*
*/
public SyslogEvent(final @NonNull SyslogEvent other) {
super(other);
}
/**
* Full Constructor
*
* @param parentTrace
* the parent trace
* @param timestamp
* the event timestamp
* @param type
* the event type
* @param content
* the event content (payload)
*/
public SyslogEvent(SyslogTrace parentTrace, final ITmfTimestamp timestamp,
final ITmfEventType type, final TextTraceEventContent content) {
super(parentTrace, timestamp, type, content);
}
@Override
public boolean isCollapsibleWith(ITmfEvent otherEvent) {
if (this == otherEvent) {
return true;
}
if (!(otherEvent instanceof SyslogEvent)) {
return false;
}
final SyslogEvent other = (SyslogEvent) otherEvent;
if (!getTrace().equals(other.getTrace())) {
return false;
}
if (getType() == null) {
if (other.getType() != null) {
return false;
}
} else if (!getType().equals(other.getType())) {
return false;
}
TextTraceEventContent content = this.getContent();
TextTraceEventContent otherContent = other.getContent();
if (content == null) {
if (otherContent != null) {
return false;
}
return true;
}
if (otherContent == null) {
return false;
}
List<TextTraceEventContent> fields = content.getFields();
List<TextTraceEventContent> otherFields = otherContent.getFields();
int size = fields.size();
if (size != otherFields.size()) {
return false;
}
// At i = 0 the timestamp is stored and needs to be bypassed
for (int i = 1; i < size; i++) {
if (!fields.get(i).equals(otherFields.get(i))) {
return false;
}
}
return true;
}
@Override
public ITmfCallsite getCallsite() {
if (getContent() != null) {
long lineNo = 0;
try {
lineNo = Long.valueOf((String) getContent().getField(Field.LINE).getValue());
} catch (NumberFormatException e) {
// ignore
}
return new TmfCallsite((String) getContent().getField(Field.FILE).getValue(), lineNo);
}
return null;
}
}