use of org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.model.values.DataDrivenValue in project tracecompass by tracecompass.
the class TmfXmlStateAttributeAndLocationCuTest method testValidStateAttributeCompilation.
/**
* Test the compilation of a valid state attribute strings, except locations
*
* @throws SAXException
* Exception thrown by parser
* @throws IOException
* Exception thrown by parser
* @throws ParserConfigurationException
* Exception thrown by parser
*/
@Test
public void testValidStateAttributeCompilation() throws SAXException, IOException, ParserConfigurationException {
String[] validStrings = { "<stateAttribute type=\"null\" />", "<stateAttribute type=\"constant\" value=\"42\" />", "<stateAttribute type=\"eventField\" value=\"myfield\" />", "<stateAttribute type=\"eventName\" />", "<stateAttribute type=\"eventName\" value=\"ignored\" />", "<stateAttribute type=\"query\" ><stateAttribute type=\"constant\" value=\"queryPath\"/></stateAttribute>", "<stateAttribute type=\"self\" />", "<stateAttribute type=\"pool\" />" };
DataDrivenValue[] generated = { TmfXmlTestUtils.NULL_VALUE, new DataDrivenValueConstant(null, ITmfStateValue.Type.NULL, "42"), new DataDrivenValueEventField(null, ITmfStateValue.Type.NULL, "myfield"), new DataDrivenValueEventName(null), new DataDrivenValueEventName(null), new DataDrivenValueQuery(null, ITmfStateValue.Type.NULL, new DataDrivenStateSystemPath(ImmutableList.of(new DataDrivenValueConstant(null, ITmfStateValue.Type.NULL, "queryPath")), IBaseQuarkProvider.IDENTITY_BASE_QUARK)), new DataDrivenValueSelf(ITmfStateValue.Type.NULL), DataDrivenValuePool.getInstance() };
for (int i = 0; i < validStrings.length; i++) {
String validString = validStrings[i];
DataDrivenValue runtimeObj = generated[i];
Element xmlElement = TmfXmlTestUtils.getXmlElement(TmfXmlStrings.STATE_ATTRIBUTE, validString);
assertNotNull(xmlElement);
List<@NonNull TmfXmlStateValueCu> compileAttribute = TmfXmlStateValueCu.compileAttribute(ANALYSIS_DATA, xmlElement);
assertNotNull(validString, compileAttribute);
assertEquals("Number of attributes", 1, compileAttribute.size());
TmfXmlStateValueCu value = compileAttribute.get(0);
assertEquals("Expected attribute", runtimeObj, value.generate());
}
}
use of org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.model.values.DataDrivenValue in project tracecompass by tracecompass.
the class DataDrivenActionSegment method eventHandle.
@Override
public void eventHandle(ITmfEvent event, DataDrivenScenarioInfo scenarioInfo, IAnalysisDataContainer container) {
if (!(container instanceof DataDrivenPattern)) {
// This action should only be run with pattern state provider
return;
}
DataDrivenPattern provider = (DataDrivenPattern) container;
// Get the default timestamp
long start = provider.getExecutionData().getHistoryBuilder().getStartTime(container, scenarioInfo, event);
long end = event.getTimestamp().toNanos();
Object segmentName = fType.getValue(event, ITmfStateSystem.ROOT_ATTRIBUTE, scenarioInfo, container);
Map<String, Object> fields = new HashMap<>();
for (Entry<String, DataDrivenValue> field : fFields.entrySet()) {
Object value = field.getValue().getValue(event, ITmfStateSystem.ROOT_ATTRIBUTE, scenarioInfo, container);
// Segment content does not support null values
if (value != null) {
if (value instanceof ITmfStateValue) {
if (!((ITmfStateValue) value).isNull()) {
fields.put(field.getKey(), Objects.requireNonNull(((ITmfStateValue) value).unboxValue()));
}
} else {
fields.put(field.getKey(), value);
}
}
}
// Set the start time
if (fStart != null) {
Object startVal = fStart.getValue(event, ITmfStateSystem.ROOT_ATTRIBUTE, scenarioInfo, container);
if (startVal instanceof Number) {
start = ((Number) startVal).longValue();
}
}
// Set the end time
if (fEnd != null) {
Object endVal = fEnd.getValue(event, ITmfStateSystem.ROOT_ATTRIBUTE, scenarioInfo, container);
if (endVal instanceof Number) {
long endL = ((Number) endVal).longValue();
end = endL >= start ? endL : end;
}
} else if (fDuration != null) {
Object durationVal = fDuration.getValue(event, ITmfStateSystem.ROOT_ATTRIBUTE, scenarioInfo, container);
if (durationVal instanceof Number) {
long durationL = ((Number) durationVal).longValue();
long endL = start + durationL;
end = endL >= start ? endL : end;
}
}
TmfXmlPatternSegment segment = new TmfXmlPatternSegment(start, end, String.valueOf(segmentName), fields);
provider.getListener().onNewSegment(segment);
}
use of org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.model.values.DataDrivenValue in project tracecompass by tracecompass.
the class DataDrivenStateSystemPath method getQuark.
/**
* Get the quark in the system for this path by resolving each value along
* the path
*
* @param event
* The event to use, it can be null if called outside an event
* request.
* @param baseQuark
* The original base quark, as obtained by the caller
* @param scenarioInfo
* The scenario data information. It will be null if the event is
* null
* @param container
* The analysis data container
* @return The quark when the path is resolved.
*/
public int getQuark(@Nullable ITmfEvent event, int baseQuark, @Nullable DataDrivenScenarioInfo scenarioInfo, IAnalysisDataContainer container) {
int quark = fQuarkProvider.getBaseQuark(baseQuark, scenarioInfo);
for (DataDrivenValue val : fAttributes) {
Object value = val.getValue(event, quark, scenarioInfo, container);
if (value == null) {
// $NON-NLS-1$
Activator.logWarning("StateChange.handleEvent: A value is null: " + val);
return ITmfStateSystem.INVALID_ATTRIBUTE;
}
quark = container.getQuarkRelativeAndAdd(quark, String.valueOf(value));
if (quark < 0) {
// $NON-NLS-1$//$NON-NLS-2$
Activator.logWarning("The attribute quark is invalid for event " + event + ": " + fAttributes);
break;
}
}
return quark;
}
use of org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.model.values.DataDrivenValue in project tracecompass by tracecompass.
the class DataDrivenStateSystemPath method getQuark.
/**
* Get the quark in the system for this path by resolving each value along
* the path
*
* @param baseQuark
* The original base quark, as obtained by the caller
* @param container
* The analysis data container
* @return The quark when the path is resolved.
*/
public int getQuark(int baseQuark, IAnalysisDataContainer container) {
int quark = fQuarkProvider.getBaseQuark(baseQuark, null);
for (DataDrivenValue val : fAttributes) {
Object value = val.getValue(null, quark, null, container);
if (value == null) {
// $NON-NLS-1$ //$NON-NLS-2$
Activator.logWarning("State system path, a value is null for " + val + " from quark " + quark);
return ITmfStateSystem.INVALID_ATTRIBUTE;
}
ITmfStateSystem stateSystem = container.getStateSystem();
quark = stateSystem.optQuarkRelative(quark, String.valueOf(value));
if (quark < 0) {
// $NON-NLS-1$
Activator.logWarning("The attribute quark is invalid: " + fAttributes);
break;
}
}
return quark;
}
use of org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.model.values.DataDrivenValue in project tracecompass by tracecompass.
the class TmfXmlStateAttributeAndLocationCuTest method testValidLocationCompilation.
/**
* Test the compilation of a valid state location strings, and states
* attributes that use it
*
* @throws SAXException
* Exception thrown by parser
* @throws IOException
* Exception thrown by parser
* @throws ParserConfigurationException
* Exception thrown by parser
*/
@Test
public void testValidLocationCompilation() throws SAXException, IOException, ParserConfigurationException {
String locName = "loc";
String location = "<location id=\"" + locName + "\">" + "<stateAttribute type=\"constant\" value=\"abc\" />" + "<stateAttribute type=\"eventField\" value=\"myField\" />" + "</location>";
AnalysisCompilationData data = new AnalysisCompilationData();
Element xmlElement = TmfXmlTestUtils.getXmlElement(TmfXmlStrings.LOCATION, location);
assertNotNull(xmlElement);
TmfXmlLocationCu locationCu = TmfXmlLocationCu.compile(data, xmlElement);
assertNotNull("location", locationCu);
// Add the location to the compilation data
data.addLocation(locName, locationCu);
// Compile a location state attribute
String attributeXml = "<stateAttribute type=\"location\" value=\"" + locName + "\" />";
xmlElement = TmfXmlTestUtils.getXmlElement(TmfXmlStrings.STATE_ATTRIBUTE, attributeXml);
assertNotNull(xmlElement);
List<@NonNull TmfXmlStateValueCu> attribute = TmfXmlStateValueCu.compileAttribute(data, xmlElement);
assertNotNull("Location attribute compilation", attribute);
assertEquals("Attribute count", 2, attribute.size());
List<DataDrivenValue> expected = ImmutableList.of(new DataDrivenValueConstant(null, ITmfStateValue.Type.NULL, "abc"), new DataDrivenValueEventField(null, ITmfStateValue.Type.NULL, "myField"));
List<DataDrivenValue> actual = attribute.stream().map(a -> a.generate()).collect(Collectors.toList());
assertEquals("Location generated", expected, actual);
}
Aggregations