package org.eclipse.tracecompass.internal.tmf.analysis.xml.core.model;
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
+
import java.util.LinkedList;
import java.util.List;
import org.eclipse.jdt.annotation.Nullable;
-import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
-import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
-
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.Activator;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.IXmlStateSystemContainer;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
import org.eclipse.tracecompass.statesystem.core.statevalue.TmfStateValue;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
+import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.w3c.dom.Element;
if (name == null) {
throw new IllegalStateException("Invalid attribute name"); //$NON-NLS-1$
}
+
+ Object fieldValue = null;
/* First, look for a field with the given name */
ITmfEventField field = event.getContent().getField(name);
/* Field not found, see if it is a special case field */
if (cpu != null) {
return getQuarkRelativeAndAdd(startQuark, cpu.toString());
}
+ return IXmlStateSystemContainer.ERROR_QUARK;
+ }
+ /* Search between the trace event aspects */
+ for (ITmfEventAspect<?> aspect : event.getTrace().getEventAspects()) {
+ if (aspect.getName().equals(fName)) {
+ fieldValue = aspect.resolve(event);
+ break;
+ }
}
- return IXmlStateSystemContainer.ERROR_QUARK;
+ } else {
+ fieldValue = field.getValue();
}
- Object fieldValue = field.getValue();
if (fieldValue instanceof String) {
String fieldString = (String) fieldValue;
Integer fieldInterger = (Integer) fieldValue;
quark = getQuarkRelativeAndAdd(startQuark, fieldInterger.toString());
}
+
return quark;
}
case QUERY: {
import org.eclipse.tracecompass.statesystem.core.statevalue.TmfStateValue;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
+import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.w3c.dom.Element;
final ITmfEventField field = event.getContent().getField(fieldName);
+ Object fieldValue = null;
+
/* If the field does not exist, see if it's a special case */
if (field == null) {
-
if (fieldName.equalsIgnoreCase(TmfXmlStrings.CPU)) {
/* A "CPU" field will return the CPU aspect if available */
Integer cpu = TmfTraceUtils.resolveIntEventAspectOfClassForEvent(event.getTrace(), TmfCpuAspect.class, event);
*/
return TmfStateValue.newValueLong(event.getTimestamp().getValue());
}
- return value;
+ // This will allow to use any column as input
+ for (ITmfEventAspect<?> aspect : event.getTrace().getEventAspects()) {
+ if (aspect.getName().equals(fieldName)) {
+ fieldValue = aspect.resolve(event);
+ break;
+ }
+ }
+ if (fieldValue == null) {
+ return value;
+ }
+ } else {
+ fieldValue = field.getValue();
}
- Object fieldValue = field.getValue();
-
/*
* Try to find the right type. The type can be forced by
* "forcedType" argument.