Skip to content

Commit 263f711

Browse files
committed
xml: Add data provider/descriptor list methods to XmlDataProviderManager
These methods are migrated from the trace server's DataProviderService. [Added] data provider/descriptor list methods to XmlDataProviderManager Signed-off-by: Bernd Hufmann <[email protected]>
1 parent fa5f5a3 commit 263f711

File tree

1 file changed

+84
-0
lines changed
  • tmf/org.eclipse.tracecompass.tmf.analysis.xml.core/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/core/output

1 file changed

+84
-0
lines changed

tmf/org.eclipse.tracecompass.tmf.analysis.xml.core/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/core/output/XmlDataProviderManager.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,29 @@
1616
import java.util.HashMap;
1717
import java.util.List;
1818
import java.util.Map;
19+
import java.util.Objects;
20+
import java.util.Set;
1921

2022
import org.eclipse.jdt.annotation.NonNull;
2123
import org.eclipse.jdt.annotation.Nullable;
2224
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.compile.AnalysisCompilationData;
2325
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.compile.TmfXmlTimeGraphViewCu;
2426
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.compile.TmfXmlXYViewCu;
27+
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlOutputElement;
28+
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils;
29+
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlUtils.OutputType;
2530
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.module.XmlXYDataProvider;
31+
import org.eclipse.tracecompass.tmf.analysis.xml.core.module.TmfXmlUtils;
32+
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
33+
import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
34+
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
35+
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
36+
import org.eclipse.tracecompass.tmf.core.model.DataProviderDescriptor;
2637
import org.eclipse.tracecompass.tmf.core.model.timegraph.ITimeGraphDataProvider;
2738
import org.eclipse.tracecompass.tmf.core.model.timegraph.TimeGraphEntryModel;
2839
import org.eclipse.tracecompass.tmf.core.model.timegraph.TmfTimeGraphCompositeDataProvider;
2940
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataModel;
41+
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider;
3042
import org.eclipse.tracecompass.tmf.core.model.xy.ITmfTreeXYDataProvider;
3143
import org.eclipse.tracecompass.tmf.core.model.xy.TmfTreeXYCompositeDataProvider;
3244
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
@@ -321,4 +333,76 @@ public void refreshDataProviderFactories() {
321333
fTimeGraphFactories.clear();
322334
fXYFactories.clear();
323335
}
336+
337+
/**
338+
* Get the XML data provider for a trace, provider id and XML
339+
* {@link OutputType}
340+
*
341+
* @param trace
342+
* the queried trace
343+
* @param id
344+
* the queried ID
345+
* @param types
346+
* the data provider types
347+
* @return the provider if an XML containing the ID exists and applies to
348+
* the trace, else null
349+
*/
350+
@SuppressWarnings("unchecked")
351+
public @Nullable <P extends ITmfTreeDataProvider<? extends ITmfTreeDataModel>> P getXmlProvider(ITmfTrace trace, String id, Set<OutputType> types) {
352+
for (OutputType viewType : types) {
353+
for (XmlOutputElement element : Iterables.filter(XmlUtils.getXmlOutputElements().values(),
354+
element -> element.getXmlElem().equals(viewType.getXmlElem()) && id.equals(element.getId()))) {
355+
Element viewElement = TmfXmlUtils.getElementInFile(element.getPath(), viewType.getXmlElem(), id);
356+
if (viewElement != null && viewType == OutputType.XY) {
357+
return (P) getXyProvider(trace, viewElement);
358+
} else if (viewElement != null && viewType == OutputType.TIME_GRAPH) {
359+
return (P) getTimeGraphProvider(trace, viewElement);
360+
}
361+
}
362+
}
363+
return null;
364+
}
365+
366+
/**
367+
* Get a list of XML defined data provider descriptors for a given trace/experiment.
368+
*
369+
* @param trace
370+
* a trace or experiment
371+
* @param types
372+
* the data provider types
373+
* @return list of XML defined data provider descriptors for a given trace/experiment.
374+
*/
375+
public List<IDataProviderDescriptor> getXmlDataProviderDescriptors(ITmfTrace trace, Set<OutputType> types) {
376+
List<IDataProviderDescriptor> descriptors = new ArrayList<>();
377+
for (ITmfTrace tr : TmfTraceManager.getTraceSetWithExperiment(trace)) {
378+
Map<String, IAnalysisModuleHelper> modules = TmfAnalysisManager.getAnalysisModules(tr.getClass());
379+
for (OutputType viewType : types) {
380+
for (XmlOutputElement element : Iterables.filter(XmlUtils.getXmlOutputElements().values(), element -> element.getXmlElem().equals(viewType.getXmlElem()))) {
381+
DataProviderDescriptor.Builder builder = new DataProviderDescriptor.Builder();
382+
String label = String.valueOf(element.getLabel());
383+
String elemId = element.getId();
384+
if (elemId == null) {
385+
// Ignore element
386+
continue;
387+
}
388+
builder.setId(elemId);
389+
if (viewType == OutputType.XY) {
390+
builder.setProviderType(ProviderType.TREE_TIME_XY);
391+
} else if (viewType == OutputType.TIME_GRAPH) {
392+
builder.setProviderType(ProviderType.TIME_GRAPH);
393+
}
394+
for (String id : element.getAnalyses()) {
395+
if (modules.containsKey(id)) {
396+
String analysisName = Objects.requireNonNull(modules.get(id)).getName();
397+
builder.setName(analysisName + ": " + label); //$NON-NLS-1$
398+
builder.setDescription(label + " provided by Analysis module: " + analysisName); //$NON-NLS-1$
399+
descriptors.add(builder.build());
400+
break;
401+
}
402+
}
403+
}
404+
}
405+
}
406+
return descriptors;
407+
}
324408
}

0 commit comments

Comments
 (0)